数据库设计:自定义数据布局和权限管理

时间:2012-06-19 12:21:37

标签: mysql sql database

我正在为我的大学开展一个项目,对我目前的数据库设计有点好奇:

首先,数据库表的常见命名方法是什么:单数还是复数?我曾经读过一些关于我的事情,但我不记得了吗?! (例如表:用户或用户)

第二个问题是项目的具体内容:

用户可以登录网站,必须从列表中选择10个元素,并将每个元素的优先级从1添加到4.我的第一个尝试是将用户的选择保存在一行中作为CSV(例如1,2,3; 4,5,6; 7,8; 9,10代表元素1,2,3的选择,优先级为1等)。第二次尝试是将每个选项保存为单个条目,如:[user_id] | [choosen_element] | [choosen_priority]。您认为更好的变体是什么,还是有一个我没想过的更好的变体?

第三个问题是关于登录和权限管理的更多信息:

用户可以选择的元素属于组。每个元素可以分为多个组。有些主持人拥有与元素相同的组或其子集,并且他们可以编辑他们所属的组中的所有元素。除了组之外,还有用户的权利,例如用户,主持人,管理员等。

在我的上一个设计中,我将用户的权利定义为groups表的一部分,以便主持人组中的每个用户都可以编辑他所在的组中的项目。

在我的第一次尝试中,我将组和权利放在一张单独的表中,并在我的应用程序中使用单独的逻辑!

从组中分离申请权是否更好?

这是我当前布局的情节,如果我错过了什么,或者是否有人喜欢看图片;)

http://screens.rofln.de/2012-06-19-4f3o3A.png

谢谢!

顺便说一句:我正在使用PHP和MySql,如果有人想知道的话!

2 个答案:

答案 0 :(得分:2)

  1. 这是主观的,但是如果按照流行的ORM提供的约定,似乎多元化是很常见的。我不会想到你选择了哪些事情,只有你选择后才能保持一致。
  2. 代表每个选择的记录最有意义。这允许订购以及查询以找到高评级的元素等。最后,阅读应用程序中的数据并改变其显示方式将更容易,因为您将使用项目列表而不是打包价值。
  3. 这很难回答,因为我对您的问题域不熟悉。我建议开发用例,然后将它们应用到您建议的模型中,以查看裂缝的位置。

答案 1 :(得分:1)

  1. 无论您使用单数还是复数,重要的是您在使用标准时保持一致。

  2. MySQL中的逗号分隔值 bad ,主要是因为它不是使用关系数据库的一致方式。标准数据库关系或多对多表是一个更好的主意。

  3. 当您使权限管理系统更加灵活时,它会变得更加复杂。在这种情况下,一个好的启发式方法是构建满足您要求的最简单的系统,但没有更简单的

  4. 说到简单,为什么你有一个单独的userdata表?您是否希望某些用户拥有两组名称和详细信息?