我有一张桌子:
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_part2”中的“test_part1”中的复合键作为外键引用?
我是否需要创建名为fkPrefix和fkUnique_number的2列并使用相同的数据类型,还是可以创建一个名为composite_foregin_key的列?
如果可以使用composite_foregin_key选项,我是否需要将复合键的数据类型更改为前缀txt(1)和Unique_ number txt(11),因为composite_foregin_key将是txt(12)?
将Prefix和Unique_number一起加入是非常重要的,因为Unique_number下的项目存储在条件A或B中,并且当引用的前缀和唯一编号总是在一起时。
我正在尽可能多地学习计算机科学,但这不是我的专业领域,在开展这个项目之前,我很久以前就参与了基本的数据库架构。如果我的问题没有任何意义,请理解。如果需要,我会尝试用其他方式表达。
答案 0 :(得分:0)
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
请注意,[]
表示"可选",|
表示"其中一个"并且, ...
表示您可以添加更多以逗号分隔的相似项目 - 您实际上并未输入这些字符。
链接列的列类型需要匹配 - 这两个单列外键也是如此。由于您的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)
);
在学习时,即使(或特别)使用有意义的名字也不是一个坏主意。