【问题标题】:Mongo to MySQL - Correct Relationship DesignMongodb to MySQL - 正确的关系设计
【发布时间】:2021-09-23 12:40:47
【问题描述】:

我有一个看起来像这样的 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 似乎是最简单的,同时保持准确性)

图片:Same image as code snipped below

<!--[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 吗?
先感谢您!我在执行此操作时使用的资源是:

【问题讨论】:

  • 我会使用 Mysqlsh 中的 JSON 导入实用程序来加载 bson 数据,然后使用生成的列来提取所需的 JSON key.values

标签: c# mysql sql .net mongodb


【解决方案1】:

以防万一有人偶然发现这个问题并想知道发生了什么,我想通了,并找到了一种像魅力一样起作用的方法。

事实证明,我在初始模型文件中混淆了一些 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; }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 2011-04-18
    • 2019-12-30
    • 2023-03-04
    • 1970-01-01
    • 2012-05-04
    • 1970-01-01
    相关资源
    最近更新 更多