Множество много-много взаимосвязей между одними и теми же таблицами или одно отношение n: m с идентифицирующим атрибутом? - PullRequest
0 голосов
/ 29 марта 2011

В настоящее время у меня есть несколько n: m отношений между 2 таблицами:

Users --> Favourites(user_id,post_id) <-- Posts
Users --> Follow(user_id,post_id)     <-- Posts

Вы бы предпочли иметь 2 таблицы соединения или только одну таблицу соединения с атрибутом, который отмечает тип соединения, так что-то вроде:

Users --> Users_Posts (user_id,post_id,type(VALUES="favourite,follow") <-- Posts

Это не совсем такой пример, как у меня в приложении, но я думаю, что вы можете понять эту идею.

1 Ответ

1 голос
/ 01 апреля 2011

Я не думаю, что здесь есть один «правильный» ответ.Я думаю это зависит .Если вы используете одну таблицу со столбцом «тип отношения» и часто хотите извлечь только отношения одного типа, скажем, просто «Избранное», то каждый запрос к этой таблице должен будет применять предложение WHERE для фильтрации типов, которые вы используете. не хочу.Это может привести к медленным запросам, если вы неправильно индексируете неключевой столбец «тип отношения».Кроме того, это делает так, чтобы будущие разработчики всегда должны были знать и не забывать фильтровать по типам, которые они хотят, или они могут неожиданно получить данные о связях, которые они не намереваются.Наличие двух отдельных таблиц легче понять.Например, мне проще быстро узнать, чего ожидать в таблице «Избранное», чем в таблице «Users_Posts», поэтому отдельные таблицы могут сообщать различия быстрее.

С другой стороны, есливам часто нужно выбирать оба типа отношений в одном наборе, тогда проще иметь их в одной таблице, потому что вам не нужно беспокоиться о выполнении UNION для объединения данных из двух таблиц в однуПосмотреть.Что если бы было 10 000 различных возможных типов отношений?Вы бы хотели 10000 разных столов, или вы бы предпочли один стол?Большинство людей предпочли бы одну таблицу в этом случае.

Так что я думаю, что это зависит от многих факторов, таких как ожидаемое использование, размер и т. Д. «Правильный» ответ - это больше искусство, чем наука.

...