复合外键有可能吗?

问题描述:

我有一个表:复合外键有可能吗?

CREATE TABLE test_part1 ( 

    Prefix ENUM('A','B') NOT NULL, 
    Unique_number int(11) NOT NULL, 
    Data_set1 decimal(5,2), 
    PRIMARY KEY (Prefix, Unique_number) 
) ; 

CREATE TABLE test_part2 ( 
    composite_foregin_key tinytxt(12) NOT NULL, 
    Data1 varchar (11), 
    Data2 varchar (11) 
) ; 

如何可以引用从“test_part1”表“test_part2”复合键的外键?

我是否需要创建2个称为fkPrefix和fkUnique_number的列,并使用相同的数据类型,还是可以创建一个名为composite_foregin_key的列?

如果composite_foregin_key的选项是可行的,那么composite_foregin_key将会是txt(12)吗?是否需要将组合键的数据类型更改为Prefix txt(1)和Unique_ number txt(11)?

将Prefix和Unique_number连接在一起非常重要,因为Unique_number下的项目存储在条件A或条件B中,并且引用的Prefix和Unique_ number总是在一起。

我想尽可能多地学习计算机科学,但这不是我的专业领域,在开始这个项目之前,我很早就参与了基本的db架构。请理解我的问题没有任何意义。如果需要,我会尝试以其他方式对其进行描述。

+0

“短语”不是“fraze”:-)。请你可以重新格式化你的问题,使它易于阅读,而不是一大块文本。 – ADyson

+0

aww :)我的阅读障碍已经出来了,感谢您纠正我ADyson – Moonlit

+0

TL; DR但复合外键的确是可能的。你可能想分享一些完整的CREATE TABLE语句。 –

syntax本身是相当简单:

[CONSTRAINT [symbol]] FOREIGN KEY 
    [index_name] (index_col_name, ...) 
    REFERENCES tbl_name (index_col_name,...) 
    [ON DELETE reference_option] 
    [ON UPDATE reference_option] 

reference_option: 
    RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT 

不过请注意[]意思是“可选”,|手段“之一”,并, ...意味着你可以通过添加分离commas-更多类似的项目你实际上并没有输入这些字符。

链接列的列类型需要匹配 - 这同样也是单列外键。由于您的test_part1的PK是由这两列组成:

Prefix ENUM('A','B') NOT NULL, 
Unique_number int(11) NOT NULL, 

...我希望看到在test_part2两个相似类型的列,但它并非如此。您的composite_foregin_key应聘者为TINYTEXT,且仅为一列。

遵循这些指导原则:

CREATE TABLE test_part1 ( 
    Prefix ENUM('A','B') NOT NULL, 
    Unique_number int(11) NOT NULL, 
    Data_set1 decimal(5,2), 

    PRIMARY KEY (Prefix, Unique_number) 
); 

CREATE TABLE test_part2 ( 
    composite_foregin_key_1 ENUM('A','B') NOT NULL, 
    composite_foregin_key_2 int(11) NOT NULL, 
    Data1 varchar (11), 
    Data2 varchar (11), 

    CONSTRAINT test_part2_fk1 FOREIGN KEY (composite_foregin_key_1, composite_foregin_key_2) 
    REFERENCES test_part1 (Prefix, Unique_number) 
); 

这也是未尝不可当学习使用有意义的名称,即使(或特别)。

+0

谢谢!我修改了我的表并创建了外键。 – Moonlit