实体关系图 - 组合

时间:2010-04-11 22:23:23

标签: uml

我正在实施一个小型数据库(大学项目),我面临以下问题。

我创建了一个类图,其中有一个类

训练{Id,Name,Details}

和一个班级

全部车辆

这比机车和货运公司概括。

列车由多个RollingStock在特定时间组成(在不同的日子滚动

股票将组成一个不同的列车。)

我代表了关系训练 - 滚动的股票作为钻石填充(UML),但我仍然

两个表之间有多对多的关系。

所以我想我必须创建一个额外的表来解决多对多的关系

train_RollingStock。

但我如何代表作文?

我还可以使用填充的钻石吗?如果是的话在哪一方?

由于

1 个答案:

答案 0 :(得分:2)

在填充钻石和透明钻石之间进行选择时,我有一个简单的经验法则。

如果子对象的存在依赖于父对象,则它是一个填充的菱形。 一只手有5个手指。如果手消失,手指也会消失。

如果子对象的存在不依赖,则使用透明钻石。 如果机车离开,车辆仍然存在,所以这是一个明确的钻石关系。

但是在这种情况下,您可能正在建模哪个车辆所附着哪个列车的历史以及何时。

所以你可能有一个加入课程,参考火车,机车车辆,并有一个开始和结束日期时间。 然后你必须决定关系。你可以:

  • 火车有许多RollingStockRelatinships(填充金刚石封装)
  • RollingStockRelationship有一个Rolling Stock(透明钻石封装)

或者你可以:

  • Rolling Stock有很多RollingStockRelationships(填充金刚石封装)
  • RollingStockRelationship有一个RollingStock(透明金刚石封装)

或者你可以:

  • RollingStockRelationship指向两种类型之一(透明钻石封装)

最佳设计取决于您如何使用它,以及可能还有一些您甚至无法预测的其他因素。你只需选择一个并继续使用它。