|
|
|
สอบถามเรื่อง foreign key ผมสร้าง 2 ตารางครับ ใน appseav โครงสร้างตาราง ` |
|
|
|
|
|
|
|
ผมสร้าง 2 ตารางครับ ใน appseav
Code
-- โครงสร้างตาราง `gm_checkform`
--
CREATE TABLE `gm_checkform` (
`PETITION_ID` char(7) collate utf8_unicode_ci NOT NULL,
`CHECKFORM_NUM` int(11) NOT NULL,
`CHECKFORM_DATE` date NOT NULL,
`CHECKFORM_LOAD` int(11) NOT NULL,
`CHECKFORM_METER` varchar(10) collate utf8_unicode_ci NOT NULL,
`CHECKFORM_VOLT` int(11) NOT NULL,
`CHECKFORM_PHASE` int(11) NOT NULL,
`CHECKFORM_SEAY` int(11) NOT NULL,
`CHECKFORM_211` char(1) collate utf8_unicode_ci NOT NULL,
`CHECKFORM_212` char(1) collate utf8_unicode_ci NOT NULL,
`CHECKFORM_213` char(1) collate utf8_unicode_ci NOT NULL,
`CHECKFORM_221` char(1) collate utf8_unicode_ci NOT NULL,
`CHECKFORM_222` char(1) collate utf8_unicode_ci NOT NULL,
`CHECKFORM_223` char(1) collate utf8_unicode_ci NOT NULL,
`CHECKFORM_224` char(1) collate utf8_unicode_ci NOT NULL,
`CHECKFORM_241` char(1) collate utf8_unicode_ci NOT NULL,
`CHECKFORM_242` char(1) collate utf8_unicode_ci NOT NULL,
`CHECKFORM_243` char(1) collate utf8_unicode_ci NOT NULL,
`CHECKFORM_244` char(1) collate utf8_unicode_ci NOT NULL,
`CHECKFORM_245` char(1) collate utf8_unicode_ci NOT NULL,
`CHECKFORM_25` char(1) collate utf8_unicode_ci NOT NULL,
`CHECKFORM_STATUS` char(1) collate utf8_unicode_ci NOT NULL,
`EMPLOYEE_WRITE` varchar(100) collate utf8_unicode_ci NOT NULL,
PRIMARY KEY (`PETITION_ID`,`CHECKFORM_NUM`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
Code
-- โครงสร้างตาราง `gm_airwalk`
--
CREATE TABLE `gm_airwalk` (
`PETITION_ID` char(7) collate utf8_unicode_ci NOT NULL,
`CHECKFORM_NUM` int(11) NOT NULL,
`AIRWALK_CHECK1` char(1) collate utf8_unicode_ci NOT NULL,
`AIRWALK_CHECK2` char(1) collate utf8_unicode_ci NOT NULL,
`AIRWALK_CHECK3` char(1) collate utf8_unicode_ci NOT NULL,
PRIMARY KEY (`PETITION_ID`,`CHECKFORM_NUM`),
KEY `CHECKFORM_NUM` (`CHECKFORM_NUM`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
ในตาราง gm_airwalk ผมสร้าง foreign key PETITION_ID ได้ แต่ CHECKFORM_NUM สร้างไม่ได้
มันขึ้น Error creating foreign key (check data types) : CHECKFORM_NUM ครับ
ผมสร้างฟิว CHECKFORM_NUM ทั้งชื่อ ทั้งชนิดเหมือนกัน แต่มันก็ยัง error
ช่วยอธิบายด้วยครับ ว่าเป็นเพราะอะไร แล้วแก้ยังไงครับ ขอบคุณมากครับ
Tag : - - - -
|
|
|
|
|
|
Date :
2010-06-01 18:53:05 |
By :
exdo |
View :
2939 |
Reply :
14 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
มันก้อถูกนะคับ แหะๆ แต่ผิดหลักการสร้าง database ครับ 2 table ไม่ควรมี primary key เหมือนกัน
|
|
|
|
|
Date :
2010-06-01 20:32:35 |
By :
kerb |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
พอดี key มันเป็นแบบ strong ครับ มันต้องเอา key อีกตารางมาเป็น key หลัก อะครับ ถ้า key เดียวได้ แต่ 2 key นี้ error เลย ผม นอมัลไล อะครับ ห้ามมีข้อมูลที่ไม่จำเป็นอะครับ
|
|
|
|
|
Date :
2010-06-01 21:14:12 |
By :
exdo |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ผมลองเปลี่ยน PRIMARY KEY แล้ว ก็ยังขึ้น error เหมือนเดิมครับ ช่วยด้วยครับทำไงดี
|
|
|
|
|
Date :
2010-06-01 21:29:01 |
By :
exdo |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ผมขอดู ER ของ 2 Table นี้หน่อยได้มั้ยคับ
|
|
|
|
|
Date :
2010-06-02 01:04:17 |
By :
kerb |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
แปบนะครับ
|
|
|
|
|
Date :
2010-06-02 01:12:58 |
By :
exdo |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
แต่ผม copy ของคุณไปสร้างง่ะ สร้างได้นะ
|
|
|
|
|
Date :
2010-06-02 01:38:28 |
By :
kerb |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ตรงกลางคือตาราง checkform ครับ แล้วจะมีให้เลือกว่าจะเดินสายแบบไหน เดินลอยอากาศ แล้วก็เดินใต้ดินครับ ถ้าเลือกเดินใต้ดินก็ให้ไปเก็บในตารางเดินใต้ดิน ถ้าเลือกเดินลอยอากาศ ก็ให้ไปเก็บในตารางเดินลอยอากาศ และที่ต้องแยก 2 ตารางเพราะ ฟิวส์ การเก็บค่าย่อยของแต่ละอันไม่เหมือนกันครับผม เดินใต้ดินก็เก็บข้อมูล 1 ฟิว แต่เดินลอยอากาศต้องเก็บข้อมูล 3 ครับ แล้วที่ใช้ PRIMARY KEY เหมือนกันเพราะ ตาราง เดินลอยอากาศ แล้วก็เดินใต้ดิน เป็นข้อมูลย่อยของตาราง checkform ครับ
|
|
|
|
|
Date :
2010-06-02 01:42:11 |
By :
exdo |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
สร้างตารางได้ครับ แต่มันไม่สามารถสร้าง foreign key ในฟิว checkform_num ได้ครับ สร้างได้แต่ฟิว PETITION_ID ครับ
|
|
|
|
|
Date :
2010-06-02 01:45:24 |
By :
exdo |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ถ้างั้นถูกแล้วคับ ผมชินกับการ ใช้ id เป็น PK เพราะเวลาคิวรี่มันจะไวกว่า เลยงงๆ 555 ขอโทษทีคับ
นี่ผม export จาก phpmyadmin ผม ลอง copy ไปลองดูคับ
--
-- โครงสร้างตาราง `gm_airwalk`
--
Code
CREATE TABLE `gm_airwalk` (
`PETITION_ID` char(7) collate utf8_unicode_ci NOT NULL,
`CHECKFORM_NUM` int(11) NOT NULL,
`AIRWALK_CHECK1` char(1) collate utf8_unicode_ci NOT NULL,
`AIRWALK_CHECK2` char(1) collate utf8_unicode_ci NOT NULL,
`AIRWALK_CHECK3` char(1) collate utf8_unicode_ci NOT NULL,
PRIMARY KEY (`PETITION_ID`,`CHECKFORM_NUM`),
KEY `CHECKFORM_NUM` (`CHECKFORM_NUM`)
) DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
--
-- dump ตาราง `gm_airwalk`
--
-- --------------------------------------------------------
--
-- โครงสร้างตาราง `gm_checkform`
--
Code
CREATE TABLE `gm_checkform` (
`PETITION_ID` char(7) collate utf8_unicode_ci NOT NULL,
`CHECKFORM_NUM` int(11) NOT NULL,
`CHECKFORM_DATE` date NOT NULL,
`CHECKFORM_LOAD` int(11) NOT NULL,
`CHECKFORM_METER` varchar(10) collate utf8_unicode_ci NOT NULL,
`CHECKFORM_VOLT` int(11) NOT NULL,
`CHECKFORM_PHASE` int(11) NOT NULL,
`CHECKFORM_SEAY` int(11) NOT NULL,
`CHECKFORM_211` char(1) collate utf8_unicode_ci NOT NULL,
`CHECKFORM_212` char(1) collate utf8_unicode_ci NOT NULL,
`CHECKFORM_213` char(1) collate utf8_unicode_ci NOT NULL,
`CHECKFORM_221` char(1) collate utf8_unicode_ci NOT NULL,
`CHECKFORM_222` char(1) collate utf8_unicode_ci NOT NULL,
`CHECKFORM_223` char(1) collate utf8_unicode_ci NOT NULL,
`CHECKFORM_224` char(1) collate utf8_unicode_ci NOT NULL,
`CHECKFORM_241` char(1) collate utf8_unicode_ci NOT NULL,
`CHECKFORM_242` char(1) collate utf8_unicode_ci NOT NULL,
`CHECKFORM_243` char(1) collate utf8_unicode_ci NOT NULL,
`CHECKFORM_244` char(1) collate utf8_unicode_ci NOT NULL,
`CHECKFORM_245` char(1) collate utf8_unicode_ci NOT NULL,
`CHECKFORM_25` char(1) collate utf8_unicode_ci NOT NULL,
`CHECKFORM_STATUS` char(1) collate utf8_unicode_ci NOT NULL,
`EMPLOYEE_WRITE` varchar(100) collate utf8_unicode_ci NOT NULL,
PRIMARY KEY (`PETITION_ID`,`CHECKFORM_NUM`)
) DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
|
|
|
|
|
Date :
2010-06-02 01:51:06 |
By :
kerb |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ลองดูก่อนครับผม
|
|
|
|
|
Date :
2010-06-02 02:32:40 |
By :
exdo |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
แหะๆ คือตารางผมเป็นแบบ InnoDB ครับ แต่ของท่านเป็น Myisam ครับผม มันสร้าง foreign key ใน รีเลชั่นไม่ได้ครับ
ขอบคุณท่านมากนะครับ ถ้าไม่ได้ไงเดี๋ยวผมถึก code ก็ได้ครับผม แต่ถ้าได้ก็อย่าลืมมาบอกกันมั่งนะครับ
|
|
|
|
|
Date :
2010-06-02 02:39:30 |
By :
exdo |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
คุณสร้างไปก่อนแล้วค่อยกำหนด FK ทีหลังได้มะ
|
|
|
|
|
Date :
2010-06-02 03:23:44 |
By :
kerb |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
อืมมม.. ขอแจมมั่งนะครับ
สมมติว่าอันนี้คือ sql ที่จะสร้าง fk นะครับ
alter table gm_airwalk
add constraint airwalk_fk foreign key (petition_id, checkform_num) references gm_checkform (petition_id, checkform_num) on update cascade
ผมเดาเอานะครับว่า ที่สร้างไม่ได้อาจจะมีข้อมูลอยู่ใน gm_airwalk ไปบ้างแล้ว (ไม่ใช่ table ว่างๆ)
คุณอาจ insert ข้อมูลใน table gm_airwalk ไปเล่นๆก่อนเพื่อ test program ซึ่งข้อมูลที่ insert ไปแล้วนั้น
หาก link มาจาก gm_checkform มันจะไม่มี คือไม่มี parent record
หากต้องการสร้าง fk บน table ใดๆ(gm_airwalk)โดยที่ table นั้นมีข้อมูลอยู่ก่อน และต้องการ reference ไปหา table แม่(gm_checkform) แล้ว ทุก record ใน table ลูก(gm_airwalk) จะต้องเป็น record ที่สามารถ link มาจาก table แม่ได้
อืมม.. ผมเขียนเองอ่านแล้วก็ยังงงๆ ลองดูนะครับ ว่า record ใน gm_airwalk อันไหนที่ไม่สามารถถูก query ออกมาได้ หากมีการ inner join มาจาก gm_checksum
|
|
|
|
|
Date :
2010-06-02 09:09:21 |
By :
pnbps |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ขอบคุณครับผมตอบคุณ pnbps ผมลบข้อมูลออกจากตารางหมดแล้วครับ เพราะไม่งั้นคงสร้าง forien key ในฟิว petition_id ไม่ได้ครับ ถึงตอนนี้ก็ยังไม่ได้ครับ ผมเลย coding แก้เรียบร้อยแล้วครับผม ขอบคุณมากครับ ผมสร้งก่อนแล้วครับแต่ก้ยังไม่ได้ครับผม
|
|
|
|
|
Date :
2010-06-02 22:56:38 |
By :
exdo |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 01
|