Давайте посмотрим на классы, которые довольно очевидны:
Metro line
это набор Metro routes
Metro route
связан с последовательностью Metro stations
Metro route
определяется двумя крайностями Metro stations
Train
работает на Metro routes
Каждый маршрут имеет определенное время прибытия и пребывания на каждой станции.
Это означает, что маршруты - это не что-то общее (например, Бруклин - Квинс), а что-то очень специфическое (например, Бруклин - Квинс, начинающийся в 15:03).
Кроме того, поскольку несколько Metro routes
могут использовать один и тот же Metro station
, а Metro route
состоит из нескольких Metro stations
, мы имеем связь между многими из этих двух классов. время и пребывания не зависят ни от маршрута, ни от станции. Поэтому лучше всего рассматривать его как свойство класса ассоциации :
Тот факт, что у вас есть запланированное время и пребывание, а также фактическое время и пребывание, означает, что есть только два разных свойства. Положение каждого поезда между станциями говорит нам о трафике.
Наконец, более сложный способ обработки различных временных параметров - рассмотреть класс Time table
. Ассоциация между Metro route
, Metro station
и Time table
будет тогда троичной ассоциацией , и класс ассоциации троичной ассоциации может содержать данные синхронизации (либо запланированные для запланированной таблицы, либо фактические для фактическая таблица, но вы также можете иметь несколько версий плана и актуальную версию для каждого дня года. Это будет абсолютно гибко.
Теперь, если вас не устраивает класс ассоциации, вы можете разложить ассоциацию «многие ко многим» на две ассоциации «многие к одному» со средним классом, который вы можете назвать Route stop
.