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

Database design 我需要帮助设计我的oo数据库来处理多种关系,database-design,oop,Database Design,Oop,我目前正在用java创建一个数据库程序,我对设计有点执着。这是相当直截了当的,直到我提到有40多种不同类型的活动,从书籍销售到教程,再到广播/电视节目表演。每个活动类型都有一组不同的属性,例如所需的文档、活动类型的名称等 我考虑过对每个活动进行硬编码。我也考虑过将活动类型泛化为子类,如基于考勤的活动和基于购买的活动,但这限制了系统的可扩展性。我还必须考虑对象的类。是否需要制作40个不同的类来扩展活动?我也考虑过创建一个activity_类型表,但我不知道如何在java部分实现activity类型

我目前正在用java创建一个数据库程序,我对设计有点执着。这是相当直截了当的,直到我提到有40多种不同类型的活动,从书籍销售到教程,再到广播/电视节目表演。每个活动类型都有一组不同的属性,例如所需的文档、活动类型的名称等

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


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

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

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


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

以下是对活动进行硬编码与将其存储在数据库中的一种观点:

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

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


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

您可能需要阅读有关的内容。

考虑此模型

Type-of-Activity 1 <----> * Type-of-Things-Needed
  1                           1
  |                           |
  *                           *
Activity         1 <----> * Things-Needed
活动类型1*所需物品类型
1                           1
|                           |
*                           *
活动1*需要的东西

您需要确保只能将所需的内容添加到与活动类型相关联的所需内容类型的活动中。

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

我喜欢你的答案,但我如何将解决方案实现到程序本身?我需要用一堆布尔值创建一个类吗?