我想知道如何在mysql中建模以下关系。以下ERD显示了我的设计
订单包含strictly one
商品和产品has many
订单
这是我到目前为止所做的,并不确定如何强制执行约束
-- 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
);
答案 0 :(得分:0)
根据评论,您需要以下内容。然后,创建一个外键约束,强制Order.productSerial的值必须是Product中的有效serial_NO。 (见http://dev.mysql.com/doc/refman/5.6/en/create-table-foreign-keys.html)。您可以SELECT * FROM Order where productSerial = (whatever)
查找产品的所有订单,或者在Order.productSerial和Product.serial_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
);
答案 1 :(得分:0)
请参阅,因为它是一对多的关系,外键足以满足您的要求。在多对多关系的情况下,需要使用附加表来执行关系。
所以这会起作用:
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 ,
);
使用Join或Subquery获取相关数据。
对于Ex:
产品:
Serial_No制造
1001戴尔
1002 HP
奥得:
orderid Serial_no
101 1001
102 1002
103 1001