0

我有一个表名 Service(product, loca, from_agent, to_agent)。

产品参考 产品(pno)

from_agent 引用 Customer(cno) U Driver(drno) U Airline(Ano)

to_agent 引用 Customer(cno) U Driver(drno) U Airline(ano)

cno = 客户编号,这是另一个表名称“客户”,其中包含其他详细信息,例如姓名、地址等

drno = Driver Number,这是另一个表名称“Driver”,其中包含其他详细信息,例如姓名、地址等

ano = Airline Number,这是另一个表名称“Airline”,其中包含其他详细信息,例如 depport、depttime、arrtime 等。

想编写一个触发器,强制在进行任何更改之前检查产品表中的外键。假设局部映射透明

请帮忙,我只是在学习触发器和分发数据库

4

1 回答 1

0

让我们想象一个商店的数据库:商品、产品、品牌(例如:“带条纹的黄色标致自行车”,引用为“标致自行车”的一个项目,作为“标致”的品牌。

CREATE TABLE IF NOT EXISTS `brands` (
`brandId` int(11) NOT NULL AUTO_INCREMENT,
`brandName` varchar(30) NOT NULL,
 PRIMARY KEY (`brandId`)
 ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;

CREATE TABLE IF NOT EXISTS `items` (
  `itemId` int(11) NOT NULL AUTO_INCREMENT,
 `generalProductId` int(11) NOT NULL,

    PRIMARY KEY (`itemId`)
   ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

   CREATE TABLE IF NOT EXISTS `products` (
   `productId` int(11) NOT NULL AUTO_INCREMENT,
   `productName` varchar(200) NOT NULL,
   `productBrand` int(11) NOT NULL,

   PRIMARY KEY (`productId`)
  ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ;

 ALTER TABLE products ADD FOREIGN KEY(productBrand) REFERENCES brands(brandId) ON DELETE RESTRICT ON UPDATE     CASCADE;
 ALTER TABLE items ADD FOREIGN KEY(itemBrand) REFERENCES product(productBrand) ON DELETE RESTRICT ON UPDATE CASCADE;

所以在这里,你有一个外键约束,它使 Items 继承 Product 中指定的品牌,它从 Brands 继承自身。在这种情况下,如果您将 Name 修改为特殊的 BrandId,子表将知道该名称。ON DELETE RESTRICT 意味着您不能中断链,并且数据库将不允许您删除在其他地方引用的条目:)

于 2013-10-26T11:57:06.680 回答