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