【问题标题】:I need help designing my oo database to handle multiple kind-of relations我需要帮助设计我的 oo 数据库来处理多种关系
【发布时间】:2010-07-05 19:29:47
【问题描述】:

我目前正在用 java 创建一个数据库程序,但我对设计有点卡住了。这很简单,直到我遇到了 40 多种不同类型的活动,从书籍销售到教程再到广播/电视节目露面。每种活动类型都有一组不同的属性,例如所需的文档、活动类型的名称等。

我考虑过对每个活动进行硬编码。我还考虑将活动类型概括为子类,例如基于出勤的活动和基于购买的活动,但它限制了系统的可扩展性。我还必须考虑对象的类别。是否必须制作 40 个不同的类来扩展活动?我也考虑过创建一个 activity_type 表,但我不知道如何在 java 部分实现活动类型。

我的问题是:我应该如何设计我的系统?

【问题讨论】:

    标签: database-design oop


    【解决方案1】:

    您可能想了解Entity-attribute-value model

    【讨论】:

    • 我喜欢你的回答,但我将如何为程序本身实施解决方案?我需要用一堆布尔值创建一个类吗?
    【解决方案2】:

    您是否需要使用所有这些额外属性进行搜索/排序,即它们是否需要是 SQL 字段?如果不是,您可以将核心属性作为索引字段,并将其他字段存储在每个 SQL 表的一个字段中的 blob(例如 XML 文档)中。

    【讨论】:

      【解决方案3】:

      您可以考虑的另一种方法是为您的对象使用元数据。您可以有一个包含所有基本信息的活动表。然后有一个活动属性表来存储每个对象的所有元数据。这使得用最少的代码创建新对象变得非常容易。但这肯定会让查询变得更加困难。

      创建时,您只需应用包含应应用于您正在创建的对象的所有属性的模板。

      【讨论】:

        【解决方案4】:

        这是硬编码活动与将活动存储在数据库中的一种观点

        如果您在代码中对活动进行硬编码,则如果不重新编译和重新部署代码,就无法添加(或删除或更改)活动。但是在编码时,您知道所有可能的活动,因此您的代码可以处理所有这些活动。

        如果您将活动存储在数据库中,您可以轻松地添加、删除或更改活动。您可以允许用户(可能只有具有某些角色的用户)对活动进行更改。但您的代码不一定能正确处理新活动。

        所以,我会根据代码是否可以处理活动列表中的更改来选择。如果可以——例如,仅显示活动,或者它只是在下拉列表中带有活动选择的 CRUD——那么我会倾向于数据库方法。那是因为您可以在不重新编译代码的情况下更改数据库中的活动。

        【讨论】:

          【解决方案5】:

          考虑这个模型

          Type-of-Activity 1 <----> * Type-of-Things-Needed
            1                           1
            |                           |
            *                           *
          Activity         1 <----> * Things-Needed
          

          您需要确保只有 Things-Needed 可以添加到属于与 Activity 的 Type-of-Activity 关联的 Type-of-Things-Needed 的 Activity。

          【讨论】:

            【解决方案6】:

            有一个可用的模式。看看this question/answer;描述观察模式。它使用五个表,并且可以在“标准”RDBMS 中实现。一个实体可以有任意数量的自定义属性(观察)。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2023-03-24
              • 2012-04-05
              • 2010-11-11
              • 2021-04-06
              • 2023-03-18
              相关资源
              最近更新 更多