@Davidaa_WoW

Могут ли быть два типа связи одновременно между двумя таблицами?

Изучаем в университете дисциплину разработка баз данных. Стояла задача - разработать приложение с базой данных на 5-6 таблиц. Есть значит приложение - сервис по доставке. Есть таблица пользователей и таблица заказов. Изначально никаких проблем не возникло в однозначности проектирования - логично, что должна быть связь один-ко-многим. Т.е. у одного пользователя множество заказов, а заказ привязан к конкретному пользователю. И так, базы данных созданы, приложение почти доделано. Но тут, внезапно возникает необходимость в отслеживании у пользователя текущего заказа, т.к. заказ и корзина в условиях текущего приложения по сути одно и то же, только заказ может быть активным, либо нет. Абстрагировавшись от всей теории разработки БД, выбираю самое простое решение - добавление в таблицу пользователей поля "active_order_id", получая таким образом дополнительную связь между двумя таблицами один-к-одному.
Преподаватель с такой работой меня просто посылает, отказываясь даже смотреть на приложение, и оставшуюся часть БД, говоря, что нужно было раскрывать через промежуточную таблицу как многие-ко-многим...
Ума не приложу, куда в данную архитектуру пихать промежуточную таблицу, и зачем она тут вообще нужна? Конечно был вариант ещё в самом приложении писать массивные SQL запросы, делая выборку по связанным с пользователем заказам, проверяя у всех статусы.
Внимание, вопрос - может ли существовать подобная двойная связь между двумя таблицами. И если нет, то почему? Ведь производительность она даже улучшает, а так, не могу представить, каким образом она бы помешала расширению и усложнению архитектуры. Либо я чего-то не понимаю, либо это просто "нельзя, потому что не принято..."
  • Вопрос задан
  • 275 просмотров
Пригласить эксперта
Ответы на вопрос 2
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
user
orders
Этого достаточно
у пользователя может быть куча заказов
В логике магазинов, (большинства)
Корзина это вообще отдельная сущьность, которая соотносится с заказом, но не полностью.
Так что реализуйте ее и не заморачивайтесь
Ответ написан
@Akina
Сетевой и системный админ, SQL-программист.
Но тут, внезапно возникает необходимость в отслеживании у пользователя текущего заказа, т.к. заказ и корзина в условиях текущего приложения по сути одно и то же, только заказ может быть активным, либо нет.

Изменение техзадания требует забыть про всё ранее сделанное и начать сначала - то есть заново выполнить полный анализ предметной области с выделением сущностей-атрибутов-связей и построением ER-диаграммы. В ходе которого обнаружится, что схема претерпела радикальное изменение, и некоторые уже имеющиеся структуры (а лучше - все) следует спустить в унитаз и создать заново. Ибо в схеме появилась новая сущность, к тому же связанная с уже имеющейся сущностью отношением pattern-instance, которое даже при правильной реализации отличается повышенной проблемностью.

Абстрагировавшись от всей теории разработки БД, выбираю самое простое решение ..

Вы же вместо того, чтобы делать как надо, решили делать через одно место (причём это явно не голова). Как результат - неустранимое противоречие между теорией и получившейся поделкой-уродцем. На что собственно и указал преподаватель, отказавшись смотреть на полученное.

Чем скорее Вы смиритесь с тем, что следует начать работу заново, тем больше у Вас будет времени на её выполнение...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы