Uml 类图到关系模型的转换;继承和用于匹配的表

Uml 类图到关系模型的转换;继承和用于匹配的表,uml,relational-database,class-diagram,use-case,Uml,Relational Database,Class Diagram,Use Case,对于一个学校项目,我应该设计上学期项目的系统。我们正在使用UML,创建一个非常简单的用例图(没有类型的废话,只是参与者指向系统内部的用例),从中我们制作一个类图,然后是一个关系模型 用例和类图尝试: 最后一张图是我最终想到的问题可能是我的用例 我的应用程序允许人们/餐馆列出他们愿意捐赠的食物。为无家可归者提供食物的慈善机构要求食物。如果有火柴,慈善机构可以创建一条卡车路线,从所有火柴中提取食物 我很难弄清楚如何表示匹配,也弄不清楚这个食物钻石和连接到路由的匹配是否有意义。我知道在关系建模

对于一个学校项目,我应该设计上学期项目的系统。我们正在使用UML,创建一个非常简单的用例图(没有
类型的废话,只是参与者指向系统内部的用例),从中我们制作一个类图,然后是一个关系模型

用例和类图尝试:

最后一张图是我最终想到的问题可能是我的用例

我的应用程序允许人们/餐馆列出他们愿意捐赠的食物。为无家可归者提供食物的慈善机构要求食物。如果有火柴,慈善机构可以创建一条卡车路线,从所有火柴中提取食物


我很难弄清楚如何表示匹配,也弄不清楚这个食物钻石和连接到路由的匹配是否有意义。我知道在关系建模中继承通常是个坏主意。这只是到处都有FK的问题吗?我觉得自己好像在兜圈子。

这个对象-关系映射主题可能非常复杂。但看看你的图表,这里有一个过于简化的拇指规则:

  • 将没有泛化和专门化的每个类映射到关系表。当存在时,它们将充当主键
  • 将具有两个专门化的每个类映射到一个关系表,该关系表组合了类的字段及其专门化的所有字段。这种技术被称为。这并不总是一个好的解决方案,但在您的cas中,它完全适合您
  • 对于每个一对n关系(
    1-1..*
    ,或
    1-0..*
    ),在1侧添加主键(ID)作为外键,并在n侧的表中添加。对于您的聚合,也要这样做。这就是所谓的
  • 对于n到n链接(
    1..*-1..*
    ),您需要添加一个关系表,其中包含两个链接表的ID(每个表定义为外键,两个表一起作为组合主键)。这就是所谓的
  • 对于第二个
    ItemMatch
    中的一对一聚合,我认为添加两个字段就足够了,每个字段对应一个
    foodItemID
    (使用不同的名称)
  • 您还需要将由于
    0..*
    关系而添加的外键定义为可选(可为空)
其他阅读资料:

  • Martin Fowler的优秀著作“”详细解释了几种继承映射策略的优缺点,如果您想了解更多的话。除了简单的单继承表之外,您还会发现更复杂的替代方法,如、和
  • 评论中建议的Web文章(谢谢!)

您应该定义类型匹配:int、float、String等的SGBD类型。你可以看看另外两个解决方案来转换专业化(见下图,它解释了整个过程:)@granier确实是一个有趣的资源!谢谢你的提示:我已经相应地编辑了答案。欢迎:)很高兴能以积极的方式做出贡献。像往常一样,在用例合成方面,我推荐Bittner/Spence,尽管OP在这里已经做得很好。@Christophe感谢你打破了一些我已经忘记的旧概念。我忘了提到上学期我们为这个项目创建了一个ERD。我认为我不知道ERD之间的某种区别,因为我的教授似乎不关心我们前任教授高度评价的ERD。我一定是朝相反的方向走得太远了!非常感谢。我认为你的问题太宽泛了。所以我保留了@christope的答案。如果您希望另外显示包含MAPAPI,那么您的第二个UC图与第一个UC图一样好。这将限制系统,因为它必须提供对此类API的访问,而第一个图表保持打开状态。关于UC图表,如果您使用约定“右边的参与者是主要参与者,左边的参与者是次要参与者”,这意味着“输入食物项目”是由系统自己激活的用例。这可能是,但这是你想要的?@granier大会是“主要在左边”IIRC。但这是一个惯例,不是法律。@Kilian,我说过这是一个法律吗,我写了“如果你使用惯例”@ThomasKilian谢谢,我不确定我是否宽宏大量。重新访问用例是出于绝望,因为我认为我的头痛可能是因为计划。我将通过一个关系模型来强制执行我的方法,然后再回到这里。