Я ищу лучшие практики для создания ERD (SQL Server) в 2019 году для следующего примера.
У меня есть несколько продуктов (car, как renault, opel) - около 100 000 записей.У каждого продукта есть серия, например (clio, laguna), у каждой серии есть модель автомобиля, например (I, II, III)
Каждая модель автомобиля имеет множество атрибутов с несколькими значениями (в основном, коллекционные значения), например
AsВы можете видеть на диаграмме, что некоторые атрибуты имеют одно значение, некоторые имеют значения коллекций.Некоторые атрибуты имеют одинаковые названия в разных моделях автомобилей, некоторые являются новыми.Значения в атрибутах часто повторяются, но они также характерны для модели
В моей реальной модели атрибуты и значения будут меняться несколько раз в месяц для каждого продукта.
Итак, мой вопрос: каковы лучшие практики для создания схемы БД?(Я использую SQL Server 2017 и ASPNET.CORE для внутреннего API)
Ниже я покажу свои решения:
- Первый шаблон EAV.(Для ясности я не разделял типы значений (varchar, bool, int и т. Д.) На отдельные таблицы): я не сторонник этого решения
Создать таблицу для каждой модели серии.
Но что дальше?В основном атрибуты имеют коллекцию значений.Стоит ли использовать в этом случае для каждого атрибута значения json?Например, {"length": ["4848", "5000", "5005"]}.Несмотря на паттерн EAV и базовый уровень 1NF, я думаю о том, чтобы создать для каждого атрибута отдельную таблицу со значениями и создать связь с моделями автомобилей (I, II, III), но количество таблиц будет огромным.
Разреженная таблица в виде столбца JSON для сбора значений
Создание столбца JsonObject в таблице SeriesModel со следующей структурой json:
{
"III" :
{
"length": ["4848", "5000", "5005"],
"UpholsteryColor" : ["black", "bronze"],
"Color" : ["blue", "black", "green"]
}
}
Создать только две таблицы 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
}
}