我正在为我的大学开展一个项目,对我目前的数据库设计有点好奇:
首先,数据库表的常见命名方法是什么:单数还是复数?我曾经读过一些关于我的事情,但我不记得了吗?! (例如表:用户或用户)
第二个问题是项目的具体内容:
用户可以登录网站,必须从列表中选择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,如果有人想知道的话!
答案 0 :(得分:2)
答案 1 :(得分:1)
无论您使用单数还是复数,重要的是您在使用标准时保持一致。
MySQL中的逗号分隔值 bad ,主要是因为它不是使用关系数据库的一致方式。标准数据库关系或多对多表是一个更好的主意。
当您使权限管理系统更加灵活时,它会变得更加复杂。在这种情况下,一个好的启发式方法是构建满足您要求的最简单的系统,但没有更简单的。
说到简单,为什么你有一个单独的userdata表?您是否希望某些用户拥有两组名称和详细信息?