我必须实现以下数据模型 -
Table Name:job
Columns-
id(primary key)
version(primary key)
name <datatype>
PK_JOB
Table Name:dependencies
Columns-
id(pfk)
version(pfk)
depends_on_id(pfk)
depends_on_version(pfk)
PK_DEPENDENCIES
FK_JOB_DEPENDENCIES(INT,INT)
FK_JOB_DEPENDENCIES(INT,INT)
Iam在创建第二个FK关系时遇到错误。我想首先知道4个FK是否有可能引用2个键?如果是,如何实现上述。在创建{{1}时它给出了错误121第二次。
答案 0 :(得分:1)
一个表可以有多个候选键。每个候选键都是一列或一组列,这些列是UNIQUE,一起使用,也是NOT NULL。因此,为任何候选键的所有列指定值足以确定有一行符合条件,或者根本没有行。
候选键是关系数据模型中的基本概念。
通常的做法是,如果一个表中存在多个密钥,则将一个候选密钥指定为主密钥。通常的做法是使表中的任何外键引用主键,而不是任何其他候选键。
我推荐这些做法,但关系模型中没有任何内容需要在候选键中选择主键。
下面有一个复合主键。其中一列是自动递增的。这只适用于MyISAM。 InnoDB将生成错误&#34; ERROR 1075(42000):表定义不正确;只能有一个自动列,必须将其定义为键#34;。
DROP TABLE IF EXISTS test
。animals
;
CREATE TABLE test
。animals
(
grp
char(30)NOT NULL,
id
mediumint(9)NOT NULL AUTO_INCREMENT,
name
char(30)NOT NULL,
PRIMARY KEY(grp
,id
)
)ENGINE = MyISAM;
INSERT INTO animals(grp,name)VALUES (&#39;哺乳动物&#39;&#39;狗&#39),(&#39;哺乳动物&#39;&#39;猫&#39), (&#39;鸟&#39;&#39;企鹅&#39),(&#39;鱼&#39;&#39;不严&#39),(&#39;哺乳动物&#39 ;, &#39;鲸&#39), (&#39;鸟&#39;&#39;鸵鸟&#39);
SELECT * FROM animals ORDER BY grp,id;
返回:
+--------+----+---------+
| grp | id | name |
+--------+----+---------+
| fish | 1 | lax |
| mammal | 1 | dog |
| mammal | 2 | cat |
| mammal | 3 | whale |
| bird | 1 | penguin |
| bird | 2 | ostrich |
+--------+----+---------+