【问题标题】:How would I go about designing this in a database我将如何在数据库中设计这个
【发布时间】:2011-03-15 15:07:21
【问题描述】:

在这一点上,我很困惑,我只是想找人来解决这个问题,所以你们就是这样。

我正在为我们的组织开发一个基于网络的库存计划。

在这一点上,我希望它尽可能通用,所以我正在研究这样的结构:

所以我看到的是有项目类型或类别,每个项目类型都有一组属性并且可以共享属性,每个项目都有一个项目类型,然后给出可以用值填充的项目属性,然后这些值必须与属性相关联。

这对其他人有意义吗?在这一点上,我感到困惑无济于事,因此任何想法或建议,甚至是阅读材料都可以使我朝着正确的大方向前进。

【问题讨论】:

    标签: database-design


    【解决方案1】:

    好吧,我看到了一个 ItemTypes 表,它定义了类型(类型 id、类型名称);定义属性(属性 id、属性名称)的属性表;列出适用于每种类型的属性的 ItemTypeProperties 表(即项目类型 ID、属性 ID);列出项目及其类型(项目 ID、项目类型)的项目表;和一个 ItemProperties 表,其中列出了每个项目的属性值(即项目 ID、属性 ID、值)。

    这有意义吗?

    【讨论】:

      【解决方案2】:

      通过显示所涉及关系的基数,图表可以更清晰。但我明白设计的基本内容。

      它被称为“实体-属性-值”模型,也称为“开放模式”,在数据库中执行此操作并不少见。但是,您应该知道这种方法有很大的缺点:

      • 通过 RDBMS 验证属性及其类型变得更加困难
      • 检索特定实体的属性值的查询更加复杂
      • 仅使用数据库查询很难推断该实体

      总之,您将不得不让您的应用程序或存储过程来管理这些属性,因为除了纯粹的存储和查找之外,数据库无法为您提供太多支持。

      请参阅http://en.wikipedia.org/wiki/Entity-attribute-value_model,了解有关此设计何时可能是一个好主意的详细信息。另请查看http://en.wikipedia.org/wiki/Inner-platform_effect,了解为什么它可能是一个坏的。您必须为您的应用程序决定这是否适合您。

      如果您想做的是为对象提供持久性,我应该注意到这是一个面向对象的数据库试图以更自然的方式解决的问题。如果您真的对这种设计感到沮丧,并且您可以随意查看任何 DBMS 可能会解决问题的方法,那么您可以研究一下。

      【讨论】:

      • 这有很大帮助。非常感谢!
      猜你喜欢
      • 2013-07-09
      • 2010-12-31
      • 1970-01-01
      • 2010-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多