Mysql 具有自动触发器的SQL继承

Mysql 具有自动触发器的SQL继承,mysql,sql,database,inheritance,triggers,Mysql,Sql,Database,Inheritance,Triggers,所以我的问题是,我不知道怎么做 我有一个表Product,它包含productid和各种其他属性。 我还有表衣服,它有属性大小,还有属性颜色。 服装不具有属性颜色,accesoire不具有属性尺寸,两者都从表产品继承 现在我想这样做,当我插入产品,类型为衣服,触发器将自动在衣服中插入一个条目。 但是,如果插入产品,则无法将属性大小传递到数据库,因为产品表没有此属性 因此,我的问题基本上是,如何在超类型中使用触发器插入子类型,其中子类型还需要填充其特定属性 谢谢你的阅读 您是对的,Product表

所以我的问题是,我不知道怎么做

我有一个表
Product
,它包含
productid
和各种其他属性。 我还有表
衣服
,它有属性
大小
,还有属性
颜色
服装
不具有属性
颜色
accesoire
不具有属性
尺寸
,两者都从表
产品
继承

现在我想这样做,当我插入
产品
,类型为
衣服
,触发器将自动在
衣服
中插入一个条目。 但是,如果插入
产品
,则无法将属性
大小
传递到数据库,因为
产品
表没有此属性

因此,我的问题基本上是,如何在超类型中使用触发器插入子类型,其中子类型还需要填充其特定属性


谢谢你的阅读

您是对的,
Product
表中的触发器将无法使用额外的子类型数据,除非您向Product添加额外的列(即,更改继承模型以使用表/层次结构,而不是表/类方法)

但是,我认为触发器并不是将数据主要插入子类表
Clothing
Accesoire
的正确方法

我建议您通过存储过程将数据插入封装到三个表中,例如:

CREATE PROCEDURE InsertProduct(IN name VARCHAR(20), IN type CHAR(1), 
                               IN size INT, IN color VARCHAR(20))
BEGIN
  DECLARE newID INT;
  INSERT INTO Product(Name, Type) VALUES(Name, Type);
  SET newID = LAST_INSERT_ID();
  IF (type = 'C') THEN
    INSERT INTO Clothing(ProductID, Size) VALUES(newID, size);
  ELSE
     INSERT INTO Accesoire(ProductID, Color) VALUES(newID, color);
  END IF;
END;

此处

在触发器内部,大多数RDBMS通常为插入/新版本和传出/旧版本的数据提供伪行-您可以使用这些行中的适用键连接回数据库中的其他表,并检索触发器插入所需的数据。如果你可以更具体一些,我们也可以:)-例如,哪个Sql RDBMS(MySql、Oracle、SqlServer等)?非常感谢stuart!这确实帮助我理解了存储过程和触发器!