TSQL主键太多列?

时间:2013-08-19 15:00:07

标签: sql-server tsql composite-primary-key

我有表A和B 无法编辑,并且都使用复合主键(region_id,number)。

我有N个表,所谓的信息,每个都有自己的ID作为主键。

A(或B)< - >信息表是 M:N关系,我需要这样一个表。 所以我用这些列

设计了一个表CtoInfo(其中C是A或B)
CREATE TABLE CtoInfo (
region_id ..
c_number ..
c_type // either A or B

info_id 
info_type
.. //some other columns
)

前3列标识A或B,其他2列标识信息。 (类型说哪个表和id是PK)

现在我想在此表上创建一个主键。但看起来我需要在PK约束中包含5列!

1 个答案:

答案 0 :(得分:1)

SQL Server最多允许16列包含在约束中。所以五列不是问题。

使用自然键时,通常会遇到多列主键约束。在这种设计中,以5或6列为键的“链接”表并不罕见。

现在,您的设计存在一些问题。通常,出于性能原因,您希望尽可能缩短主键。从性能角度来看,单个整数代理键通常是更好的选择。

您还要定义一个无法强制执行的外键关系。这通常表明数据库模式中存在问题。您正在链接到同一列中的2个不同实体。这意味着它们代表了非常相似的东西,应该存在于同一个表中。然后,您可以提供其他表,其中包含特定于其中一个而不是另一个的信息。 sys.objects,sys.tables和sys.procedures为您提供了一个如何工作的示例。 (在这种情况下,sys.tables和sys.procedures是包含sys.objects列的视图。在您的情况下,您不需要重复该信息。)