外键是否可以是唯一的主键

时间:2013-10-14 10:32:53

标签: sql

我只是一个简单的问题。表可以将它唯一的主键作为外键吗?

澄清。当我创建表时,我有时会有一个包含多个键的表,其中一些键是外键。例如:

create table Pet(
Name varchar(20),
Owner char(1),
Color varchar(10),
primary key(Name, Owner),
foreign key(Owner) referecnes Person(Ssn)
);

所以现在我想知道是否可以这样做:

create table WorksAs(
Worker char(1),
Work varcahr(30),
primary key(Worker),
foreign key(Worker) references Person(Ssn)
);

这将导致两个表具有完全相同的主键。这是应该避免的,还是设计数据库的好方法?如果以上不是一个好的标准,我只会将Work变量作为主键,这样就可以了,但如果不需要则跳过似乎更简单。

4 个答案:

答案 0 :(得分:2)

是的,这样做是完全合法的。

事实上,这是IS-A relations;)

的基础

答案 1 :(得分:1)

是的,你可能会这样做。但是你需要小心,因为外键可以有NULL值而Primary不能。

答案 2 :(得分:1)

是。由于以下原因。

  1. 将它们作为主键将强制唯一性(而不是暗示它)。
  2. 主键可能是聚类的(取决于dbms),这将提高某些查询的性能。
  3. 它节省了添加唯一约束的空间,在某些DBMS中也创建了唯一索引

答案 3 :(得分:0)

不确定。使用Concrete Table InheritanceClass Table Inheritance方法映射继承层次结构时,可以使用此方法,例如, SQL Alchemy docs