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..*
关系结果添加的外键定义为可选(可为空)
补充阅读:
- Martin Fowler 的优秀著作“Patterns of Enterprise Application Architecture" explains the pros and cons of several mapping strategies for inheritance in full details if want to know more. In addition to the simple single inheritance table, you'll find also more complex alternatives approaches like class table inheritance, concrete table inheritance and inheritance mappers。
- 网络文章Mapping object to data model suggested by granier在评论(感谢!)
对于学校项目,我应该设计上学期项目的系统。我们正在使用 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..*
关系结果添加的外键定义为可选(可为空)
补充阅读:
- Martin Fowler 的优秀著作“Patterns of Enterprise Application Architecture" explains the pros and cons of several mapping strategies for inheritance in full details if want to know more. In addition to the simple single inheritance table, you'll find also more complex alternatives approaches like class table inheritance, concrete table inheritance and inheritance mappers。
- 网络文章Mapping object to data model suggested by granier在评论(感谢!)