配置表

Anj*_*waj 1 database-design

有人能解释一下数据库中的配置表和数据表有什么区别吗?以及如何设计或实现配置表?我正在使用 MySQL 并且要求是建立一个学生数据库。我知道数据表将包含与学生相关的字段,我已经为此设计了一个设计。我将实施的操作是

  • 添加
  • 显示
  • 删除
  • 排序
  • 搜索

我如何为这种动态需求设计配置表,以便以后可以添加更多选项?

任何形式的帮助表示赞赏。请在投票前告诉我原因。提前致谢。

Joe*_*own 6

我在 Stack Overflow 上针对这个问题提出了一个相当强大的解决方案(请参阅此处)。

我不会在这里重现整个答案(详情参见 SO),但基本设计如下:

这是用于配置设置的Property Bag方法;请参阅以下 ERD:

财产袋 ERD

这种设计允许您围绕您的设置来制定规则。这是方便、灵活且易于维护的,同时避免了所有人的自由。

使用此设计,您可以表驱动允许的设置,包括足够的元数据,以对用户选择(或输入)的值实施一些基本的约束/健全性检查。

如果您不想达到这种程度,那么简单的 EAV(键/值对)表将使您能够访问设置,同时允许将来创建新设置而无需更改架构。


编辑:(来自引用的 SO 答案:更多细节,包括一些示例......)

请注意,上面的 ERD 已经增加了更多的列详细信息(SETTING 上的范围值和 ALLOWED_SETTING_VALUE 上的列)。

以下是一些示例记录以供说明。

SETTING:
+----+------------------+-------------+--------------+-----------+-----------+
| id | description      | constrained | data_type    | min_value | max_value |
+----+------------------+-------------+--------------+-----------+-----------+
| 10 | Favourite Colour | true        | alphanumeric | {null}    | {null}    |
| 11 | Item Max Limit   | false       | integer      | 0         | 9001      |
| 12 | Item Min Limit   | false       | integer      | 0         | 9000      |
+----+------------------+-------------+--------------+-----------+-----------+

ALLOWED_SETTING_VALUE:
+-----+------------+--------------+-----------+
| id  | setting_id | item_value   | caption   |
+-----+------------+--------------+-----------+
| 123 | 10         | #0000FF      | Blue      |
| 124 | 10         | #FFFF00      | Yellow    |
| 125 | 10         | #FF00FF      | Pink      |
+-----+------------+--------------+-----------+

USER_SETTING:
+------+---------+------------+--------------------------+---------------------+
| id   | user_id | setting_id | allowed_setting_value_id | unconstrained_value |
+------+---------+------------+--------------------------+---------------------+
| 5678 | 234     | 10         | 124                      | {null}              |
| 7890 | 234     | 11         | {null}                   | 100                 |
| 8901 | 234     | 12         | {null}                   | 1                   |
+------+---------+------------+--------------------------+---------------------+
Run Code Online (Sandbox Code Playgroud)

从这些表中,我们可以看到可以确定的一些用户设置是最喜欢的颜色、项目最大限制和项目最小限制。最喜欢的颜色是字母数字的选择列表。项目最小和最大限制是设置了允许范围值的数字。该SETTING.constrained列确定用户是从相关ALLOWED_SETTING_VALUEs中挑选还是需要输入USER_SETTING.unconstrained_value. 允许用户使用其设置的 GUI 需要了解提供哪个选项以及如何强制执行 theSETTING.data_type和 themin_valuemax_value限制(如果存在)。