我有一些定义为
的SQL表[ITEMS]
- Id (PK)
- Name
[SUPPLIERS]
- Id(PK)
- Name
[ITEM_SUPPLIERS]
- Id_Item(PK)
- Id_supplier(PK)
- Effective_date(PK)
- Currency(PK)
- UnitCount
- Cost
[ITEM_SUPPLIER_EXTENDED]
- Id_Item(PK)
- Id_supplier(PK)
- Effective_date(PK)
- Currency(PK)
- IdExtendedInfo (PK)
[EXTENDED_INFORMATION]
- IdExtendedInfo (PK)
- InfoData
我想知道为什么/为什么不建议在Id_Item_Supplier
中声明ITEM_SUPPLIERS
并通过此ID而不是所有ITEM_SUPPLIERS
PK与其他表相关联。另外,我还将添加一个Unique
约束来强制数据唯一。
基本上,我想避免将所有PK列从ITEM_SUPPLIER
复制到与其相关的其他表中。
结果:
[ITEM_SUPPLIERS]
- Id_Item_Supplier(PK)
- Id_Item(FK)
- Id_supplier(FK)
- Effective_date(FK)
- Currency(FK)
- Cost
- Comments
(UNIQUE)[Id_Item,Id_supplier,Effective_date,Currency]
[ITEM_SUPPLIER_EXTENDED]
- Id_Item_Supplier(PK)
- IdExtendedInfo (PK)
答案 0 :(得分:0)
您问:
我想知道为什么/为什么不建议在ITEM_SUPPLIERS中声明一个Id_Item_Supplier并通过此ID与其他表(而不是所有ITEM_SUPPLIERS PK)相关联。
最好有一个单独的单列作为每个表的主键。实际上,我使用表名(单数形式)后跟id
或_id
创建此类列几乎是默认列。
此列通常是identity
列或某种guid列(使用newsequentialid()
)。为什么单列有用?原因如下:
JOIN
更加安全-没有遗漏钥匙的危险。