复合外键有可能吗?
我有一个表:复合外键有可能吗?
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架构。请理解我的问题没有任何意义。如果需要,我会尝试以其他方式对其进行描述。
的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)
);
这也是未尝不可当学习使用有意义的名称,即使(或特别)。
谢谢!我修改了我的表并创建了外键。 – Moonlit
“短语”不是“fraze”:-)。请你可以重新格式化你的问题,使它易于阅读,而不是一大块文本。 – ADyson
aww :)我的阅读障碍已经出来了,感谢您纠正我ADyson – Moonlit
TL; DR但复合外键的确是可能的。你可能想分享一些完整的CREATE TABLE语句。 –