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);

最初のINSERTウォールは、自動生成されたIDを持つ新製品を追加します。2つ目は、この新しいIDを取得し、新しいカードレコードに使用します。

AUTO_INCREMENTの使用

于 2012-12-08T20:11:10.457 に答える