Когда две таблицы имеют отношение «многие ко многим» или когда таблица имеет отношение «многие ко многим», мы можем моделировать это с помощью таблицы соединений ,Моделирование множественных отношений во многих отношениях между одними и теми же объектами в реляционной базе данных
Однако тип отношений может израсходовать за пределы первоначального типа, например:
Требования: мы имеем пользователей. каждый пользователь может иметь 0 или более других пользователей в качестве друзей
Решение: таблица пользователей и таблица соединений, называемая «user_user».
Затем мы обнаруживаем новое требование: некоторые дружеские отношения романтичны, или, другими словами, два пользователя могут быть связаны иначе, чем дружба.
Решения: с добавить столбец в таблицу соединения, которая содержит тип дружбы (друг | партнер | экс-друг) и так далее.
Решение b: переименуйте таблицу «user_user» в «дружбу» (это было бы лучшее имя, чтобы начать с этого подхода) и создать новую таблицу, называемую романсами, а также подключение пользователя к пользователю.
Затем мы обнаруживаем еще одно новое требование: пользователи могут платить другим пользователям. Опять же, мы можем контрейлеризовать на том же перекрестке или создать новый, называемый «долгами». На этот раз моя интуиция на 100% имеет отдельную таблицу.
Каждый раз, когда мы обнаруживаем новый тип отношения или подтип отношения к знанию, мы можем добавить столбец в таблицу одного соединения или создать новую таблицу соединений.
Вопрос в том, что является хорошим правилом для принятия решения о создании новой таблицы?
Это когда у нас должно быть больше одной строки на одну упорядоченную пару? Например, если прошлые отношения никогда не удаляются, поэтому, если два человека были друзьями в прошлом в течение двух лет, потеряли контакт, а затем снова подружились, мы хотим иметь старую строку также с датой начала и окончания, но имея две строки приводит к дублированию другой информации о столбцах (старая строка показывает, что пользователь должен деньги, а новый - нет).
Это когда дополнительный столбец не является логически определением одного типа отношений?
ОК: начало дня дружбы связана непосредственно к дружбе 1 1
Не OK: колонки для сколько денег один пользователь владеет другой пользователь может быть 1 к 1 для отношений, но логически не описание дружбы.
Если мы заранее знаем, что в двух таблицах должно быть много отношений между многими, это причина для планирования многих таблиц переходов или для создания более гибкой таблицы соединений (даже если тип соединения не является произвольным)?