Class 图转换为关系模型;继承,和一个table进行匹配

Class diagram conversion to relational model; Inheritance, and a table for matching

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

用例和Class 图表尝试:

最后一张图是我最终认为我的用例可能是问题所在。

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

我无法弄清楚如何表示匹配,以及 FoodItems 的菱形和连接到路由的匹配是否有意义。我知道继承在关系建模中通常不是一个好主意。只是到处都有 FK 的问题吗?感觉自己在原地踏步

这个对象关系映射主题可能非常复杂。但是看看你的图表,这里有一个过于简单的经验法则:

  • 将每个 class 映射到关系 table,但不进行泛化和专门化。当 ID fields 存在时,这些将充当主键。
  • 将具有两个专业化的每个 class 映射到一个关系 table,它结合了 class 的字段及其所有专业化的字段。这种技术称为 single inheritance table。它并不总是一个好的解决方案,但在您的案例中它绝对适合。
  • 对于每个一对n的关系(1 - 1..*,或1-0..*)添加1侧的主键(ID)作为n侧table中的外键.也为您的聚合执行此操作。这叫做foreign key mapping
  • 对于你的 n 到 n link (1..* - 1..*) 你需要添加一个关系 table,用两个 linked 的 ID tables(每个都定义为外键,并且两者一起作为组合主键)。这叫做association table mapping
  • 对于第二个 ItemMatch 中的一对一聚合,我认为添加两个字段就足够了,每个字段对应一个 foodItemID(使用不同的名称)。
  • 您还需要将作为 0..* 关系结果添加的外键定义为可选(可为空)

补充阅读: