Как хранить несколько элементов в базе данных. Путать со структурой базы данных - PullRequest
0 голосов
/ 09 января 2010

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

Я очень запутался со структурой базы данных. Всего 300 городов. Создание столбца для каждого города и сохранение его с логическим включением или выключением выглядит детской техникой. Любой, помогите мне, плз

Ответы [ 2 ]

5 голосов
/ 09 января 2010

Не уверен, почему вы отметили это как mysql и sql-server - вы используете оба?

В любом случае, это стандартное сопоставление «многие ко многим»:

Таблица: Пользователь

  • UserID (int, PK)
  • UserName (varchar (50), не нуль)

Таблица: Город

  • CityID (int, PK)
  • CityName (varchar (50), не ноль)

Таблица: UserCity

  • AssociationID (int, PK)
  • UserID (int, FK User, not null)
  • CityID (int, FK City, не null)

Чтобы получить все города для данного пользователя:

SELECT c.CityID, c.CityName
FROM User u
INNER JOIN UserCity uc
    ON uc.UserID = u.UserID
INNER JOIN City c
    ON c.CityID = uc.CityID
WHERE u.UserID = @UserID
0 голосов
/ 09 января 2010

Вам не нужно создавать столбец для каждого города. Вы просто создаете столбец «Город», где каждая строка представляет собой город. Затем у вас есть столбец «Посещенные», где каждая строка является логическим значением. Всего есть только два столбца.

City      |   Visited

London    |     1
Paris     |     0 
New York  |     1

и т.д ...

...