Reputation: 5386
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
Upvotes: 1
Views: 3049
Reputation: 45222
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:
Or you could have:
Or you could have:
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.
Upvotes: 3