ใครรู้สัญลักษณ์ทาง database นี้ว่ามีความต่างกันอย่างไรครับ ?
on to many
Date :
2009-11-29 10:23:22
By :
maccit
เอ่อ ขอบคุณสำหรับคำตอบครับ... แต่ผมว่าผมเขียนไว้ข้างบนชัดเจนแล้วนะครับว่าผมถามถึงตรงจุดไหน?
อะวาดรูปให้ดูอีกซักรูปก็ได้ครับ จะได้ไม่ต้องบอกว่า 1:M อีก และก็ไม่ต้องบอกว่า 1:1 อีกนะครับ...
ทีนี้คือคำถามนะครับ คือ อยากรู้ว่าถ้ารูปทั้งสองเหมือนกันทุกอย่าง จะต่างกันก็แค่เส้นประ กับเส้นทึบ... อยากจะรู้ว่า
มันมีความหมายต่างกันอย่างไรหร่อครับ?
ปล. อยากได้ลักษณะเขียนตามความเข้าใจจริงๆนะครับไม่ใช่ แนบลิงค์มาให้ไปอ่านอีกทีหน่ะครับ คือว่าได้ลองไปหาอ่านมาเยอะและ... ขอบคุณครับ
Date :
2009-11-30 16:21:56
By :
rugrinho
เอ่อ ขอตอบว่างี้ครับ คือจริงๆจาก link ของ คุณ Sek คห.2 ก็อธิบายกระจ่างมากเลยครับ
เส้นทึบ := ความสัมพันธ์ (relationship) แบบ 1:1 หรือ 1:M โดยมี key index เป็นตัวเชื่อม
เช่น
Account (AccountID(pk), AccountNum, AccountTypeID)
PersonAccount (AccountID(pk), PersonID, Balance)
Person(PersonID(pk), Name)
Relationship 1 := Acount A, PersonAccount B on A.AccountID = B.AccountID
Relationship 2 := PersonAccount A, Person B on A.PersonID = B.PersonID
เส้นประ := ความสัมพันธ์ (relationship) แบบ 1:1 หรือ 1:M โดยจาก column ที่ไม่ใช่ key index เชื่อมกับ key index ของอีก table ครับ
เช่น
Example...
Account( AccountID(pk), AccountNum, AccountTypeID )
AccountType( AccountTypeID(pk), Code, Name, Description )
Releationship := Account A, AccountType B on A.AccountTypeID = B.AccountTypeID
ถ้าเป็นผัง db ของทาง Microsoft แบบนี้เค้าน่าจะเรียกว่าแบบ Foreign Key อ่ะครับ
Date :
2009-12-05 23:53:40
By :
salapao_codeman
อ่าครับ อันนั้นเข้าใจ ขอบคุณสำหรับคำอธิบายเพิ่มเติมครับ...
แต่ทีนี้ถ้าเกิดว่าเช่นโจทย์เค้ามี สองตารางมาให้(ในนั้นก็มีชื่อฟิลด์ต่างๆนาๆไปอ่ะนะครับไม่ใช่เป็นตารางเปล่าๆ)
แล้วเราจะรู้ได้อย่างไรครับ ว่าเราควรจะเลือกใช้งานอย่างไรครับ? เช่นถ้าโจทย์เค้าคือมีรูปมาให้ดังภาพด้านบน
แล้วเค้าให้เราเลือก ระหว่างเส้นประ หรือเส้นทึบ.... ผมจะรู้ได้ไงคับว่าใช้เส้นแบบไหนจึงจะถูกครับ?
ขอบคุณครับ
Date :
2009-12-06 12:07:59
By :
rugrinho
ขึ้นอยู่กับภาพใหญ่ของระบบ ไม่ใช่หรือครับ table ใน database หนึ่งๆ ออกแบบมาเพื่อระบบอะไรซักอย่างอยู่แล้ว ดังนั้นแต่ละ table ก็จะมีความสามารถ หรือความหมายที่แน่นอนอยู่ของแต่ละ table นี่ครับ ใช่หรือเปล่า?? ทีนี้จากคำถามว่าจากรูปข้างบน จะต้องใช้เส้นประหรือทึบ ขอตอบว่า ไม่ตายตัวครับ ใช้ได้ทั้งคู่ ขึ้นอยู่กับระบบนั้น และอีกอย่างไม่มีกฏตายตัวนี่ว่า table หนึ่งๆ จะมีเส้นเชื่อมความสัมพันธ์แค่เส้นเดียว ทั้งนี้ก็ขึ้นอยู่กับระบบที่เราออกแบบ, ความหมายของ table ที่เราออกแบบครับ
** สรุปคือ คำตอบของผมคือไม่มีรูปแบบตายตัว ขึ้นอยู่กับรายละเอียดอื่นๆประกอบครับ
กรณีตัวอย่างจากใน link ของคุณ Sek ครับ
Example...
Account (AccountID, AccountNum, AccountTypeID)
PersonAccount (AccountID, PersonID, Balance)
Person(PersonID, Name)
จากรายการข้างบนนี้เขียนเป็นรูปได้ อย่างนี้ใช่ป่ะครับ
คือ ถ้าเป็นการถาม/ตอบ ในข้อสอบ final ก็ต้องดูคำถามให้ละเอียดอ่ะครับ
แต่ถ้าจะออกแบบ table เพื่อระบบใดๆ ซักระบบ ก็ต้องคิดให้รอบคอบอ่ะครับ มองภาพรวมให้ออก table แต่ละ table เป็นแค่องค์ประกอบของภาพใหญ่ เท่านั้น index ก็ต้องเลือกใช้ให้เหมาะสม กับ query ที่เราจะใช้ใน app ของเราเพื่อให้เกิดประโยชน์สูงสุด ก็ไม่แน่ใจว่าไขข้อข้องใจของคุณ lovepong ได้หรือเปล่านะครับ
Date :
2009-12-06 21:48:40
By :
salapao_codeman
โอ้วครับ... ขอบคุณคุณ Codeman ช่วยให้ชัดเจนขึ้นถึงตรงจุดดีครับ ...เพราะว่าในความเป็นจริงในใจผมก็คิดอย่างนั้นเช่นกัน ว่ามันจะเลือกใช้เส้นอะไรก็แล้วแต่เรา เพียงแต่เราจะเลือกใช้ในแบบไหนมากกว่า พอดีตอนนี้ผมก็ได้ออกแบบโปรแกรมระบบการจัดซื้อขึ้นมาอยู่หน่ะนะครับ ก็เลยทำให้เกิดคำถามตั้งแต่ที่เริ่มตั้งกระทู้มา... ยังไงขอบคุณมากๆครับ
สำหรับผู้ที่สนใจหรือ ต้องการจะเริ่มเรียนรู้หรือต้องการจะเข้าใจในเรื่องนี้จริงๆ ผมมีหนังสือมาฝากครับ
ชื่อหนังสือว่า database-Wiley, Beginning Database Design 2006.pdf ถ้าใครสนใจก็ก็ลองไปเสริ์ซหากันได้ครับ ผมว่าเค้าเขียนไว้ดีอ่านง่ายครับ และที่สำคัญ ทุกอย่างเคลียร์ สำหรับ สัญลักษณ์ต่างๆ... concept หรือ แม้กระทั่งเรื่อง identify or non-identify นะครับ....
ขอบคุณทุกคำตอบหลายๆครับ
Date :
2009-12-07 14:33:11
By :
rugrinho
test
Date :
2010-09-01 17:33:06
By :
test
พูดเป็น Index อาจจะดูแล้วงงครัีบ เพราะตัว workbench นั้น โดยปกติแล้ว หากมีการใช้ field ใดเป็น FK มันก็จะสร้าง Index ของ Field นั้นขึ้นมาด้วย เลยอาจจะสงสัยว่า ก็เชื่อมจาก index ไป index แล้ว ทำไมยังเป็นเส้นประ
ประเด็นนี้ดูง่าย ๆ ครับ ให้สังเกตที่ field ที่เชื่อมโยงของทั้ง 2 table คือถ้าเป็น PK ทั้งคู่ ก็จะได้เส้นทึบ แต่ในกรณีที่ข้างใดข้างหนึ่งไม่ใช่ PK มันก็จะได้เป็นเส้นประครับ
วิธีทดสอบง่าย ๆ ครับ ลองสร้างเส้นทึบขึ้นมาโยงจาก PK ไป PK หลังจากนั้นเปลี่ยนจากเส้นทึบเป็นเส้นประ (non-identifying relation) ตัว wb มันก็จะเอา PK ออกไปเลยครับ
หรือวิธีทดสอบอีกอย่างนึงคือ สร้าง Relation ไว้ให้กับ Table ก่อน แล้วลอง Reverse Engineer ดู ก็จะเห็นเส้นประและเส้นทึบตามที่บอกไปข้างบนครับ
แต่มันใช้ประโยชน์เพื่ออะไรนั้น ตอนนี้ยังคิดไม่ออกเลย
Date :
2010-09-01 17:38:05
By :
มือใหม่หัด mySQL
Identifying ถ้ามีการลบข้อมูลจาก table หลัก table ลูกที่เชื่อมด้วยเส้นทึบ จะถูกลบออกด้วย
non-identifying ก็ตรงกันข้าม ถ้ามีการลบข้อมูลจาก table หลัก table ลูกที่เชื่อมอยู่ก็จะไม่ถูกลบ
ตัวอย่างเช่น
สมมติให้มี table users และ table comments โดยที่ มีความสัมพันธ์แบบ 1:m คือ 1 user มีได้หลาย comments
- ดังนั้นถ้าหาก เราเชื่อมความสัมพันธ์แบบ Identifying แล้วทำการลบ user ใน table users ทิ้งไป comments ที่เป็นของ user คนนั้นจะถูกลบออกไปด้วย
- แต่ถ้าหาก เชื่อมความสัมพันธ์แบบ non-identifying ต่อให้เราลบ user ออกจาก table users ข้อมูลที่อยู่ใน table comments ก็ยังคงอยู่ครบ ไม่ถูกลบออกไปด้วย แม้ว่า user เจ้าของ comment นั้นจะถูกลบออกจากฐานข้อมูลแล้วก็ตาม
อธิบายแบบ บ้านๆ ก็คง ประมาณนี้มั้งครับ....
Date :
2013-11-07 09:57:46
By :
กรรมกรไซเบอร์
Load balance : Server 03