【发布时间】:2013-12-27 15:26:43
【问题描述】:
我必须在 SQL Server 2005 数据库中创建一个新表 "holidays"。
第一个选项:
ID Int **PK**
CustomerId nvarchar (10)
HolidayDate Smalldatetime
Description nvarchar (50)
第二个选项:
CustomerId nvarchar (10) **PK**
HolidayDate Smalldatetime **PK**
Description nvarchar (50)
我认为通常我只需要在 HolidayDate 和 CustomerId 上加入一些查询。
我会更专注于后者,因为我会少一个字段,而且它在我看来“逻辑上”更好,即使我不得不担心不会插入重复记录。
你怎么看?
皮莱吉
【问题讨论】:
-
使用第一个选项将允许您将该 ID 用作另一个表中的外键。
-
是的,但通常我只需要在 HoidayDate 和 CustomeId 上加入一些查询...
-
即使您使用代理键,也没有什么能阻止您在
{CustomerID, HolidyDate}上创建唯一键。但这里有一些我想考虑的问题。 CustomerID 和 holidayDate 是如何填充的?如果有错误会发生什么? CustomerID 和 HolidayDate 是否可以更新? -
如果您将来有几个宗教的假期日期重叠怎么办?
-
关于是否使用代理或自然主键有一场古老的宗教战争(我在代理阵营),虽然没有强制执行,但我认为最好至少与您所做的选择保持一致。换句话说,其他表是否使用代理键?如果是这样,我会在这里做同样的事情。
标签: sql sql-server tsql primary-key composite-primary-key