代理键与复合键

job*_*obo 0 sql database sqlite database-schema

对数据库模式相当陌生(计划使用 SQLite)。话虽如此,我正在考虑使用代理键,因为数据库当前包含一个复合键(3 列),它出现在我的大多数表中。我有几个表,其中包含 3 列唯一键和一列包含一些信息;我还有一张表包含 3 列用于唯一键,以及相同的 3 列作为外键(许多父项)。将所有这些表组合成一个表似乎没有意义,因为会有很多空字段。

如果我选择其中之一,会不会掉坑?一般认为哪一种编程更方便?

先感谢您。

Lar*_*tig 5

每种技术都有优点和缺点。

一般来说,如果您只需要引用单个代理键列,则编写 SQL 语句和 JOIN 会更容易。它还大大减少了数据库的大小。

另一方面,使用代理键,您经常发现自己必须向 JOIN 添加至少一个额外的表,才能检索属于代理键的信息。

代理键的另外两个优点:

  1. 许多框架要求使用整数主键字段。

  2. 如果您将记录绑定到任何类型的用户界面控件(例如,网页上的输入),则将单个值附加到控件以用于识别目的比对多个列进行编码和解码要容易得多。

  • 包含产品、子组件、组件的物料清单。在子组件中,(ProductID, AssemblyName) 是唯一的。如果将其用作组件中的 PK 和 FK,则可以仅使用组件来按产品查找组件使用情况。相反,如果您使用代理整数主键,则必须 JOIN Sub-Assembly(或使用子查询技术)才能获取该信息。 (2认同)