我已经读过,在设计一个简单的多对多表时,处理主键的最佳方法是将它设置在两列上。这就是我在表格中将其分配给工作组的方式。但是现在,我有一个更复杂的表,它描述了访问共享FSO(文件系统对象=文件夹或文件)时用户或工作组的权限。我使用了来自this answer的解决方案,所以我使用两列来指定'FSO,两列用于指定允许的用户或工作组。我的表看起来像这样:
id INT (primary key)
shared_file INT (foreign key)
shared_folder INT (foreign key)
allowed_user INT (foreign key)
allowed_workgroup INT (foreign key)
permission TINYINT
CONSTRAINT CHECK (shared_file IS NOT NULL OR shared_folder IS NOT NULL)
CONSTRAINT CHECK (allowed_user IS NOT NULL OR allowed_workgroup IS NOT NULL)
但是现在我想出了我实际上并不需要为id添加额外列的想法,基本上这个表也是多对多的。但我不知道是否应该在所有4列上设置主键或如何保持一致性。
答案 0 :(得分:1)
保持简单。不要将规范化概念与业务/应用程序要求混合在一起。最好在每个表中将基于整数的自动递增列作为主键,并在其他表中引用它。
如果要求检查所述列的组合唯一性,则应该使用具有唯一约束的复合索引。业务或应用程序要求不断变化。在这种情况发生时,你不会想要对主键进行更改。