2017-01-29 2 views
0

У меня есть сомнения относительно способа связывания некоторых таблиц. У меня есть эти таблицы:Внешние ключи в mysql

  • Пользователь таблице: имя пользователя (первичный ключ)

  • команды таблица: TEAM_NAME (первичный ключ), имя пользователя (внешний ключ ссылки пользователя (имя пользователя))

С этими отношениями я получаю, что у пользователя может быть более одной команды.

  • Группа таблице: group_name (первичный ключ)

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

Я думал сделать отношения с тремя таблицами таким образом:

  • Group_teams стол: (group_name, имя пользователя, TEAM_NAME). Эта таблица будет иметь составной первичный ключ (имя_группы и имя пользователя), таким образом, я был бы уверен, что пользователь не может иметь более одной команды в одной группе.

Кроме того, я думаю, что я должен создать составные ссылки внешнего ключа User (имя пользователя) и Team (team_name), чтобы иметь возможность контролировать, что существует команда пользователя. Наконец, я должен создать ссылку на другие внешние ключи Group (group_name), чтобы управлять тем, что существует группа.

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

+0

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

ответ

1

Если пользователь может быть (не более) только одной командой, то у вас есть отношения 0/1 - многие.

Самый простой способ - установить TeamId в таблице Users. Это будет ссылка на внешний ключ для Teams.

Третьей таблице не требуется представлять это отношение.

+0

Да, я собирался сказать то же +1 – minigeek

+0

Привет Гордон Линофф и minigeek, я не объяснена хорошо ... Пользователь может контролировать один или несколько команд, но эта команда только управляется этим пользователем.Условие состоит в том, что группа может иметь много команд разных пользователей, но группа не может иметь более одной команды одного и того же пользователя. Не могли бы вы помочь мне, пожалуйста? – franxiscu

0

Там нет необходимости воспроизводить username поле в Group_teams таблице, просто group_name & team_name.

Создайте триггер на столе Group_teams, чтобы стрелять перед вставкой новой строки, проверяя наличие других команд с тем же username.

Посмотрите на вопрос «How do you check constraints from another table when entering a row into a table?», в частности this answer from Jim V, описывающий такую ​​настройку.

Смежные вопросы