views:

114

answers:

1

Hi,

I am implementing a small database(university Project) and i am facing the following problem.

I created a class diagram where i have a class

Train {Id, Name, Details}

And a class

RollingStock

which is than generalized in Locomotive and FreightWagon.

A train is Composed by multiple RollingStock at a certain time(on different days the rolling

stock will compose a different train).

I represented the relationship train - rolling stock as a diamond filled (UML) but still I

have a many to many relationship between the two tables.

so i guess i have to create an additional table to solve the many to many relationship

train_RollingStock.

but how do i represent the Composition?

Can i still use the filled diamond? If yes on which side?

Thanks

+1  A: 

I have a simple rule of thumb when choosing between a filled diamond and clear diamond.

If the existence of the child object is dependent on the parent, then it's a filled diamond. One hand has 5 fingers. If the hand disappears, so does the fingers.

If the existence of the child object is not dependent, then use a clear diamond. The rollingstock will still exist if the locomotive went away, so this is a clear diamond relationship.

BUT in this case you might be modelling the history of which rolling stock was attached to which train and when.

So you might have a joining class, with a reference to the train, the rolling stock, and having a start and end datetime. And then you have to decide the relationships. You could have:

  • Train has a number of RollingStockRelatinships (filled diamond encapsulation)
  • RollingStockRelationship has one Rolling Stock (clear diamond encapsulation)

Or you could have:

  • Rolling Stock has a number of RollingStockRelationships (filled diamond encapsulation)
  • RollingStockRelationship has one RollingStock (clear diamond encapsulation)

Or you could have:

  • RollingStockRelationship points to one of both types (clear diamond encapsulation)

The best design depends on how you would use it, and possibly a range of other factors that you can't even predict. You just have to pick one and go with it.

Andrew Shepherd