Многие для многих таблиц ассоциации. Обычным является ли добавление дополнительных столбцов в эти таблицы?

Мы столкнулись со следующей ситуацией в нашей базе данных. У нас есть таблица "A" и таблица "B", которые имеют отношение M2M. Таблица ассоциаций называется "AB" и содержит столбец FK в таблице "A" и столбец FK в таблицу "B". Теперь мы определили необходимость хранения дополнительных данных об этой ассоциации. Например, дата, когда произошла ассоциация, и кто создал ассоциацию и т.д. Мы решили разместить эти дополнительные столбцы в таблице ассоциаций "AB". Однако, что-то говорит мне, что это недооценивается пуристами базы данных. С другой стороны, нам нет смысла создавать еще одну таблицу для хранения связанных данных.

Какая преобладающая мысль об этом?

Ответ 1

Я не вижу ничего плохого в этом. Если информация касается самой ассоциации, она кажется абсолютным правильным местом для ее хранения.

Если вы создадите новую таблицу для ее хранения, это будет просто относиться к таблице ассоциатов в любом случае один к одному. Это существенно расширило бы таблицу ассоциаций.

Ответ 2

Я сделал это раньше и не думаю, что с этим что-то не так. Если данные связаны с отношением, как в вашем случае, когда это дата, когда произошла ассоциация, и она не относится конкретно к одной таблице или другой, таблица сопоставления является местом ее размещения.

Ответ 3

Если данные фактически относятся к отношению, а не к одному из отдельных объектов... тогда да, поместите его в сводную таблицу.

Ответ 4

В самом деле имеет смысл хранить данные об ассоциации в самой таблице ассоциаций. Я никогда не слышал, чтобы кто-то хмурился над этим методом... он действительно ускорит процесс хранения этой информации в отдельной таблице, потому что это спасет вас от соединения, чтобы получить его.

Ответ 5

В этом дизайне вы рассматриваете ассоциацию как объект. Если эта реальная сущность, связь между двумя другими объектами, имеет свои собственные атрибуты, тогда таблица, представляющая это отношение, также должна представлять атрибуты этого отношения.

Если вы создали отдельную таблицу, какой объект реального мира вы бы моделировали с этой таблицей? Вспомогательная информация, связанная, но не связанная непосредственно с частью отношений между двумя объектами? Это трудно концептуализировать, кажется, не имеет большого смысла дизайна и почти наверняка будет хуже.

Ответ 6

"Тем не менее, что-то говорит мне, что это недооценивается пуристами базы данных".

Я не могу представить себе человека, который хорошо разбирается в дизайне базы данных и кто будет хмуриться над вашим дизайном, если этот дизайн действительно является точной моделью реальности, с которой вы имеете дело.

Ответ 7

В этот последний ответ, я выступаю за таблицу ссылок вместо простых отношений FK. Одно из преимуществ заключается в том, что отношения начинают иметь все больше и больше данных, связанных с ним, так что они становятся сущностью. В частности, с эффективными датами и изменениями даже в простой иерархии "один-два-один", все же может иметь большой смысл использовать дизайн таблицы ссылок "многие-ко-многим". Вы, очевидно, уже нуждались в таблице ссылок - теперь ясно, что к этому отношению существуют другие атрибуты.

Конечно, оказывается, что это подходящее место для размещения этих атрибутов; вы, вероятно, столкнетесь с некоторыми трудностями, поставив их в любую таблицу, либо с нормализацией, либо просто с неправильной семантикой. Это также дает хорошие варианты индексирования, так как вы можете добавить индекс к дате вступления в силу или статус отношения к этой относительно узкой таблице без принятия решения о том, какие индексы могут быть добавлены в другие таблицы сущностей

Я бы не подумал, что какой-либо опытный разработчик базы данных возражал бы, если бы вы продемонстрировали дизайн и как его дизайн-функции и преимущества были использованы на практике. Для меня это не потребует значительного обоснования дизайна.