MySql: хранить данные с множественным выбором в базе данных - PullRequest
3 голосов
/ 17 марта 2011

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

Мне нужна лучшая структура базы данных для хранения этого выбора пользователя. Так что в будущем я смогу получить все эти данные.

Я думаю, я просто могу сохранить каждый вариант (userID, sport) как новую строку в таблице базы данных. Но меня это смущает, потому что таблица будет расширяться быстрее всего за несколько пользователей.

Есть идеи, братья?

Ответы [ 2 ]

3 голосов
/ 17 марта 2011

Решение, как это сделать, называется нормализацией.

Существует несколько способов сделать это в зависимости от того, насколько нормализованы ваши данные.

Самый простой способ - это то, что вы описали.

userID    userName    sport

Или вы можете иметь 2 таблицы

users
userID    userName    sportID

sports
sportID   sport

Или вы можете иметь 3 таблицы

users
userID    sportName

sports
sportID   sportName

user_sports
userID    sportID

Где таблица user_sports содержит информацию о том, какой пользователь любит какой вид спорта.

Какой метод вы выберете, зависит от взаимосвязи ваших данных и ожидаемого дублирования.

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

3 голосов
/ 17 марта 2011

Вы можете настроить таблицу «многие ко многим», например:

FavoriteSports
------
id user_id sport_id

1  5        20

Где у вас есть:

User
-------
id name

5  Mike

Sport
-----
id name

20 Football

Это имеет смысл, поскольку у пользователя много видов спорта, иУ спорта много пользователей.

...