Помощь с нормализацией таблицы - PullRequest
0 голосов
/ 12 сентября 2011

Буду очень признателен за помощь в нормализации и оптимизации этой таблицы 'table1'. В настоящее время я могу выполнить следующий запрос:

SELECT user AS users
FROM table1
WHERE project='Project B'
AND doctype='DocType B'

и получить то, что я хочу, но я чувствую, что это не очень эффективно, и хотел бы помочь (с объяснениями), как улучшить.

В конечном итоге я пытаюсь добиться следующего:
1) Разбейте эту таблицу на несколько таблиц для простоты обслуживания.
2) С учетом 'project' и 'doctype' верните всех пользователей

table1:

project     doctype     user
-------     -------     ----
Project A   DocType A   User A
Project A   DocType A   User B
Project A   DocType A   User C
Project A   DocType A   User D
Project A   DocType B   User A
Project A   DocType B   User C
Project A   DocType B   User D
Project A   DocType C   User B
Project A   DocType C   User D
Project B   DocType A   User B
Project B   DocType A   User E
Project B   DocType A   User F
Project B   DocType A   User G
Project B   DocType B   User A
Project B   DocType B   User C
Project B   DocType B   User E
Project B   DocType B   User H
Project B   DocType C   User A
Project B   DocType C   User I

Пожалуйста, дайте мне знать, если вам нужна дополнительная информация. Спасибо.

Ответы [ 2 ]

5 голосов
/ 12 сентября 2011

Нормализация не сводится к разбивке таблиц для простоты обслуживания.Нормализация не касается улучшения производительности.Речь идет о представлении логических фактов в реляционной форме, чтобы минимизировать избыточность и аномалии данных.Если вы хотите узнать о нормализации правильно, прочитайте SQL и реляционную теорию от CJ Date.

Я бы придерживался одной таблицы, но добавил бы индекс.Некоторые бренды СУБД поддерживают запросы только для индекса , т. Е. Если запрос может извлечь необходимые столбцы в структуре данных индекса, он может полностью пропустить запрос к базовой таблице.Microsoft SQL Server и MySQL являются яркими примерами баз данных, поддерживающих запросы только по индексу.

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

5 голосов
/ 12 сентября 2011

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

Иногда (но не в этом случае) вы могли бысоздать 3 таблицы с парами столбцов: PD, PU и DU (используя начальные буквы столбцов для формирования имен таблиц).Но поскольку пользователь A связан с DocType A в проекте A, а не с DocType A в проекте B, в этом примере это не будет работать.

...