代码之家  ›  专栏  ›  技术社区  ›  cesar

我需要帮助设计我的OO数据库来处理多种关系

  •  0
  • cesar  · 技术社区  · 14 年前

    我现在在Java中创建一个数据库程序,我有点被设计所困扰。这是非常直接的,直到我接触到有超过40种不同类型的活动,从书籍销售到教程,到广播/电视节目的出现。每个活动类型都有一组不同的属性,例如所需的文档、活动类型的名称等。

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

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

    6 回复  |  直到 14 年前
        1
  •  1
  •   ChrisW    14 年前

    你可能想看看 Entity-attribute-value model .

        2
  •  0
  •   ChrisW    14 年前

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

        3
  •  0
  •   spinon    14 年前

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

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

        4
  •  0
  •   DOK    14 年前

    这里有一个观点 对活动进行硬编码,而不是将它们存储在数据库中 :

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

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

    所以, 我的选择基于代码是否可以处理活动列表中的更改 . 如果它可以——例如,活动只显示,或者它只是DropDownlist中活动选项的crud——那么我将倾向于使用数据库方法。这是因为您可以在不重新编译代码的情况下更改数据库中的活动。

        5
  •  0
  •   Marjan Venema    14 年前

    考虑这个模型

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

    您需要确保只有所需的东西才能添加到与活动类型的活动相关联的所需类型的活动中。

        6
  •  0
  •   Community Bob Smith    7 年前

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