18

あるベンダーから別のベンダーに製品を出荷するための日数とコストを追跡することになっているテーブルがあります。私たちは (見事に :p) 配送ベンダー (FedEx、UPS) と製品取り扱いベンダー (Think... Dunder Mifflin) の両方を「VENDOR」テーブルに保存しました。したがって、SHIPPING_DETAILS テーブルには、すべて VENDOR.no を参照する 3 つの列があります。何らかの理由で、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 NAME /SHIPPING_GRID.frm' を作成できません (errno: 150)

phpinfo() を実行すると、mysql について次のことがわかります。

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

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

4

3 に答える 3

13

主キーを 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 タイプである必要があります。

于 2008-08-08T20:18:25.553 に答える
1

VENDOR テーブルの定義を教えてください

私はそれを考え出した。VENDORテーブルはMyISAMでした...(回答を編集して、両方をINNODBにするように指示しました;))

( VENDOR タイプを INNODB に切り替えない理由はありますか?)

于 2008-08-08T20:44:23.597 に答える
0

ここでコードを実行したところ、 idフィールドを主キーとして 2 回設定しているというエラー メッセージが表示されました (その通りです!) 。

于 2008-08-08T20:18:58.173 に答える