【问题标题】:Relational Database Structure Storing Unique Attributes of SubCatagories存储子类别的唯一属性的关系数据库结构
【发布时间】:2011-05-22 06:03:22
【问题描述】:

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

例如,结构是一座桥,桥面可以有跨度长度和材料类型。

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

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

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

===================== 编辑,

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

基本上我有,

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

来自 IBM 的一篇论文,

基本上想在 Access 2010 中实现。

【问题讨论】:

标签: database-design


【解决方案1】:

我建议尽量将结构拆分为单独的表。
您还可以拥有一个包含所有结构及其共同属性的主表。

另一种方法是使用 xml 类型的列,它可以像任何 xml 一样灵活,或者您可以应用架构来强制数据完整性。

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

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

[编辑]

表结构可能是这样的:

结构

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

  • 身份证
  • StructreId 引用结构 (Id)
  • 长度
  • 材质类型

  • 身份证
  • StructreId 引用结构 (Id)
  • 身高
  • 厚度
  • 材质类型

【讨论】:

  • 我已经只有通用表的通用信息,其他表有不同的唯一数据集。但是,我很难找到一种方法来链接这些表,而无需使用某种扁平链接表,这种链接表只会有大量空值,而结构不是特定类型。
  • @Roo - 更新了答案。希望我理解正确。
【解决方案2】:

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

See one thread.

【讨论】:

  • 感谢您提供问题的名称,我无法找到正确的方法来搜索此问题。 Gen-Spec 术语提供了很多与我的问题相关的有用信息。
【解决方案3】:

我认为您在 Access 中设置依赖项的方式可能犯了一个小错误。似乎你有一对一,你需要一对零或一。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多