私は顧客テーブルとトランザクションテーブルの2つのテーブルを持っています。トランザクションテーブルには、顧客テーブルの2つのフィールドを参照する2つの外部キーがあります。MySQLエラー[1215] [HY000] - 外部キーを追加できません
私は、顧客テーブルを追加しましたが、私はトランザクションテーブルを追加しようとすると、それは私を与える:
SQLエラー[1215]は、[HY000]続いて、外部キー制約に
を追加することはできませんされています私のテーブル。
CREATE TABLE customerDetails(
CustomerID varchar(10)NOT NULL,
AccountNumber varchar(15) NOT NULL,
CustomerName varchar(60)NOT NULL,
Address varchar(60),
phone varchar(15),
email varchar(50),
joinedDate date,
primary key(CustomerID)
)
CREATE TABLE transactions(
TraceNumber varchar(30) NOT NULL,
AccountNumber varchar(15)NOT NULL,
CustomerName varchar(60)NOT NULL,
TransactionType varchar(15) NOT NULL,
TransactionDateTime datetime NOT NULL,
TransactionAmount double DEFAULT NULL,
PRIMARY KEY (TraceNumber),
FOREIGN KEY(CustomerName) REFERENCES customerDetails(CustomerName),
FOREIGN KEY(AccountNumber) REFERENCES customerDetails(AccountNumber)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
customerDetails(CustomerName)は、pkまたは一意である必要があります。 – jarlh
顧客名をトランザクションに保存することは、悪い考え(と冗長)のように見えます。名前が揺らぐことはほとんどありませんし、名前が変更された場合はどうなりますか。 –
@ P.Salmon多くの場合、トランザクション時の顧客の詳細を保持することが法的要件です。これを達成する1つの方法は、それらをトランザクションテーブルにも保存することです。それは素晴らしくはありませんが、しばしば役に立ちます。 – Shadow