假设我有两张桌子:
Department(depNum)
Worker(id,deptNum) - key should be id
现在我希望dept引用Department中的现有值。 所以我在create table中写道:
CREATE TABLE Worker(
id integer primary key,
dept integer references Department);
我的问题是,我在很多例子中都看到你还将foreign key
与references
语句放在一起。我不明白什么是主键。
这是否意味着dept
也是Worker
的关键?
谢谢
答案 0 :(得分:1)
来自Wikipedia:
主键是唯一指定a的列的组合 行。这是一个独特键的特例。 。 。 。主键是 添加到SQL标准主要是为了方便应用程序 程序员。
如果没有主键,则无法在表中引用记录。外键允许您引用单个记录中另一个表中的记录。此外键通常引用外表中的主键。
答案 1 :(得分:1)
答案 2 :(得分:1)
假设每个工人在任何时候都只能在一个部门工作。 因此每个部门都有自己独特的ID。这是部门的主键,因为两个部门永远不应该具有相同的ID。
现在,必须跟踪每个工作人员,以便为他们分配自己的唯一ID。这是他们的主要关键。您需要将工作人员链接到他们所在的部门,因为他们一次只能在一个部门工作,您可以将他们的部门作为外键。 worker表中的外键链接到department表的ID。
答案 3 :(得分:0)
你有两张桌子:
PLAYER,
primary key (unique) PK_player_id
player_name
foreignt key to TEAM.team_id FK_team_id
TEAM
primary key (unique) PK_team_id
team_name
每个玩家都是一个TEAM。
PLAYER有一个TEE的FOREIGN-KEY(FK_team_id)。您也可以删除TEAM,它将删除级联中的所有播放器(如果已配置)。
现在你无法创建没有现有TEAM的玩家,因为数据库可以确保这一点。
修改强> 你没有要求外键吗?
主键是一列或多列,它将在数据库中的datarow上标识。如果你想创建一个外键,你必须使用一个唯一的列或多个列。
在我的示例中,每个表都有一个唯一键(主键),因为名称可能会更改。要识别外键的“目标”,它必须是唯一的。因此可以使用第二个表的prmary键。 (TEAM.PK_team_id)
答案 4 :(得分:0)
我不清楚,要求应该是
署(DEPT) Worker(id,dept) - key应为id
这意味着dept是Department中的主键和worker中的外键。 外键在工作表中不是唯一的,但它在Department Table中是唯一的。
工作人员表不能有部门未定义的未知部门。
我有道理吗?
答案 5 :(得分:0)
确保表的完整性,不允许您在表(工作人员)中输入值而不引用现有行(在部门)
答案 6 :(得分:0)
根据SQL-92标准:
外键(FK)可以引用PRIMARY KEY
或UNIQUE CONSTRAINT
。在PRIMARY KEY
的情况下,可以从外键声明中省略引用的列,例如以下三个都是有效的:
CREATE TABLE Department ( Department INTEGER NOT NULL PRIMARY KEY, ...);
CREATE TABLE Worker (dept INTEGER REFERENCES Department, ...);
CREATE TABLE Department ( Department INTEGER NOT NULL PRIMARY KEY, ...);
CREATE TABLE Worker (dept INTEGER REFERENCES Department (dept), ...);
CREATE TABLE Department ( Department INTEGER NOT NULL UNIQUE, ...);
CREATE TABLE Worker (dept INTEGER REFERENCES Department (dept), ...);
以下内容无效:
CREATE TABLE Department ( Department INTEGER NOT NULL UNIQUE, ...);
CREATE TABLE Worker (dept INTEGER REFERENCES Department, ...);
...因为必须声明外键中涉及的引用列。
当在线声明一个简单(单列)FK时,如上所述省略FOREIGN KEY
个关键字。
复合(多列)不能在线声明,并且不需要在线声明简单的FK:在这些情况下,引用列 AND {{1需要关键字(引用列的规则与前面所述的相同)例如这里只是几个例子:
FOREIGN KEY