Вопрос о разработке таблицы SQL - PullRequest
4 голосов
/ 30 января 2011

Пожалуйста, проигнорируйте этот вопрос, если он звучит глупо для вас.

У меня есть таблица SQL (SQL Server) для фотоальбомов, в ней более 20 столбцов, и она будет содержать миллионы альбомов.

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

Как мне их оформить?

вариант 1: Я могу создать другую таблицу просто для хранения идентификаторов продвигаемых и показанных альбомов, подобных этому, и затем присоединиться к основной таблице альбомов, чтобы получить набор нужных мне столбцов.

таблица обозначенных_альбомов:

album_id  promoted_featured
    1         1
    5         0
    7         1
    15        0

Запрос для продвинутых вернет 1, 7 Запрос для избранных вернет 5, 15

Опция 2: Я могу добавить 1 хранилище столбцов 1, если будет повышени 0, если указано.В противном случае это будет пустым, я могу запросить, чтобы проверить 1 в этом столбце для продвигаемых альбомов и 0 для избранных.

Опция 3: Я могу добавить 2-битные столбцы: один для повышенных (0/ 1) и один для избранных (0/1)

Какой способ будет работать лучше?

РЕДАКТИРОВАТЬ: проект должен быть эффективным и в SQL 2008.Прямо сейчас у меня есть SQL 2005.

Ответы [ 4 ]

3 голосов
/ 30 января 2011

Вы упоминаете об ожидающей миграции на SQL 2008. В этом выпуске были добавлены отфильтрованные индексы.Многое из «использования другой таблицы» связано с быстрым доступом к данным.Используя отфильтрованный индекс, вы можете получить лучшее из обоих миров (то есть хранить различные статусы со своими данными, все еще имея возможность запрашивать небольшую таблицу).Возможно, стоит изучить, когда вы сможете использовать SQL 2008 в качестве платформы

3 голосов
/ 30 января 2011

Если рекламируемые и / или рекомендуемые альбомы представляют собой небольшое подмножество «всех» альбомов, их следует поместить в отдельную таблицу.

Если рекламируемые и / или избранные альбомы являются значительнымипропорционально общему набору, тогда производительность будет лучше, если вы добавите столбцы в существующую таблицу.

Я собираюсь предположить первый случай;у вас есть «миллионы» альбомов, и я уверен, что вы не рекламируете или не представляете более нескольких тысяч, и определенно не десятков тысяч.Поиск в этой намного меньшей таблице будет очень быстрым, и соединение также будет быстрым при условии, что главная таблица сгруппирована по первичному ключу.

2 голосов
/ 30 января 2011

Создать другую таблицу. Небольшая таблица быстро запрашивает. Присоединиться к ПК с вашим основным столом также будет быстро. Кроме того, небольшую таблицу легко изменить, если (не знаете ли, знаете ли), что требования меняются.

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

0 голосов
/ 30 января 2011

Я бы создал основную таблицу с именем Status, которая будет иметь следующие столбцы.

Status_tb

status_id status_name
0         None
1         Feautured
2         Promoted
3         Both

Примечание: оба означают как продвигаемые, так и избранные.

Теперь в таблицу транзакций альбома я добавлю столбец с именем status_id.Это будет иметь ссылку fk на главную таблицу.

Это чисто и эффективно.(Сильно перекошенные столбцы и, следовательно, помогает в гистограммах и разделах)

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