Я постараюсь ответить на ваши вопросы как можно более обобщенно и избегать повторения конкретных структур таблиц, как в предыдущих ответах. Вообще говоря, циклические отношения между вашими сущностями - это неплохо ... наоборот, они довольно распространены:
There are many Projects
Projects have Employees
Projects have Tasks
Employees are assigned some Tasks
В то время как у проекта есть сотрудники ... и у сотрудника также есть проект (или, возможно, несколько проектов, если сотрудник может работать над более чем одним проектом одновременно). С точки зрения базы данных, когда вы создаете внешний ключ, эта «круговая» связь существует независимо от того, хотите вы этого или нет.
Более важный вопрос, с концептуальной точки зрения, имеет ли значение, знает ли Сотрудник, частью какого проекта (проектов) он является? Хотя, вероятно, очень важно, чтобы проект знал, какие сотрудники над ним работают ... может быть не важно, чтобы Сотрудник знал, в каком проекте он работает. Это то, что называется «Навигация», и, в отличие от нашей структуры базы данных, мы МОЖЕТ контролировать это с помощью наших классов. Объект Project будет иметь коллекцию объектов Employee, но объект Employee не обязательно должен иметь свойство Project (или коллекцию проектов).
Я не могу дать вам готового ответа относительно судоходства. Обычно это субъективно и зависит от потребностей вашего бизнеса. Если бизнес, который вы моделируете, основан на концепции сотрудника, который знает, над какими проектами он работает, и эти знания важны для завершения процессов, которые будет выполнять ваша бизнес-логика ... тогда вам нужны эти круговые отношения. То же самое касается навигации между сотрудниками и задачами, проектами и задачами и т. Д.
person
jrista
schedule
02.06.2009