2014-12-12 2 views
2

Я пытаюсь создать сайт дружбы. Проблема, с которой я сталкиваюсь, - это когда пользователь присоединяется к веб-сайту, на котором они должны заполнять форму. Эта форма имеет много фиксированных выпадающих элементов, которые пользователь должен заполнить. Ниже приведен пример одного из раскрывающихся списков.Дизайн базы данных - выпадающее поле ввода Проблема

Опуститесь (Любимые Питомцы)

товары в любимых домашних животных

1. Dog 
2. Cat 
3. Bird 
4. Hampster 

Что такое лучший способ сохранить эту информацию в базе данных. Сейчас таблица профилей имеет столбец для каждого фиксированного раскрывающегося списка. Это правильный дизайн базы данных. См. Пример:

User ID | Age | Country  | Favorite Pet | Favorite Season 
-------------------------------------------------------------- 
    1 | 29 | United States | Bird   | Summer 

Это правильный дизайн базы данных? сейчас у меня есть, вероятно, 30 + столбцов. Большинство столбцов исправлены, потому что они выпадают, и пользователь должен выбрать один из вариантов.

Каков правильный подход к этой проблеме?

p.s. Я также думал о создании таблицы для каждого раскрывающегося списка, но это действительно усложняло бы запросы и приводило бы к множеству таблиц.

Другой подход

Profile стол

ID | username | age 
------------------- 
1 | jason | 27 

profileDropDown стол:

ID | userID | dropdownID 
------------------------ 
1 | 1 |  2 
2 | 1 |  7 

выпадающим стол:

ID | dropdown | option 
--------------------- 
1 | pet  | bird 
2 | pet  | cat 
3 | pet  | dog 
4 | pet  | Hampster 
5 | season | Winter 
6 | Season | Summer 
7 | Season | Fall 
8 | Season | spring 
+2

Да, каждая таблица списков должна быть отдельной таблицей, если только вы не храните текст (т. Е. DOG вместо 1), что является плохим дизайном. Наличие 30 + столбцов не проблема, но они имеют смысл быть вместе, DB101 - Читайте о нормализации вашей базы данных –

ответ

3

«Лучший ва y, чтобы приблизиться »или« правильный путь », откроет здесь много дискуссий, которые рискуют закрыть этот вопрос. Я бы рекомендовал создать раскрывающуюся таблицу с столбцом «ТИП» или «ИМЯ». Затем вы должны указать уникальный идентификатор раскрывающегося списка в этом столбце, чтобы идентифицировать этот набор. Затем введите еще один столбец с названием «VALUE», в котором содержится значение выпадающего списка.

Например:

ID | TYPE | VALUE 
1 | PET | BIRD 
2 | PET | DOG 
3 | PET | FISH 
4 | SEASON | FALL 
5 | SEASON | WINTER 
6 | SEASON | SPRING 
7 | SEASON | SUMMER 

Затем, чтобы получить ПЭТ падение вниз, вы просто выбрать все из этой таблицы, где тип = «PET»

+0

спасибо за ваш ответ :). Как насчет таблицы пользователей вы оставите ее с столбцами 30 +. –

+0

Не зная больше о вашем дизайне стола, трудно сказать. Вы могли бы иметь «PET_DROPDOWN_ID» в таблице пользователя и использовать идентификатор из раскрывающегося списка, который они выбрали здесь. Вы можете создать таблицу сопоставления отношений, в которой есть выбранные выпадающие списки. Это очень сложно выбрать, не зная всей остальной части дизайна. – Ascalonian

+1

Ive только что запустил эту базу данных, поэтому сейчас у меня есть таблица пользователей. Я думал о таблице сопоставления отношений. –

0

Будет ли набор вопросов (выпадающие), чтобы спросить каждый пользователь когда-либо менялся? Будет ли вам (или вашему преемнику) когда-либо понадобиться добавлять или удалять вопросы с течением времени? Если нет, то таблица для пользователей с одним столбцом на вопрос в порядке, но если да, то она становится сложной.

Database пуристы требуют две таблицы для каждого вопроса:

  • Одна таблицы, содержащей список всех действительных ответов на этот вопрос
  • Одна таблицы, содержащей многие ко многим отношения между пользователем и ответом на «это "Вопрос

Если новый вопрос добавлен, создайте новые таблицы; если вопрос удален, отбросьте эти таблицы (и, конечно же, настройте весь свой код.) Это будет работать, но это вряд ли эффективно.

Если, как кажется вероятным, что все вопросы и отвечать на наборы подобны, то модель три-таблицы напрашивается сам собой:

  • таблица с одной строкой на вопрос (QuestionID, QuestionText)
  • таблица с одной строкой для каждого ответа на каждый вопрос (QuestionID, AnswerId, AnswerText)
  • таблица с одной строкой для каждого пользователя, ответивших на вопрос (UserId, QuestionID, AnswerId)

Addi g g g...................................

Как и в большинстве случаев, за этим стоит много «зависит», большинство из которых зависит от того, что вы хотите от своей системы.

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