Нормализовать или не нормализовать? (10 полей)

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

У меня есть 10 полей - это никогда не будет изменяться - который всегда будет заполнен и использоваться в каждом запросе, который мог подходить. Всегда.

Таким образом, я предложил 2 решения, нормализованные и не нормализованный

db

Я должен был бы запросить первое решение как это;

    select n.Id
         , Type1Selector1.Info as Type1Selector1Info
         , Type1Selector2.Info as Type1Selector2Info
         , Type1Selector3.Info as Type1Selector3Info
         , Type1Selector4.Info as Type1Selector4Info
         , Type1Selector5.Info as Type1Selector5Info
         , Type2Selector1.Info as Type2Selector1Info
         , Type2Selector2.Info as Type2Selector2Info
         , Type2Selector3.Info as Type2Selector3Info
         , Type2Selector4.Info as Type2Selector4Info
         , Type2Selector5.Info as Type2Selector5Info

    from dbo.OptionOneMainTable n
         inner join dbo.OptionOneSecondTable Type1Selector1 on
                    Type1Selector1.Id = n.Id
                and Type1Selector1.Type = 1
                and Type1Selector1.Selector = 1
         inner join dbo.OptionOneSecondTable Type1Selector2 on
                    Type1Selector2.Id = n.Id
                and Type1Selector2.Type = 1
                and Type1Selector2.Selector = 2
         inner join dbo.OptionOneSecondTable Type1Selector3 on
                    Type1Selector3.Id = n.Id
                and Type1Selector3.Type = 1
                and Type1Selector3.Selector = 3
         inner join dbo.OptionOneSecondTable Type1Selector4 on
                    Type1Selector4.Id = n.Id
                and Type1Selector4.Type = 1
                and Type1Selector4.Selector = 4
         inner join dbo.OptionOneSecondTable Type1Selector5 on
                    Type1Selector5.Id = n.Id
                and Type1Selector5.Type = 1
                and Type1Selector5.Selector = 5
         inner join dbo.OptionOneSecondTable Type2Selector1 on
                    Type2Selector1.Id = n.Id
                and Type2Selector1.Type = 2
                and Type2Selector1.Selector = 1
         inner join dbo.OptionOneSecondTable Type2Selector2 on
                    Type2Selector2.Id = n.Id
                and Type2Selector2.Type = 2
                and Type2Selector2.Selector = 2
         inner join dbo.OptionOneSecondTable Type2Selector3 on
                    Type2Selector3.Id = n.Id
                and Type2Selector3.Type = 2
                and Type2Selector3.Selector = 3
         inner join dbo.OptionOneSecondTable Type2Selector4 on
                    Type2Selector4.Id = n.Id
                and Type2Selector4.Type = 2
                and Type2Selector4.Selector = 4
         inner join dbo.OptionOneSecondTable Type2Selector5 on
                    Type2Selector5.Id = n.Id
                and Type2Selector5.Type = 2
                and Type2Selector5.Selector = 5

и очевидно второе решение было бы

    select Id
         , Type1Selector1Info
         , Type1Selector2Info
         , Type1Selector3Info
         , Type1Selector4Info
         , Type1Selector5Info
         , Type2Selector1Info
         , Type2Selector2Info
         , Type2Selector3Info
         , Type2Selector4Info
         , Type2Selector5Info

    from dbo.OptionTwoMainTable

Я не являюсь одним выполнение этой базы данных, и я лично взял бы второе решение.

Я должен попытаться убедить другого человека идти для решения два? Он хочет пойти для решения один.

2
03.02.2020, 00:33
1 ответ

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

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

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

Опция 2 является соответствующей, где поля независимы от идентификатора (Первичный ключ). Из Вашего описания, дело обстоит не так.

Даже при моделировании двух типов как отдельных таблиц в модели дизайна одна из реализаций подтипов должна включить их в основную таблицу с помощью nullable столбцов.

1
22.02.2020, 23:17

Теги

Похожие вопросы