带有JSON的SQL,具有多个集合值的动态多个属性的动态多个产品类型

时间:2019-04-11 22:25:54

标签: json sql-server database-normalization

我正在寻找在2019年创建ERD(SQL Server)的最佳实践,作为以下示例。

我有多种产品(雷诺,欧宝等汽车)-约有10万条记录。 每个产品都有一个系列,例如(克里奥,拉古纳),每个系列都有一个汽车模型,例如(I,II,III)

enter image description here

enter image description here

每种汽车模型都有很多具有多个值(主要是集合值)的属性,例如

Diagram Car model attribute and values

正如您在图表上看到的那样,某些属性具有一个值,而某些具有集合值。有些属性在不同的汽车型号中具有相同的名称,有些则是新属性。 属性中的值通常会重复,但它们也特定于模型

在我的真实模型中,每个产品的属性和值每月都会更改几次。

所以我的问题是:创建数据库架构的最佳实践是什么? (我将SQL Server 2017和ASPNET.CORE用于后端API)

下面我向您展示我的解决方案:

  1. 第一个EAV模式。 (为清楚起见,我没有将值类型(varchar,bool,int等)分成单独的表):我不是此解决方案的支持者

enter image description here

  1. 为每个系列模型创建表。

enter image description here

但是接下来呢?通常,属性具有集合值。在这种情况下,是否应该为每个属性json值使用?例如{“ length”:[“ 4848”,“ 5000”,“ 5005”]}。 尽管有EAV模式,并且保持基本标准化1NF,但我想为每个属性创建带有值的单独表格并创建与汽车模型(I,II,III)的关系,但是表格的数量将是巨大的。

  1. 将表稀疏为用于值收集的JSON列

enter image description here

enter image description here

  1. 在SeriesModel表中使用以下json结构创建JsonObject列:

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

enter image description here

  1. 仅创建两个表Car和BrandSeries,在BrandSeries中,我添加了具有以下json结构的JsonObject列

    
     {
    "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 :(得分:0)

我选择了第4个选项,但任何建议都将不胜感激。