2011-08-29 10 views
1

Возможно ли иметь несколько переменных в одном столбце, если кто-то выполняет поиск по ячейке? Скажем галочки, как это:Несколько переменных в одном столбце?

Музыка плясать: 1.Oldies 2.Reggae 3.pop 4.house

И допустим есть таблица под названием «События» , а один из столбцов - музыка. Может ли столбец каким-то образом содержать, скажем, 1,3,4, который будет искать, если кто-то выберет флажки 1,3 или 4, он вернет эту строку?

Спасибо :)

+3

Это может сработать, но это плохая идея: вы должны нормализовать эти данные. Сделайте дополнительный столик musicForEvent, который имеет один EventID и один столбец Music, теперь добавьте три строки, если в мероприятии есть три музыка. – Konerak

+1

Нормализация - не решение. То, что вы хотите, является чем-то более выразительным, чем реляционной моделью, поэтому я мог бы также предложить использовать NoSQL. – Halcyon

+0

@Frits выкидывает NoSQL, noice! –

ответ

4

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

Как правило, вы можете выразить эти отношения со вспомогательной таблицей и двумя разными таблицами для «Событий» и «Музыка»: Предположим, что «Событие» имеет идентификатор первичного ключа, а также «Музыка», но нет колонке в «Музыка» или «Событие», ссылаясь друг на друга. Вместо этого, чтобы установить связь между ними, вы создали бы третью таблицу Event_Music с колонками «event_id» и «music_id». Рассмотрим следующий пример:

Table Event 

id | name 
1 | Event A 
2 | Event B 
3 | Event C 


Table Music 

id | style 
1 | oldies 
2 | reggae 
3 | pop 
4 | house 


Table Event_Music 

event_id | music_id 
    1  |  1 
    1  |  3 
    3  |  4 

Это говорит о том, что там будет событие А с хитами и поп-музыки, и там будет событие C только с музыкой дома.

+0

Отлично, это было легко понять, однако, когда я возвращаю таблицы - будет ли несколько строк для каждого события из-за этого? – pufAmuf

+0

Да, если событие имеет более одного музыкального стиля, в Event_Music есть несколько строк. Предположим, что ваш пользователь проверял 1 и 3, для случая, в котором есть «старики» и «поп». Затем, чтобы получить соответствующие события, вы должны запросить записи в Event_Music, которые имеют один и тот же event_id, и есть и запись с этим event_id, которая имеет music_id = 1 и one с music_id = 3. – emboss

+0

Хммм, это не кажется идеальным, поскольку мне хотелось бы вернуть только одну строку - как насчет столбца для каждого стиля музыки? – pufAmuf

1

Вы должны смотреть на многие: многие структуры баз данных. Проведите некоторое исследование, настройте несколько таблиц и сделайте снимок. Это одна из основных форм баз данных.

1

Поместите музыкальный тип в отдельную таблицу и создайте столбец и внешний ключ, который указывает на события в таблицу типа музыки. Затем вы храните PK музыкальной таблицы в таблице Events.

2

Я думаю, что вы ищете типа столбца MySQL SET

+0

Если вы собираетесь использовать downvote, пожалуйста, оставьте комментарий – Halcyon

+0

+1 в качестве альтернативы, если вы не хотите следовать традиционному, много-ко многим подходам реляционных баз данных. –

+0

Я никого не спускал:/ – pufAmuf

2

Если я вас правильно понимаю, нет, вы не можете иметь несколько значений в одном поле (по крайней мере, в здравом смысле).

Вы сделали бы это в отдельной таблице, чтобы назвать ее чем-то вроде [events_genres], и она будет иметь foreign key в вашем первичном ключе таблицы [События] и другой внешний ключ в первичном ключе таблицы [жанров].

Например:

[events_genres] 
events_id genre_id 
1   1 
1   2 
1   3 
2   3 

events_id является идентификатор события в таблице [События] и genre_id является идентификатор жанра (Старых, Регги, PHP ...) в [жанров] Таблица.

+0

Технически вы должны иметь таблицу Bridge/join (например, 'events_to_genres') в этой настройке. Таблица 'genres' должна содержать только базовые записи жанра. –

+0

@ Джейсон Маккрири Да, я думаю, что вы купили меня, когда я редактировал свой пост :) Я думаю, теперь это яснее. – AlexV

+0

Разве это решение не возвращает больше одной строки для каждого события? – pufAmuf

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