2

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

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

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

4 回答 4

2

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

事实上,这是IS-A 关系的基础;)

于 2013-10-14T10:36:15.403 回答
1

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

于 2013-10-14T10:42:35.733 回答
1

是的。由于以下原因。

  1. 使它们成为主键将强制唯一性(而不是暗示它)。
  2. 主键可能会被集群化(取决于 dbms),这将提高某些查询的性能。
  3. 它节省了添加唯一约束的空间,在某些 DBMS 中也创建了唯一索引
于 2013-10-14T11:07:27.707 回答
0

当然。您可以在使用具体表继承类表继承方法映射继承层次结构时使用此方法,请参阅SQL Alchemy 文档

于 2013-10-14T10:44:18.977 回答