在数据库中表示多对多关系的最佳方式是什么?

Car*_*ers 0 mysql database-design many-to-many

如果我有多个用户和多个页面,并且每个用户可以管理任意数量的页面,并且每个页面都可以由任意数量的管理员管理,那么我如何将所有这些权限存储在数据库中?

例如,我可以在users表中有一个字段,它只是一个以逗号分隔的页面ID列表,或者每个页面中的一个类似字段(由...等管理).但这需要我在数据库出来后处理它.

我可以为每个用户提供他们自己的表,使用key => value类型的布局,其中我有user => someuser,name => some guy,permissions => whatever,page_id => 4,page_id => 8, page_id => 12,等等.但这看起来很乱,需要为mysql用户提供额外的权限.

假设页面数量相对较小(它将是),我可以在users表中放置一个'flags'类型的字段,一个32位的INT(在这个实现中不会超过32个'页').但这只会允许一种开/关的特权.

我还考虑过拥有一个用户表,然后每个用户入口指向该用户的权限表,每个页面都有一行,具有该用户的相应权限 - 比其他用户更清晰"table-per -user"我列出的解决方案,但同样需要mysql帐户的额外权限.

还有其他想法吗?根据您的经验,最终成为最无痛解决方案的是什么?

Ada*_*son 18

许多< - >许多关系通常用中间表建模.在您的情况下,您将拥有这些表:

User        UserPage       Page
------      -----------    -------
UserID      UserID         PageID
...         PageID         ...
Run Code Online (Sandbox Code Playgroud)

中间表(UserPage此处)是存储特定于该组ID的信息的位置(在本例中为您的权限).