在mysql中建模一个或多个关系

在mysql中建模一个或多个关系,mysql,database,Mysql,Database,我想知道如何在mysql中建模以下关系。下面的ERD展示了我的设计 一个订单有一个产品,一个产品有多个订单 这就是我到目前为止所拥有的,但我并不确定如何实施这些约束 -- Order table CREATE TABLE Order ( orderId INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, date DATETIME, serialNumber INT NOT NULL ); -- Address table CREATE TAB

我想知道如何在mysql中建模以下关系。下面的ERD展示了我的设计

一个订单有一个产品,一个产品有多个订单

这就是我到目前为止所拥有的,但我并不确定如何实施这些约束

-- Order table
CREATE TABLE Order (
  orderId INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  date DATETIME,
  serialNumber INT NOT NULL
);

-- Address table
CREATE TABLE Product (
  serial_No INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  manufacturer VARCHAR(30) NOT NULL,
  model VARCHAR(30) NOT NULL,
  ram VARCHAR(30) NOT NULL
);

 -- Join table
 CREATE TABLE Order_Product (
     id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
     orderId INT NOT NULL,
     serial_No INT NOT NULL
 );

根据评论,您需要以下内容。然后,创建一个外键约束,强制Order.productSerial的值必须是Product中的有效序列号。(见附件)。您可以
选择*FROM Order where productSerial=(任意)
查找产品的所有订单,或者在Order.productSerial和product.serial\u No之间进行联接

-- Order table
CREATE TABLE Order (
  orderId INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  productSerial INT(6) NOT NULL,
  date DATETIME,
  serialNumber INT NOT NULL
);

-- Address table
CREATE TABLE Product (
  serial_No INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  manufacturer VARCHAR(30) NOT NULL,
  model VARCHAR(30) NOT NULL,
  ram VARCHAR(30) NOT NULL
);

请看,因为它是一对多关系,所以外键足以满足您的要求。在多对多关系的情况下,需要添加表来执行关系

因此,这将起作用:

CREATE TABLE Order (
  orderId INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  serial_No INT(6) UNSIGNED ,
  date DATETIME,
  serialNumber INT NOT NULL ,
  foreign key(serial_No) references product(serial_No)
);

CREATE TABLE Product (
  serial_No INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  manufacturer VARCHAR(30) NOT NULL,
  model VARCHAR(30) NOT NULL,
  ram VARCHAR(30) NOT NULL ,
);
并使用联接或子查询获取相关数据

例如:

产品:

连续生产

1001戴尔

1002马力

订单:

医嘱ID序列号

101 1001

102 1002


103 1001

看起来,如果没有产品链接,您就无法获得订单。因此,您可能希望在订单表中包含Product列,而不是映射表。请更正。根据您的信息,这是一个一对多的关系,因此添加一个额外的列就足够了。如果是多对多,则需要与您建议的设计中相同的附加映射表。抱歉,无意中删除了我以前的注释,因此您的注释无效:-(你如何处理这种关系?我需要一个映射表吗?…不需要。使产品在订单中成为非空列。对其进行索引以提高搜索效率。然后,每次你想查看产品的订单,只需按产品进行搜索。我不认为你所拥有的描述了FK关系。Th你拥有的序列号可以是任何东西。你是说序列号INT NOT NULL,外键(序列号)引用产品(序列号),我没有包括外键的创建,我留下来让OP决定,因为我不能说他想要删除规则,等等。但是,是的,像你写的东西正是我想要的。