复杂的多对多主键 MySQL table

Primary key in complicated many to many MySQL table

我读到在设计简单的多对多 table 时,处理主键的最佳方法是将它设置在两列上。这就是我在 table 中所做的,它将用户分配到工作组。但是现在,我有更复杂的table,它描述了访问共享FSO(文件系统对象=文件夹或文件)时用户或工作组有什么权限。我使用了 this answer 的解决方案,所以我使用两列指定 FSO,两列指定允许的用户或工作组。我的 table 看起来像这样:

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列,基本上这个table也是多对多的。但我不知道是否应该在所有 4 列上设置主键或如何设置以保持一致性。

保持简单。不要将规范化概念与 business/application 要求混在一起。最好有一个基于整数的自动递增列作为每个 table 中的主键,并在其他 table 中引用它。

如果您需要检查所述列的组合的唯一性,您应该有一个具有唯一约束的复合索引。业务或应用程序需求不断变化。当这种时候到来时,您不想更改主键。