有人能解释一下数据库中的配置表和数据表有什么区别吗?以及如何设计或实现配置表?我正在使用 MySQL 并且要求是建立一个学生数据库。我知道数据表将包含与学生相关的字段,我已经为此设计了一个设计。我将实施的操作是
我如何为这种动态需求设计配置表,以便以后可以添加更多选项?
任何形式的帮助表示赞赏。请在投票前告诉我原因。提前致谢。
我在 Stack Overflow 上针对这个问题提出了一个相当强大的解决方案(请参阅此处)。
我不会在这里重现整个答案(详情参见 SO),但基本设计如下:
这是用于配置设置的Property Bag方法;请参阅以下 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_VALUE
s中挑选还是需要输入USER_SETTING.unconstrained_value
. 允许用户使用其设置的 GUI 需要了解提供哪个选项以及如何强制执行 theSETTING.data_type
和 themin_value
和max_value
限制(如果存在)。