gpt4 book ai didi

mysql - 复杂的多对多 MySQL 表中的主键

转载 作者:行者123 更新时间:2023-11-28 23:08:18 27 4
gpt4 key购买 nike

我读到过,在设计一个简单的多对多表时,处理主键的最佳方法是将它设置在两个列上。这就是我在将用户分配到工作组的表中的做法。但是现在,我有更复杂的表,它描述了在访问共享 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 列上设置主键或如何设置以保持一致性。

最佳答案

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

如果您需要检查所述列的组合的唯一性,您应该有一个具有唯一约束的复合索引。业务或应用程序需求不断变化。在这种情况下,您不希望更改主键。

关于mysql - 复杂的多对多 MySQL 表中的主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46584857/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com