1

我在 MySQL 中使用子类型/超类型时遇到了一些麻烦。我使用 C# .NET 为我的本地俱乐部制作管理系统,但在制作漂亮的数据库时遇到了一些麻烦。

我的数据库如下所示:

超类型:

========
Product
---------
Prod_id (PK)
Name
Barcode

和子类型:

=======
Card
--------
Prod_id (FK)
Price

我有 3 个子类型,卡片、武器、弹药,它们基本上是相同的(尽管我在其中存储了不同的东西)

也许我把事情复杂化了,但我想做的是,当我创建一张新卡时,会自动生成一个产品(我为此使用触发器),并且 Cards.Prod_id 被设置为新生成的产品.

我该怎么做呢?这是使用子类型的正确方法,还是我做错了什么?

4

1 回答 1

2

您可以使用触发器。但是,还有另一种,我认为更好的方法:

  • 更改产品表 - 将AUTO_INCREMENT属性添加到主键。
  • 插入新产品,MySQL会生成新ID
  • 使用last_insert_id MySQL函数获取最后插入的ID ,并在子表中插入新记录

MySQL 示例:

CREATE TABLE Product(
Prod_id INT PRIMARY KEY AUTO_INCREMENT,
Name VARCHAR(40),
Barcode INT
);

CREATE TABLE Card(
Prod_id INT,
Price DECIMAL(8, 2),
FOREIGN KEY (Prod_id) REFERENCES Product(Prod_id)
);

INSERT INTO Product VALUES (NULL, 'phone', 1000);
INSERT INTO Card VALUES(LAST_INSERT_ID(), 10.5);

首先插入墙添加具有自动生成 ID 的新产品。第二,将获得这个新 ID 并将其用于新的卡记录。

使用 AUTO_INCREMENT

于 2012-12-08T20:11:10.457 回答