使用Primary-Foreign键关系创建MySQL表

时间:2014-12-18 09:17:53

标签: mysql

我必须实现以下数据模型 -

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第二次。

1 个答案:

答案 0 :(得分:1)

一个表可以有多个候选键。每个候选键都是一列或一组列,这些列是UNIQUE,一起使用,也是NOT NULL。因此,为任何候选键的所有列指定值足以确定有一行符合条件,或者根本没有行。

候选键是关系数据模型中的基本概念。

通常的做法是,如果一个表中存在多个密钥,则将一个候选密钥指定为主密钥。通常的做法是使表中的任何外键引用主键,而不是任何其他候选键。

我推荐这些做法,但关系模型中没有任何内容需要在候选键中选择主键。

下面有一个复合主键。其中一列是自动递增的。这只适用于MyISAM。 InnoDB将生成错误&#34; ERROR 1075(42000):表定义不正确;只能有一个自动列,必须将其定义为键#34;。

DROP TABLE IF EXISTS testanimals; CREATE TABLE testanimals(   grp char(30)NOT NULL,   id mediumint(9)NOT NULL AUTO_INCREMENT,   name char(30)NOT NULL,   PRIMARY KEY(grpid) )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 |
+--------+----+---------+