复合外键可能吗?
Composite foreign key is it possible?
我有一个 tables:
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)
) ;
如何从table“test_part2”中的“test_part1”引用复合键作为外键?
我是否需要创建 2 个名为 fkPrefix 和 fkUnique_number 的列并使用相同的数据类型,或者我是否可以创建一个名为 composite_foregin_key 的列?
如果 composite_foregin_key 选项可行,我是否需要将复合键的数据类型更改为 Prefix txt (1) 和 Unique_ number txt (11),因为 composite_foregin_key 将是 txt ( 12)?
将 Prefix 和 Unique_number 连接在一起对我来说非常重要,因为 Unique_number 下的项目存储在条件 A 或 B 中,并且引用时 Prefix 和 Unique_ number 总是在一起。
我正在尝试尽可能多地学习计算机科学,但这不是我的专业领域,在从事这个项目之前,我很久以前就参与了基本的数据库体系结构。如果我的问题没有任何意义,请理解。如果需要,我会尝试用其他方式来表达它。
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
请注意,[]
表示 "optional",|
表示 "one of",, ...
表示您可以添加更多类似的项目,用逗号分隔——您不需要'实际键入这些字符。
链接列的列类型需要匹配——单列外键也是如此。因为你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)
);
使用有意义的名字也是一个不错的主意,甚至(或特别)在学习时也是如此。
我有一个 tables:
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)
) ;
如何从table“test_part2”中的“test_part1”引用复合键作为外键?
我是否需要创建 2 个名为 fkPrefix 和 fkUnique_number 的列并使用相同的数据类型,或者我是否可以创建一个名为 composite_foregin_key 的列?
如果 composite_foregin_key 选项可行,我是否需要将复合键的数据类型更改为 Prefix txt (1) 和 Unique_ number txt (11),因为 composite_foregin_key 将是 txt ( 12)?
将 Prefix 和 Unique_number 连接在一起对我来说非常重要,因为 Unique_number 下的项目存储在条件 A 或 B 中,并且引用时 Prefix 和 Unique_ number 总是在一起。
我正在尝试尽可能多地学习计算机科学,但这不是我的专业领域,在从事这个项目之前,我很久以前就参与了基本的数据库体系结构。如果我的问题没有任何意义,请理解。如果需要,我会尝试用其他方式来表达它。
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
请注意,[]
表示 "optional",|
表示 "one of",, ...
表示您可以添加更多类似的项目,用逗号分隔——您不需要'实际键入这些字符。
链接列的列类型需要匹配——单列外键也是如此。因为你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)
);
使用有意义的名字也是一个不错的主意,甚至(或特别)在学习时也是如此。