想在MySQL中保持两个表之间的关系

时间:2014-11-09 05:13:36

标签: mysql database

我有两个表,PRODUCT和DISCOUNT,它们有很多关系。维持此关系的表是PRODUCTHASDISCOUNT。如果删除了PRODUCT,我想从PRODUCTHASDISCOUNT中删除记录,但如果由于某种原因删除DISCOUNT则不会。在这种情况下,应在删除DISCOUNT ID之前为产品分配不同的折扣。所以我在外键上尝试了一个ON DELETE RESTRICT但是没有用。我正在使用InnoDB,所以我不能使用SET DEFAULT。有什么建议吗?

CREATE TABLE PRODUCT (
id INT UNSIGNED NOT NULL auto_increment PRIMARY KEY,
prodName VARCHAR(50) NOT NULL UNIQUE,
price DECIMAL(6,2),
availability BOOLEAN,
description VARCHAR(150) NOT NULL,
size VARCHAR(20),
weight VARCHAR(10),
catID INT UNSIGNED DEFAULT '1'
)ENGINE=InnoDB;

CREATE TABLE DISCOUNT (
id INT UNSIGNED NOT NULL auto_increment PRIMARY KEY,
percentOff DECIMAL(4,4) NOT NULL DEFAULT "0.0"
)ENGINE=InnoDB;

CREATE TABLE PRODUCTHASDISCOUNT (
prodID INT UNSIGNED NOT NULL,
percentID INT UNSIGNED NOT NULL,
startDate TIMESTAMP NOT NULL DEFAULT NOW(),
endDate TIMESTAMP,
PRIMARY KEY (prodID, percentID),
FOREIGN KEY (prodID) REFERENCES PRODUCT(id) ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (percentID) REFERENCES PERCENT(id) ON DELETE RESTRICT ON UPDATE CASCADE
)ENGINE=InnoDB; 

1 个答案:

答案 0 :(得分:0)

使用DISCOUNT(id)代替PERCENT(id)

`CREATE TABLE PRODUCTHASDISCOUNT (
prodID INT UNSIGNED NOT NULL,
percentID INT UNSIGNED NOT NULL,
startDate TIMESTAMP NOT NULL DEFAULT NOW(),
endDate TIMESTAMP,
PRIMARY KEY (prodID, percentID),
FOREIGN KEY (prodID) REFERENCES PRODUCT(id) ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (percentID) REFERENCES DISCOUNT(id) ON DELETE RESTRICT ON UPDATE CASCADE
)ENGINE=InnoDB;`