несколько строк или один столбец [производительность sql] - PullRequest
0 голосов
/ 01 августа 2010

Я борюсь с этой простой идеей. Посмотрите на reddit, когда вы регистрируете новую учетную запись ... вы автоматически подписываетесь на некоторые каналы по умолчанию.

Я хочу сделать то же самое с моим сайтом.

Я знаю, что мог бы сделать простой и глупый user_chan с id, user_id, chan_id

, если chan , это так:

ID | NAME
1  | videos
2  | pictures

user_chan было бы так (я пользователь 1)

ID | USER_ID | CHAN_ID
1  | 1       | 1
2  | 1       | 2

Я пытаюсь быть очень ясным здесь: D

Полагаю, так работает reddit. Но каждый раз, когда пользователь регистрируется, он должен вставить дюжину строк. И я думаю, у них есть тонны пользователей !!

Так что решение внутри user таблицы вроде этого более умное?:

ID | USER_NICKNAME | CHANS
1  | me            | 1,2

Ответы [ 2 ]

3 голосов
/ 01 августа 2010

Не используйте один столбец для хранения нескольких значений.Это денормализация, которая позже вызовет боль.Например, когда вам нужно запросить, у какого пользователя есть канал 3, вам нужно будет использовать LIKE, который будет работать плохо.Когда вам нужно удалить только один канал из нескольких, которые есть у пользователя, это становится еще сложнее.

В большинстве баз данных вы можете вставить несколько строк одним оператором INSERT.Точный синтаксис зависит от платформы;в SQL Server вы можете сделать это:

insert into user_chan
(USER_ID, CHANID)
select 7634, 3
union all
select 7634, 27
union all
select 7634, 9
0 голосов
/ 04 августа 2010

Или используйте столбец XML для хранения нескольких значений, как вы предлагали. Он может иметь индекс XML и может запрашиваться / обновляться и т. Д., Как и реляционная таблица (хотя и более сложный синтаксис).

...