SQL с JSON, динамический тип нескольких продуктов с несколькими динамическими атрибутами с несколькими значениями коллекции - PullRequest
0 голосов
/ 12 апреля 2019

Я ищу лучшие практики для создания ERD (SQL Server) в 2019 году для следующего примера.

У меня есть несколько продуктов (car, как renault, opel) - около 100 000 записей.У каждого продукта есть серия, например (clio, laguna), у каждой серии есть модель автомобиля, например (I, II, III)

enter image description here

enter image description here

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

Diagram Car model attribute and values

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

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

Итак, мой вопрос: каковы лучшие практики для создания схемы БД?(Я использую SQL Server 2017 и ASPNET.CORE для внутреннего API)

Ниже я покажу свои решения:

  1. Первый шаблон EAV.(Для ясности я не разделял типы значений (varchar, bool, int и т. Д.) На отдельные таблицы): я не сторонник этого решения

enter image description here

Создать таблицу для каждой модели серии.

enter image description here

Но что дальше?В основном атрибуты имеют коллекцию значений.Стоит ли использовать в этом случае для каждого атрибута значения json?Например, {"length": ["4848", "5000", "5005"]}.Несмотря на паттерн EAV и базовый уровень 1NF, я думаю о том, чтобы создать для каждого атрибута отдельную таблицу со значениями и создать связь с моделями автомобилей (I, II, III), но количество таблиц будет огромным.

Разреженная таблица в виде столбца JSON для сбора значений

enter image description here

enter image description here

Создание столбца JsonObject в таблице SeriesModel со следующей структурой json:

{
 "III" :
    {
    "length": ["4848", "5000", "5005"],
    "UpholsteryColor" : ["black", "bronze"],
    "Color" : ["blue", "black", "green"]
    }
}

enter image description here

Создать только две таблицы Car и BrandSeries, в BrandSeries я добавил столбец JsonObject со следующей структурой json


 {
"III" :
  {
"length": ["4848", "5000", "5005"],
"UpholsteryColor" : ["black", "bronze"],
"Color" : ["blue", "black", "green"]
},
"II" :
  {
"length": ["4000", "5000"],
"UpholsteryColor" : ["black", "bronze"],
"Color" : ["blue", "violet"],
"GasCar" : 1
}
}

1 Ответ

0 голосов
/ 14 апреля 2019

Я выбрал вариант № 4, но любые предложения будут оценены.

...