Значительное замедление из-за 40 логических столбцов? - PullRequest
2 голосов
/ 01 сентября 2011

Я пытаюсь добавить столбцы музыкального стиля в таблицу событий, и из того, что я собрал, это можно сделать, добавив столбец для каждого музыкального стиля или выполнив отношение таблицы «многие ко многим», которое я используюне хочу, потому что я хочу, чтобы каждое событие возвращалось в таблицу только один раз.Думаете ли вы, что при наличии такого количества логических столбцов подряд я столкнусь со значительным замедлением работы базы данных?(Данные будут читать только пользователи).Спасибо:)

Ответы [ 3 ]

3 голосов
/ 01 сентября 2011

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

Вы должны спроектировать схему базы данных так, чтобы онадостаточно гибок, чтобы учесть изменения во времени содержания вашего приложения.Например, у вас может быть основная таблица с одной строкой для каждого музыкального стиля, определяющая его идентификатор и его имя, описание и т. Д. Затем, таблица отношений, которая содержит отношения между сущностью (событие, если я правильно понял ваш вопрос) имузыкальный стиль от мастера стола.Вы обеспечиваете согласованность, устанавливая внешние ключи, чтобы гарантировать, что данные всегда чисты (например, вы не можете ссылаться на музыкальный стиль, которого нет в основной таблице).Таким образом, вы можете изменять музыкальные стили, не затрагивая ничего в структуре базы данных.

Чтение немного о нормализация базы данных вам очень поможет;Вам не нужно идти полностью, чтобы иметь полностью нормализованную базу данных, но понимание принципов, лежащих в основе, позволит вам проектировать эффективные и чистые структуры базы данных.

1 голос
/ 01 сентября 2011

На выполнение запросов, не относящихся к музыкальным стилям, это не повлияет.

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

Однако все остальные запросы, связанные с музыкальными стилями, будут значительно медленнее, а также сложнее писать.Например, «получить все строки, которые имеют хотя бы один стиль с текущей строкой», было бы гораздо сложнее написать и execute.

1 голос
/ 01 сентября 2011

Вероятный ответ: нет

Наличие нескольких логических столбцов в строке не должно значительно замедлять производительность БД; при условии, что ваши индексы настроены соответствующим образом.

РЕДАКТИРОВАТЬ: При этом, возможно, было бы оптимальным назначить таблицу подробностей и JOIN для нее, чтобы получить эти данные ... но вы сказали, что не хотите этого делать.

Я предполагаю, что вы хотите сделать что-то вроде строки события с кучей столбцов, таких как "isCountry", "isMetal", "isPunk", и вы будете запрашивать все события, отмеченные как

isPunk = 1 OR isMetal = 1

или что-то в этом роде.

Слабость этого дизайна в том, что для добавления / удаления музыкальных стилей вам нужно изменить схему БД.
Альтернативой является TBLMusicalStyles с ID и Name, тогда TBLEventStyles, который будет содержать EventID и StyleID

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

...