2

異なるテーブルの 2 つの主キーを参照している owner_id を持つテーブル アドレスを使用してデータベースを作成しましたが、「子行を更新できません: 外部 ke 制約に失敗しました」というエラー エラーが発生します
これは私のテーブルの構造です

CREATE TABLE Address
(
OwnerID VARCHAR(5) NOT NULL,
Line1 VARCHAR(40),
City VARCHAR(40),
Postcode VARCHAR(4),
AddressType INT,
PRIMARY KEY (OwnerID,  AddressType),
FOREIGN KEY (AddressType) REFERENCES AddressType(AddressType),
FOREIGN KEY (OwnerID) REFERENCES Supplier(SupplierID),
FOREIGN KEY (OwnerID) REFERENCES Customer(CustomerID)
);

誰でも解決できますか?または少なくとも代替案を教えてください。

4

1 に答える 1

0

あなたのデータ構造はあまり意味がありません。住所がある場合、どのようにして所有者が誰であるかを知ることができますか? サプライヤーですか、それとも顧客ですか?これを修正する 1 つの方法は次のとおりです。

OwnerOrCustomer char(1) not null,  /* has values O or C */
OwnerId int,
CustomerId int,

つまり、値を別々のフィールドに保存します。

この問題を解決するより洗練された方法は、「エンティティ」または「組織」などと呼ばれる新しい概念を持つことです。これにより、サプライヤーと顧客の両方に ID が提供されます (そして、誰が知っているかは、パートナーと見込み客と競合他社も同様です)。idサプライヤーにとって、顧客は実際には であり、EntityIdそれらの間で区別されます。

そのようなデータ構造はかなりまれであることを付け加えておきます。ほとんどの企業では、顧客データベースは仕入先データベースからかなり分離されており、統合された単一のアドレス テーブルはありません。特にサプライヤが企業であり、顧客が個人である傾向がある場合は、これを別の選択肢と考えることができます。組織の住所には、個人の住所とは異なる特徴があります。

于 2013-05-26T13:41:41.383 に答える