سؤال

لدي جدول من المفترض أن يتتبع أيام وتكاليف شحن المنتج من بائع إلى آخر.لقد قمنا (ببراعة:p) بتخزين كل من بائعي الشحن (FedEx وUPS) مع بائعي معالجة المنتجات (فكر...Dunder Mifflin) في جدول "VENDOR".لذا، لدي ثلاثة أعمدة في جدول SHIPPING_DETAILS تشير جميعها إلى VENDOR.no.لسبب ما، لا يسمح لي MySQL بتعريف الثلاثة كمفاتيح خارجية.أيه أفكار؟

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;

تم التعديل لإزالة تعريف المفتاح الأساسي المزدوج...


نعم، لسوء الحظ أن هذا لم يحل المشكلة بالرغم من ذلك.الآن أحصل على:

لا يمكن إنشاء جدول "./تمت إزالة اسم قاعدة البيانات الخاصة بي/shopping_grid.frm '(errno:150)

إن القيام بـ phpinfo() يخبرني بذلك لـ mysql:

إصدار واجهة برمجة تطبيقات العميل 5.0.45

نعم، VENDOR.no هو من النوع int(6).

هل كانت مفيدة؟

المحلول

لقد حددت المفتاح الأساسي مرتين.يحاول:

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;

يجب أن يكون المفتاح الأساسي للمورد INT(6)، ويجب أن يكون كلا الجدولين من النوع InnoDB.

نصائح أخرى

لقد قمت بتشغيل الكود هنا، وأظهرت رسالة الخطأ (وهذا صحيح!) أنك تقوم بالإعداد بطاقة تعريف الحقل مرتين كمفتاح أساسي.

هل يمكنك تقديم تعريف جدول البائعين

اكتشفتها.جدول VENDOR كان MyISAM...(قم بتحرير إجابتك لتخبرني أن أجعلهما INNODB ؛))

(لأي سبب لا فقط لتبديل نوع VENDOR إلى INNODB؟)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top