关系数据库结构存储子类别的唯一属性

时间:2011-05-21 03:57:03

标签: database-design

我正在创建一个可以是不同类型的结构数据库。每种类型都有一组独特的属性,例如材料,形状,与结构类型有关的特性。

例如,结构是一个桥梁,它可以具有跨度和材料类型。

结构的另一个例子是具有高度和材料类型和厚度的墙。

我不想生成包含所有可能属性的平面表,因为有许多类型的结构可以存在且属性是灵活的,并且有许多属性要存储。

基本上我们希望通过在每个类型的结构的单独表中存储唯一属性数据来防止记录变得太大,但我想不出一种方法来链接通用结构表以轻松指向属性表。

==================== EDIT,

现在搜索“泛化专业化关系建模”似乎我想将数据建模为具有父类“结构”的面向对象结构,该父类具有继承公共信息作为桥结构,墙结构的子类。现在唯一的问题是,我正在尝试帮助工程师创建一个简单的独立Access 2010数据库,但看起来我正确地生成了访问中的关系,父类的主键是孩子的主键和外键。类。这似乎在Access 2010中导致一个问题,即它希望父实例包含一个无意义的子类。

基本上我有,

StructureID作为桥和墙表上的结构,桥和墙表的主键,它们的主键是structureID链接回结构表。我对Access 2010不太熟悉,也不知道它为什么不起作用。

来自IBM的一篇论文,

"Figure 8. Mapping all classes of the extended hierarchy to data entities"

基本上想在Access 2010中制作它。

3 个答案:

答案 0 :(得分:0)

我建议尽可能多地将结构拆分成单独的表格 您还可以拥有包含所有结构及其常用属性的主表。

另一种方法是使用xml类型列,它可以像任何xml一样灵活,也可以应用模式来强制数据完整性。

你基本上需要在这两个选项之间取得平衡。

数据库设计还取决于您的DBMS功能。例如,并非所有数据库都支持XML类型。

[编辑]

表结构可能是这样的:

结构

  • Id - 自动生成PK
  • 名称
  • 类型
  • 颜色

  • 编号
  • StructreId引用结构(Id)
  • 长度
  • MaterialType

  • 编号
  • StructreId引用结构(Id)
  • 高度
  • Thikness
  • MaterialType

答案 1 :(得分:0)

您的案例看起来像是gen-spec设计模式的一个实例。之前提出了如何设计关系表以反映gen-spec的问题。

See one thread

答案 2 :(得分:0)

我认为您在Access中设置依赖项的方式可能会出现一个小错误。看起来你需要一对一的一对一。

相关问题