0

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

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

第二个问题是针对该项目的:

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

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

用户可以选择的元素是分组的。每个元素可以在多个组中。有些版主拥有与元素相同的组或其中的一个子集,他们可以编辑他们所拥有的组的所有元素。除了组之外,还有用户的权限,例如用户、版主、管理员等。

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

在我的第一次尝试中,我在一个单独的表中拥有组和权限,在我的应用程序中具有单独的逻辑!

将应用程序权限与组分开会更好吗?

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

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

谢谢!

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

4

2 回答 2

2
  1. 这是主观的,但如果你按照流行的 ORM 提供的约定,看起来多元化是很常见的。我不认为你选择了哪个重要,只要你选择了就保持一致。
  2. 代表每个选择的记录是最有意义的。这允许排序以及查询以查找高评价元素等。最后,读取应用程序中的数据并改变其显示方式会更容易,因为您将使用项目列表而不是打包价值。
  3. 这很难回答,因为我不熟悉您的问题域。我建议开发用例,然后将它们应用到您提出的模型中,以查看裂缝在哪里。
于 2012-06-19T12:29:42.633 回答
1
  1. 使用单数还是复数并不重要,重要的是您在使用标准时保持一致。

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

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

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

于 2012-06-19T13:06:01.550 回答