mysql: правильный способ справиться с отношениями между пользователями и командами? - PullRequest
1 голос
/ 29 августа 2010

Новичок в MySQL БД здесь.У меня есть таблица ПОЛЬЗОВАТЕЛЕЙ и таблица КОМАНД.Пользователь может быть в более чем одной команде.Каков наилучший способ сохранить отношения между пользователем и какими командами он является?

Допустим, есть сотни команд, каждая команда состоит из около 20 пользователей, и в среднем пользователь может быть около 10 командТакже обратите внимание, что пользователи могут время от времени менять команды.

Я думаю о возможном добавлении столбца в мою таблицу TEAMS, которая содержит список идентификаторов пользователей, но тогда мне нужно добавить столбецмоя таблица USERS, которая содержит список идентификаторов команд.Хотя это может быть решением, оно кажется грязным для обновления членства.Кажется, что есть более разумный способ обработки этой информации ... Как, например, другой стол?Мысли?

Спасибо!

ps, какой тип поля лучше всего подходит для хранения списка и какой способ разделения?

1 Ответ

4 голосов
/ 29 августа 2010

Какой тип поля лучше всего подходит для хранения списка и какой способ разделения?

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

Что вы действительно ищете, так это таблица соединений .Например:

CREATE TABLE user_teams (
    user_id INT NOT NULL FOREIGN KEY REFERENCES users(id),
    team_id INT NOT NULL FOREIGN KEY REFERENCES teams(id),
    PRIMARY KEY (user_id, team_id)
);

, поэтому может быть любое число team_id с для одного user и любое число user_id с для одного team.(Но первичный ключ гарантирует, что нет одинаковых сопоставлений одного и того же пользователя и команды.)

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

SELECT teams.*
FROM user_teams
JOIN teams ON teams.id= user_teams.team_id
WHERE user_teams.user_id= (...some id...);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...