2008-08-08 19 views
13

私は、あるベンダーから別のベンダーに製品を出荷する日数とコストを追跡するはずのテーブルを持っています。私たち(華麗に:p)は、出荷ベンダー(FedEx、UPS)と製品取扱いベンダー(Think ... Dunder Mifflin)を両方とも「ベンダー」テーブルに保管していました。したがって、私はSHIPPING_DETAILSテーブルに3つの列を持ち、すべてVENDOR.noを参照しています。何らかの理由で、MySQLは3つすべてを外部キーとして定義することはできません。何か案は?二重の主キー定義を削除するように編集 複数の外部キー?

CREATE TABLE SHIPPING_GRID( 
    id INT NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT 'Unique ID for each row', 
    shipping_vendor_no INT(6) NOT NULL COMMENT 'Foreign key to VENDOR.no for the shipping vendor (vendors_type must be 3)', 
    start_vendor_no INT(6) NOT NULL COMMENT 'Foreign key to VENDOR.no for the vendor being shipped from', 
    end_vendor_no INT(6) NOT NULL COMMENT 'Foreign key to the VENDOR.no for the vendor being shipped to', 
    shipment_duration INT(1) DEFAULT 1 COMMENT 'Duration in whole days shipment will take', 
    price FLOAT(5,5) NOT NULL COMMENT 'Price in US dollars per shipment lbs (down to 5 decimal places)', 
    is_flat_rate TINYINT(1) DEFAULT 0 COMMENT '1 if is flat rate regardless of weight, 0 if price is by lbs', 
    INDEX (shipping_vendor_no), 
    INDEX (start_vendor_no), 
    INDEX (end_vendor_no), 
    FOREIGN KEY (shipping_vendor_no) REFERENCES VENDOR (no), 
    FOREIGN KEY (start_vendor_no) REFERENCES VENDOR (no), 
    FOREIGN KEY (end_vendor_no) REFERENCES VENDOR (no) 
) TYPE = INNODB; 

...


うん、残念ながらしかしそれを修正しませんでした。今私は取得しています:

はテーブル を作成できません './ REMOVED MY DB名を /SHIPPING_GRID.frm' (エラー番号:150)のphpinfoを行う

()伝えますmysqlの私、この:

クライアントAPIバージョン5.0.45

はい、VENDOR.noはint型(6)です。

+0

、エラー; VENDORテーブルがMyISAMのだった...(それらの両方INNODBを作るために私に教えてあなたの答えを編集しました)? 150は[foreign key constraints](http://dev.mysql.com/doc/refman/5.0/en/innodb-foreign-key-constraints.html)エラーを指します。 VENDORテーブルの定義を提供できますか? VENDORのPKはINT(6)か単にINTですか?上記のページから: - 整数型のサイズと符号は同じでなければなりません。 –

答えて

8

プライマリキーを2回定義しました。試してください:

CREATE TABLE SHIPPING_GRID( 
    id INT NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT 'Unique ID for each row', 
    shipping_vendor_no INT(6) NOT NULL COMMENT 'Foreign key to VENDOR.no for the shipping vendor (vendors_type must be 3)', 
    start_vendor_no INT(6) NOT NULL COMMENT 'Foreign key to VENDOR.no for the vendor being shipped from', 
    end_vendor_no INT(6) NOT NULL COMMENT 'Foreign key to the VENDOR.no for the vendor being shipped to', 
    shipment_duration INT(1) DEFAULT 1 COMMENT 'Duration in whole days shipment will take', 
    price FLOAT(5,5) NOT NULL COMMENT 'Price in US dollars per shipment lbs (down to 5 decimal places)', 
    is_flat_rate TINYINT(1) DEFAULT 0 COMMENT '1 if is flat rate regardless of weight, 0 if price is by lbs', 
    INDEX (shipping_vendor_no), 
    INDEX (start_vendor_no), 
    INDEX (end_vendor_no), 
    FOREIGN KEY (shipping_vendor_no) REFERENCES VENDOR (no), 
    FOREIGN KEY (start_vendor_no) REFERENCES VENDOR (no), 
    FOREIGN KEY (end_vendor_no) REFERENCES VENDOR (no) 
) TYPE = INNODB; 

VENDORの主キーはINT(6)でなければならず、どちらのテーブルもInnoDBタイプでなければなりません。

0

ここでコードを実行しましたが、エラーメッセージにidフィールドを主キーとして2回設定していることが示されました。

0

あなたは、私はそれを考え出した VENDOR表の定義

を提供することができます。ちょうどベンダーがINNODBにオーバー型スイッチに

(何らかの理由ない))実際

関連する問題