Какова лучшая практика для таблиц реляционной базы данных в MySQL? - PullRequest
0 голосов
/ 15 июня 2010

Я знаю, там много информации о MySQL. Но мне не удалось найти ответ на этот конкретный и действительно простой вопрос:

Допустим, у меня есть две таблицы:

ПОЛЬЗОВАТЕЛЕЙ (со многими полями, например, имя, улица, адрес электронной почты и т. д.) и ГРУППЫ (также со многими полями)

Отношение (я думаю?) 1: n, то есть ОДИН пользователь может быть членом МНОГИХ групп.

Что мне не нравится, так это создание другой таблицы с именем USERS_GROUPS_REL. В этой таблице только два поля:

us_id (уникальный ключ таблицы USERS) и gr_id (уникальный ключ таблицы ГРУПП)

В PHP я делаю запрос с объединением.

Это "лучшая практика" или есть лучший способ?

Благодарен за любую подсказку!


Привет всем,

спасибо за вашу быструю и полезную поддержку. Знание того, что я был на правильном пути, немного укрепляет мою уверенность в себе. : -)

Как прокомментировали многие, мой пример не 1: n, но много ко многим. Так же, как быстрый sql-урок:: -)

Это правильные термины? 1: n один ко многим n: 1 много к одному n: n много ко многим?

Ответы [ 4 ]

0 голосов
/ 16 июня 2010

Вы описали отношение многих ко многим. Используя эти отношения, многие ПОЛЬЗОВАТЕЛИ могут быть членами многих ГРУПП. Для ваших целей это действительно правильный путь.

Отношения «один ко многим» и «один к одному» не требуют ссылки или таблицы перекрестных ссылок (USERS_GROUPS_REL).

Вы можете найти этот урок полезным:

http://www.tonymarston.net/php-mysql/many-to-many.html

0 голосов
/ 15 июня 2010

Это была бы лучшая практика.

У вас есть две таблицы по обе стороны от соединения и таблица сопоставления (или таблица связей, или какая-либо другая терминология) в середине, которая обрабатывает отношение «многие ко многим» (группа имеет много пользователей и Пользователь может принадлежать ко многим группам).

Чтобы повысить производительность, вы должны создать составной ключ для таблицы сопоставления из us_id и gr_id. Вы также можете создать индекс на обратной стороне, так что если вам нужно отсортировать по gr_id, вы также получите выигрыш в производительности.

0 голосов
/ 15 июня 2010

Один пользователь может принадлежать ко многим группам, а одна группа содержит много пользователей, поэтому это отношение «многие ко многим».

То, как вы описываете это, является типичным и правильным.Отношение «многие ко многим» часто сопоставляется с классом ассоциации или таблицей отношений .

Иногда в таблице отношений есть больше столбцов.Например, пользователь может быть администратором определенной группы.Таблица users_group_rel будет также иметь поле administrator.

0 голосов
/ 15 июня 2010

Это довольно лучший случай :) Создание первичного ключа составного предиката в таблице отношений является оптимальным решением:

ALTER TABLE USERS_GROUPS_REL ADD PRIMARY KEY(us_id, gr_id)
...