mysql - 简单的关系型数据库规划建议

标签 mysql database laravel

我正在创建一个简单的应用程序,用户通过 OAuth 系统登录,我将他们的用户 ID 存储在 session 中。

我的数据库有 3 个表:用户、组和页面

  • 一个用户可以在多个组中
  • 一个组可以有很多用户
  • 一个页面可以有多个组

基本上在我的设置区域:

  • 可以将用户分配到组
  • 可以将组添加到页面以允许访问

然后我可以使用用户的 ID 来查找他们所在的组,然后选择他们有权访问的页面 ID。然而,这种方法似乎很冗长,我认为会涉及很多循环(另外,我想我会得到许多相同的页面 ID?)。

我的解释草图:

http://i.imgur.com/oFVsniH.png

我确实觉得有更好的方法来实现这一点 - 使用一个“数据透视表”和 3 个表......类似:

http://i.imgur.com/IZfhZO1.jpg

如果有人可以深入了解什么是最好的,以及我的关系 (M-t-M) 是否正确,那就太棒了。

仅供引用:在 Laravel 4 上构建它

谢谢!

最佳答案

通常 Fourth Normal Form旨在防止您在单个交集表中存储多个多对多关系。

在这种情况下,您将页面的访问权限授予组,而不是用户。因此,我不会将对页面的引用存储在记录组中用户成员身份的同一个表中。

例如,您在一个组中有 1000 个用户,并且该组可以访问 1 个页面。但是在您的第二个设计中,您必须将组对页面的访问权限存储在 1000 行上。

关于mysql - 简单的关系型数据库规划建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17284352/

相关文章:

mysql - 将正在运行的 Play 应用程序部署到 CloudBees 时如何修复 MySQL 语法错误?

android - 从 Android 应用调试 SQLite 数据库

mysql - 数据透视表,找到恰好两行之间的公共(public)属性

mysql - 我应该选择 MySQL 还是 MongoDB?

mysql - 记录投票总数时存储辅助计票信息是否过度优化?

php - 如何通过路由直接传递变量

javascript - jquery ajax 按名称发布选择框数组

php - 仅当字符串不为空/空时如何解密字符串

php - 阻止下一个索引因完整性违规而增加

database - Oracle:删除子表时删除父表(双向级联删除)