数据库设计外键

时间:2010-09-20 00:46:52

标签: sql sql-server database database-design normalization

我的数据库中的两个表如下:

[Employee] Table:
 Id (Primary Key, Autoincrement)
 FirstName
 LastName
 Status

[Status] Table:
 Status (Primary Key)

状态为以下之一:“FullTime”“Contractor”“Terminated”

[Employee] .Status如何引用[Status] .Status作为外键?我看到两种方法:

  1. [员工] .Status直接指向[Status] .Status
  2. 我将[Id]列添加到[Status]表并将其设为PK / Autoincrement。然后[Employee] .Status指向[Status] .Id。这意味着我必须进行连接才能获得状态文本。
  3. 其他表也可以引用Status表。这两种方法中的一种是“正确的”做事方式还是设计问题?

2 个答案:

答案 0 :(得分:4)

这基本上是设计问题,但通常最好在Status表中添加ID字段。这允许您更改状态值(拼写更正,语言翻译,术语更改以阐明含义等),而无需更新引用它的表中的数据。

此外,如果链接到字符串字段,则链接字段需要足够的空间来存储最长的状态字符串。链接到ID意味着您只需在链接字段中存储整数(或最坏的情况下,GUID)。

答案 1 :(得分:0)

更复杂的表格中的第三个选项,您希望在不丢失引用的情况下删除记录和更新名称,就像

[Employee] Table:
 Id (Primary Key, Autoincrement)
 FirstName
 LastName
 StatusNumber

[Status] Table:
Id (PK)
Number
Name