2017-02-22 24 views
0

из дизайнерских баз данных точки зрения, что из перечисленного будет считаться наилучшей практикой ?:Проектирования баз данных - удвоиться данные в столбцах

Если вам нужно сохранить категорию и подкатегорию для записи данных (как целые числа), параметры можно увидеть:

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

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

c) Храните категорию и подкатегорию отдельно, но объедините их в поле Подкатегория (т. Категория = 1, Подкатегория = 1.2) (Данные категории будут удвоены, и существует вероятность того, что Подкатегория будет несовместимой с категорией)

Или существует другой подход, который считается лучшей практикой?

ответ

3

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

Один вопрос, который нам нужно задать, является ли «категория» функционально зависимой от «подкатегории».

То есть: «подкатегория» «принадлежит» к одной «категории» или является «подкатегорией», обобщенной, поскольку она применяется к нескольким категориям?

В последнем случае сохранение «категории» и «подкатегории» в виде двух отдельных столбцов является нормативным шаблоном.

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

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


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

+0

«чтобы убедиться, что« категория », хранящаяся в« записи », соответствует категории, связанной с« подкатегорией ». - Определить записи FK' (категория, подкатегория) 'referencing' subcategeries (категория, подкатегории) 'и пусть РСУБД проверяет согласованность. То же самое следует использовать и для таблицы «многие-ко-многим». –

+0

Я думаю, что в обобщенном подходе это точка ответа. Я думаю, что единственным дополнительным рассмотрением было бы, если категории и подкатегории имеют своего рода Ragged Hierarchy, и в этом случае моделирование этого сценария выглядит иначе. –

+0

@BradD: Да, отличная точка. Анализ данных и моделирование отношений сущностей являются ключами к конструкции реляционной базы данных. Из довольно общего вопроса, который был задан, мы действительно не знаем, что представляют собой «запись данных», «категория» и «подкатегория». Это просто ярлыки. И мы проявляем осторожность, чтобы не обременять эти ярлыки предполагаемыми семантическими правилами, как раз из предложений возможных представлений. Более тщательный анализ заставит нас найти реальные требования, и на основе этого мы можем принимать решения о представлении. – spencer7593

2

Первый вариант - лучшая практика. Проведите некоторое исследование по поводу того, что называется «нормализация». Мне нравится this guy. Для того чтобы БД была в первой нормальной форме, данные должны быть атомарными.

2

Вы уже определили плюсы и минусы a-c.

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

Иметь таблицу categories и таблицу sub-categories. Затем введите таблицу cat_subcat, которая объединяет их, но только действительные комбинации. cat_subcat имеет свои собственные идентификаторы. Они используются как единственная ссылка, когда вы ссылаетесь на них.

Я лично предпочитаю специальную подкатегорию none за любое использование нулевой или другой специальной обработки.

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