【发布时间】:2012-09-14 23:19:12
【问题描述】:
我正在尝试开发一个数据库来存储和检索动态创建的分层部门结构。 每个部门可以有一组子部门或一组子属性,但不能同时拥有。 在运行时,用户创建一个部门和部门的孩子。如果一个部门有属性作为子项,用户指定每个属性的类型(int/string/bool)、大小。用户可以指定任意数量的属性作为一个部门的子项。 所以部门结构可能是
RootDep
Dep1
Dep2
attribute1(string,12)
attribute2(int,10)
Dep3
Dep31
Dep32
Dep321
Dep4
Dep41
attribute4(bool,size not applicable)
attribute5(string,60)
attribute6(string,10)
attribute19(int, 5)
Dep5
我需要将此层次结构保存在数据库中。之后,用户还可以 为具有子属性的部门 Dep2 和 Dep41 添加数据。 所以我想我需要在用户添加带有属性的部门时为部门动态生成表格。
用户还可以修改结构。例如,添加新部门/属性,删除部门/属性,重命名部门名称,属性名称。用户还可以修改为具有子属性的任何部门输入的记录。
请告诉我为此目的设计数据库的最佳方式。
【问题讨论】:
-
在传统建模中,添加新部门就是添加新数据 (DML)。添加新属性就是添加新数据定义 (DDL)。如果您想要用户生成的属性,那么您将走向 EAV 设计。但是,请注意:如果每个用户基本上都可以构建自己的数据模型,那么以集成方式使用数据几乎是不可能的。
标签: mysql sql database sql-server-2008 database-design