数据库架构相当新(计划使用SQLite)。话虽如此,我正在考虑使用代理键,因为数据库当前包含一个复合键(3列),它出现在我的大多数表中。我有几个表包含3列唯一键和一列包含一些信息;我还有一个表包含3列唯一键和3列作为外键(许多父项)。将所有这些表组合成一个表似乎没有意义,因为会有很多空字段。
如果我选择其中一个,任何坑都会掉下来?通常认为哪一个更方便编程?
提前谢谢。
答案 0 :(得分:4)
每种技术都有优点和缺点。
通常,如果您只需要引用单个代理键列,则编写SQL语句和JOIN会更容易。它还大大减少了数据库的大小。
另一方面,使用代理键,您经常会发现自己必须向JOIN添加至少一个额外的表,以便检索作为代理键一部分的信息。
代理键的另外两个优点:
许多框架要求使用整数主键字段。
如果您将记录绑定到任何类型的用户界面控件(例如,网页上的输入),为了识别目的,将单个值附加到控件上要比编码和编码更容易。解码多列。