【发布时间】:2014-06-24 02:02:53
【问题描述】:
在用户定义的表可以为实体指定不同类型的情况下,我有一个关于“最佳”设计解决方案的问题,但我想单独记录所有这些用户定义类型中的一种类型,因为这与另一个(用户定义的字段)表有关系。
例如有employees。员工有functions,由用户定义,但其中1个功能是“机械师”,我想保留mechanic的记录,因为机械师有skills基于productgroups,这也是由用户,但除此之外,机械技能也可以是用户定义的!
这是我的表格示例,让我在下面解释每个单独的表格:
- 员工
员工是数据库中所有被称为内部员工的人。
- 功能
功能是用户定义的记录,代表用户希望为员工添加的所有可能功能。 Mechanic 是一个预定义的函数记录,也是另一个可以保存额外记录的表。
- Employee_Functions
Employees 和 Functions 之间的联结表。
- Employee_MechanicSkills
设置为“机械师”功能的员工可以选择可用技能。这些技能包括在CustomMechanicSkills 中自定义创建的技能,没有指向任何表格的链接以及ProductGroups 定义的技能(见下文)。
- 产品组
ProductGroups 是用户定义的产品组。这些产品组需要由供应商或自己的公司进行维修和维护。如果它是自己的公司,最好知道哪个员工具有能够为其执行维护所需的技能 - 因此 ProductGroups 和 Employee_MechanicSkills 之间的关系。也可以为机械师创建额外的机械技能。
- 自定义机械技能
用户定义的机械技能。用户可能不仅希望将机械技能与现有产品组联系起来,而且还希望将附加的自定义要求与产品组联系起来。
- Employee_CustomMechanicSKills
Employees 和 CustomMechanicSkills 之间的连接表
我已经考虑了一段时间了。在我的数据库设计中,数据完整性是关键,因此我尽量规范化。但另一方面,数据结构的不必要的复杂性也不是我想要的。
我想听听您对这种设计的优缺点的一些看法和不同看法,如果有的话,也许会听到或看到更好的改进设计。非常感谢您的意见。
谢谢。
注意:命名约定尚未完全应用于此模型。
【问题讨论】:
-
我做了一个关于用户定义字段的不同解决方案的优缺点的演示:Extensible Data Modeling with MySQL。
-
有趣!我自己进行了一些挖掘,但从未听说过“序列化 LOB”、“倒排索引”和“在线架构更改”
标签: database-design relational-database