2010-07-13 4 views
0

Вот ситуация:Должен ли я нормализовать нормализацию?

[Работа] принадлежит одному [Раздел], который [Раздел] принадлежит к одному [Промышленность]

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

Но у меня есть два подхода, чтобы сделать это, я думаю, что лучше. Во-первых, записывает все материалы, включая категорию вакансий, промышленность в одном месте (таблица Job).

Другим подходом является Job по-прежнему ссылаться на Job Category, но Job Category имеют поле для хранения информации о отрасли.

Какой подход вы считаете лучшим? Спасибо.

ответ

2

Ваш второй подход хорош. Проблема, которую вы описываете, получение отрасли для данной работы, на самом деле не проблема. Смотрите следующую структуру:

Table jobs 
ID PK 
REF_CATEGORY FK 

Table jobcategories 
ID PK 
REF_INDUSTRY FK 

Table industries 
ID PK 

Теперь, чтобы получить отрасли для данной работы:

SELECT j.ID, i.ID 
FROM jobs j 
JOIN jobcategories c ON j.REF_CATEGORY = c.ID 
JOIN industries i ON c.REF_INDUSTRY = i.ID 

Есть веские причины, чтобы иногда Денормализовать, но в этом случае вы не должны. Если вы помещаете JOB, JOBCATEGORY и INDUSTRY в один стол, вы рискуете иметь рабочую категорию, принадлежащую нескольким отраслям, что нарушает ваше отношение 1-n.

+0

Итак, вы имеете в виду, что отменить нормализацию не нужно? – Tattat

+0

Нормализация таблиц базы данных и их правильное использование сложны, но писать хакерские скрипты для обхода денормализованных данных является болезненным. –

+0

@Tattat вам не нужно делать это здесь, и вам следует избегать этого, если это вообще возможно, это вызовет другие проблемы позже. –

1

Но такого рода ссылочные отношения всегда существуют. Если вы используете таблицу «Промышленность» и таблицу категорий работ только для деталей задания, вы можете думать о де-нормализации. Но если эти таблицы также связаны с некоторыми другими данными/таблицами, схема нормализации должна быть пересмотрена. Де-нормализация не должна выполняться изолированно. И я не чувствую, что у вас очень высокие накладные расходы для подключения трех таблиц на РСУБД.

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