Mongo到MySQL-正确的关系设计



我有一个MongoDB,它看起来像这样:

Batteries
[
{ _id, voltage, capacity, energy, width, length, height, weight },
{..}
]
Machines
[
{ _id, manufacturer, category, model, voltage, capacity, energy, height, length, width, weight},
{..}
]

Mongo需要转换为关系数据库。现在,我想到的SQL是两种设计之一:(为我如何显示我的关系道歉,在保持准确性的同时嵌入这个html似乎是最简单的(

图片:与下方剪切的代码相同

<!--[if IE]><meta http-equiv="X-UA-Compatible" content="IE=5,IE=9" ><![endif]-->
<!DOCTYPE html>
<html>
<head>
<title>machinesDB</title>
<meta charset="utf-8"/>
</head>
<body><div class="mxgraph" style="max-width:100%;border:1px solid transparent;" data-mxgraph="{&quot;highlight&quot;:&quot;#0000ff&quot;,&quot;nav&quot;:true,&quot;resize&quot;:true,&quot;toolbar&quot;:&quot;zoom layers lightbox&quot;,&quot;edit&quot;:&quot;_blank&quot;,&quot;xml&quot;:&quot;&lt;mxfile host=&quot;Electron&quot; modified=&quot;2021-07-14T13:53:08.993Z&quot; agent=&quot;5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/14.6.13 Chrome/89.0.4389.128 Electron/12.0.7 Safari/537.36&quot; etag=&quot;cA6h_UUTGux3id1gnRLh&quot; version=&quot;14.6.13&quot; type=&quot;device&quot;&gt;&lt;diagram id=&quot;k_p20E35Nkjj3HATSdYj&quot; name=&quot;Page-1&quot;&gt;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&lt;/diagram&gt;&lt;/mxfile&gt;&quot;}"></div>
<script type="text/javascript" src="https://viewer.diagrams.net/js/viewer-static.min.js"></script>
</body>
</html>

我是SQL数据库的新手,我知道我可能在这里做错了什么。我倾向于底层设计(让我们称之为Design2(,并将我在.Net C#中的模型类写成:

public class Manufacturer
{
public int ID { get; set; }
public string Name { get; set; }
public string ImgURL { get; set; }
public List<Categories> Categories { get; set; }
}
public class Categories
{
public int ID { get; set; }
public string Name { get; set; }
public int ManufacturerID { get; set; }
public List<Manufacturer> Manufacturer { get; set; }
public Models Model { get; set; }
}
public class Models
{
public int ID { get; set; }
public string Name { get; set; }
public int CategoryID { get; set; }
public int BatteryID { get; set; }
public List<Categories> Categories { get; set; }
public List<Batteries> Batteries { get; set; }
}
public class Batteries
{
public int ID { get; set; }
public float Voltage { get; set; }
public float Capacity { get; set; }
public float Energy { get; set; }
public float Width { get; set; }
public float Length { get; set; }
public float Height { get; set; }
public float Weight { get; set; }
public bool Solar { get; set; }
public Models Model { get; set; }
}

我是否理解如何成功地设计关系,数据库是否为3NF
提前感谢!我在做这件事时使用的资源是:

  • Microsoft文档-关系
  • 学习SQL-关系类型

为了防止有人偶然发现这个问题并想知道发生了什么,我找到了一个像符咒一样有效的方法。

事实证明,在我最初的模型文件中,我混淆了一些1-1和1-many关系。

public class Manufacturers
{
[Key]
public int ManufacturerID { get; set; }
public string Name { get; set; }
public string ImgURL { get; set; }
public List<ManufacturerCategory> ManufacturerCategories { get; set; } = new List<ManufacturerCategory>(); //1-x
}
public class Categories
{
[Key]
public int CategoryID { get; set; }
public string Name { get; set; }
public List<ManufacturerCategory> ManufacturerCategories { get; set; } = new List<ManufacturerCategory>(); //1-x
}
public class ManufacturerCategory
{
[Key]
public int ManufacturerCategoryID { get; set; }
public int ManufacturerID { get; set; }
public int CategoryID { get; set; }
public Manufacturers Manufacturer { get; set; } //1-1
public Categories Category { get; set; } //1-1
}
public class Modelz
{
[Key]
public int ModelID { get; set; }
public string Name { get; set; }
public int ManufacturerCategoryID { get; set; }
public string BatteryID { get; set; }
public Batteries Battery { get; set; }  //1-1
public ManufacturerCategory ManufacturerCategory { get; set; }  //1-1
}
public class Batteries
{
[Key]
public string BatteryID { get; set; }
public int? Voltage { get; set; }
public float? Energy { get; set; }
public int? Capacity { get; set; }        
public float? Width { get; set; }
public float? Length { get; set; }
public float? Height { get; set; }
public float? Weight { get; set; }
public bool? Solar { get; set; }
public string? ImgURL { get; set; }
public string? SpecsURL { get; set; }
}

最新更新