繁体   English   中英

如何在ER图中关联这些表?

[英]How to relate these tables in an ER Diagram?

我知道这是一个常见问题,我非常生锈,不记得如何正确地对此图建模。

https://i.imgur.com/BTOzRRp.png

每个Order包含多个[LineItem]和多个[Designs]

但是,我想将每个[LineItem]每个与订单中的1个或多个可用[Designs]相关联。

如何才能做到这一点?

显然,我不能简单地在[LineItem][Designs]之间建立关系,对吗?

我想到了如下移动关系: https : //i.imgur.com/TqQCyqj.png

但是,然后我面临[Designs]不再与[Order]关联的问题。

您的图不是ER图。 要称为ER图,图解符号必须能够表示ER概念​​,例如实体集(表表示实体关系),三元和更高阶关系,关系上的属性以及关系上的关系。 您所拥有的是代表物理模型的表格图。

这是一个ER图(概念模型),显示了LineItemsDesigns之间的多对多关系。 为简单起见,我忽略了非关键属性。

设计和LineItems ER图

我也将其转换为物理模型。 但是,如果像第二个示例中那样实现LineItem_Designs ,则存在不一致的风险。 DBMS无法确保只有相同顺序的LineItemsDesigns相互关联。 为了解决这个问题,我们可以使用受控冗余。

设计和LineItems表图

通过向LineItems_Designs表添加OrderID ,我们可以使用重叠的复合FK约束来确保一致性。 (DesignID, OrderID)LineItems_Designs将引用在相同的两个场Designs ,和(LineID, OrderID)LineItems_Designs将引用相同的两个字段LineItems

这是一个简化的SQL脚本来说明:

CREATE TABLE Customers (
  CustomerID INT NOT NULL,
  Customer_Name VARCHAR(255) NULL,
  Company_Name VARCHAR(255) NULL,
  Phone_Number VARCHAR(255) NULL,
  Email VARCHAR(255) NULL,
  PRIMARY KEY (CustomerID)
);

CREATE TABLE Orders (
  OrderID INT NOT NULL,
  CustomerID INT NOT NULL,
  Order_Title VARCHAR(255) NULL,
  Order_Date DATE NULL,
  Due_Date DATE NULL,
  PRIMARY KEY (OrderID),
  FOREIGN KEY (CustomerID) REFERENCES Customers (CustomerID)
);

CREATE TABLE Designs (
  DesignID INT NOT NULL,
  OrderID INT NOT NULL,
  Design_Type VARCHAR(255) NULL,
  Design_Location VARCHAR(255) NULL,
  Design_Colors VARCHAR(255) NULL,
  PRIMARY KEY (DesignID),
  UNIQUE KEY Design_Order (DesignID, OrderID),
  FOREIGN KEY (OrderID) REFERENCES Orders (OrderID)
);

CREATE TABLE LineItems (
  LineID INT NOT NULL,
  OrderID INT NOT NULL,
  Product_Description VARCHAR(255) NULL,
  Product_Color VARCHAR(255) NULL,
  PRIMARY KEY (LineID),
  UNIQUE KEY LineItem_Order (LineID, OrderID),
  FOREIGN KEY (OrderID) REFERENCES Orders (OrderID)
);

CREATE TABLE LineItems_Designs (
  DesignID INT NOT NULL,
  LineID INT NOT NULL,
  OrderID INT NOT NULL,
  FOREIGN KEY (DesignID, OrderID) REFERENCES Designs (DesignID, OrderID)
  FOREIGN KEY (LineID, OrderID) REFERENCES LineItems (LineID, OrderID)
);

请注意DesignsLineItems的复合唯一键以支持FK约束。

最后,请注意您的术语/概念。 尽管使用erdrelational-database标记了您的问题,但您的语言使我想起了网络数据模型。 在ER模型中,关系不映射到外键约束。 用Chen的方法,关系关系映射到他们自己的表。 如果允许将多对多的二元关系关系规范化为多面实体集的实体关系,则可以说该关系映射到表中的列集。 例如, LineItemOrder之间的关系由对(LineID PK, OrderID) (无论是否在其自己的表中)。 外键约束仅仅是完整性约束,并不与表相关(请注意,SELECT查询不受其删除的影响)。 在关系模型中,表表示关系,而不是相关的元素。 相关的元素是值和域,分别代表实体和实体集。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM