Я бы не сказал, что "закрытые петли не очень хорошая практика".Тем не менее, они привлекают внимание к потенциальной проблеме.Поэтому было бы неплохо проверить все замкнутые циклы на наличие этой проблемы.
Пример из учебника кажется мне вполне понятным.Существует 2 способа определения местоположения / телефона сотрудника:
- Сотрудник -> Группа -> Комната -> Телефон
- или Сотрудник -> Комната -> Телефон
Это все равно, что хранить две переменные для одной и той же вещи, которые должны быть синхронизированы.Вероятно, что что-то пойдет не так, и переменные получат разные значения - тогда вы должны спросить: «Что из двух является правильным?»
Таким образом, пример из учебника освещает проблему, с которой вы должныследите за нашими.Однако проблема действительно сводится к семантике .Т.е. что означают отношения.В примере из учебника оба пути к Room
означают одно и то же.Однако, если бы Group -> Room
было просто «значением по умолчанию» для каждого сотрудника, потому что старшие сотрудники могли получить свою собственную комнату, или сотрудники могли быть временно назначены для работы в другом месте вне их группы, тогда дополнительные отношения были бы оправданы.
Переходя к вашему дизайну, вы должны сделать следующее:
- Искать закрытые группы
- Оценить семантику / цель / значение отношений
- Убедитесь, что вы не только что создали два пути к точно такой же информации .
Например, у вас есть:
- TestSample -> Coil -> Slab
- TestSample -> Plate -> Slab
( Простите за возможно абсурдное понимание вашей терминологии .)Значит, ваш тестовый образец может быть на 2 разных плитах одновременно?Или это означает, что ваш тестовый образец будет состоять из пластины и катушки, которые могут (но не обязательно) быть получены из разных плит?