ทำไมฐานข้อมูลและโมเดลเชิงสัมพันธ์
แนะนำใหม่| English | ความหมาย |
|---|---|
| table/ˈteɪbl/ | ตาราง |
| relational database/rɪˈleɪʃənl ˈdeɪtəbeɪs/ | ฐานข้อมูลเชิงสัมพันธ์ |
| flat files/flæt faɪlz/ | ไฟล์แบน |
| data redundancy/ˈdeɪtə rɪˈdʌndənsi/ | ความซ้ำซ้อนของข้อมูล |
| data inconsistency/ˈdeɪtə ˌɪnkənˈsɪstənsi/ | ความไม่สอดคล้องของข้อมูล |
| integrity/ɪnˈteɡrɪti/ | ความสมบูรณ์ของข้อมูล |
| field/fiːld/ | ฟิลด์ |
| entity/ˈentɪti/ | เอนทิตี |
| record/ˈrekɔːd/ | บันทึก |
| tuple/ˈtuːpl/ | ทูเปิล |
| attribute/ˈætrɪbjuːt/ | แอททริบิวต์ |
| primary key/ˈpraɪməri kiː/ | คีย์หลัก |
| composite key/ˈkɒmpəzɪt kiː/ | คีย์รวม |
| candidate key/ˈkændɪdeɪt kiː/ | คีย์ผู้สมัคร |
| secondary key/ˈsekəndəri kiː/ | คีย์รอง |
| indexing/ˈɪndeksɪŋ/ | การจัดดัชนี |
| foreign key/ˈfɒrən kiː/ | คีย์ภายนอก |
| referential integrity/ˌrefəˈrenʃl ɪnˈteɡrɪti/ | ความสมบูรณ์ของการอ้างอิง |
| one-to-many/wʌn tə ˈmeni/ | หนึ่งต่อหลาย |
| many-to-many/ˈmeni tə ˈmeni/ | หลายต่อหลาย |
เอกสารที่ IBM ไม่อยากเห็น
- ในปี 1970 นักวิจัยชื่อ Edgar Codd จาก IBM เผยแพร่เอกสาร 12 หน้า proposing ว่าข้อมูลควรจัดเก็บในตารางง่ายๆ เชื่อมโยงกันด้วยค่าร่วม และขอ using a language that said what you wanted rather than where it was on the disk.
- IBM ขายฐานข้อมูลที่จัดเก็บข้อมูลในรูปแบบต้นไม้เชื่อมโยงกับการจัดไฟล์อยู่แล้ว จึงไม่สนใจเขาเป็นเวลาหลายปี โปรแกรมทุกตัวที่เขียนเพื่อใช้งานกับไฟล์เหล่านี้ต้องถูกเขียนใหม่ทุกครั้งเมื่อการจัดรูปแบบเปลี่ยนไป
- ในช่วง 1980 ธนาคารสายการบิน และหน่วยงานรัฐบาลทุกแห่งกำลังย้ายไปยังตารางของคอดด์ หลังครึ่งศตวรรษผ่านไป พวกเขายังคงใช้งานบนตารางเหล่านั้นอยู่
- บทเรียนนี้คือปัญหาของ วิธีการใช้ไฟล์ (file-based approach), วิธีที่ ฐานข้อมูลเชิงสัมพันธ์ แก้ไขปัญหาเหล่านั้น และคำศัพท์ที่คุณต้องใช้ให้ถูกต้อง
วิธีการใช้ไฟล์ (The file-based approach)
- ก่อนมีฐานข้อมูล Each program kept its own flat files: โปรแกรมขายมีไฟล์ลูกค้า โปรแกรมบัญชีมีอีกไฟล์โปรแกรมจัดส่งมีอีกไฟล์
- แต่ละไฟล์มีโครงสร้างตายตัวที่ code ของโปรแกรมขึ้นอยู่กับ และไม่มีอะไรนอกเหนือจากโปรแกรมนี้รู้ว่าข้างในมีอะไร
- มันทำงานได้ดีสำหรับโปรแกรมขนาดเล็กหนึ่งตัว ปัญหาเริ่มต้นขึ้นเมื่อโปรแกรมที่สองต้องการใช้ข้อมูลเดียวกัน

สามโปรแกรม สามสำเนาของลูกค้า
ข้อจำกัด
- ความซ้ำซ้อนของข้อมูล: ข้อมูลเดียวกัน เช่น ที่อยู่ลูกค้า ถูกเก็บไว้ในหลายไฟล์ สิ้นเปลืองพื้นที่จัดเก็บและความพยายาม
- ความไม่สอดคล้องของข้อมูล: สำเนาถูกอัปเดตแยกต่างหาก sehingga they drift apart and nobody knows which is right.
- การพึ่งพาข้อมูล: โปรแกรมผูกติดกับรูปแบบไฟล์ ดังนั้นการเปลี่ยนแปลงโครงสร้างหมายถึงการเขียนโปรแกรมใหม่ทั้งหมดที่ใช้ไฟล์นั้น
- ความสมบูรณ์ของข้อมูล ควบคุมยาก แชร์ข้อมูลได้อย่างปลอดภัยยาก การค้นหาข้ามไฟล์ช้า และความปลอดภัยไม่สามารถตั้งค่าได้ต่อ field
การจัดเก็บที่อยู่ลูกค้าในไฟล์แยกหลายไฟล์นำไปสู่:
Difficulty 1/5 · 100 coins + a small bonus on first completion today
ข้อมูลเดียวกันที่ถูกจัดเก็บในหลายที่ (ความซ้ำซ้อน) สามารถอัปเดตแยกกันและกลายเป็นความไม่สอดคล้องได้
ในระบบ flat-file ข้อมูลเดียวกันมักถูกทำซ้ำข้ามไฟล์ ซึ่งอาจเกิดความไม่สอดคล้องเมื่ออัปเดตเพียงสำเนาเดียว
Difficulty 1/5 · 100 coins + a small bonus on first completion today
ความซ้ำซ้อนและความไม่สอดคล้องที่เกิดขึ้นนี้คือปัญหาหลักที่โมเดลเชิงสัมพันธ์แก้ได้
ข้อใดคือข้อจำกัดของวิธีพื้นฐานไฟล์? เลือก ทั้งหมด ที่ใช้ได้
Difficulty 2/5 · 140 coins + a small bonus on first completion today
ความซ้ำซ้อน ความไม่สอดคล้อง และความขึ้นอยู่กับข้อมูล เป็นข้อจำกัดทั้งสามที่ระบุไว้ ตารางและการ join เป็นส่วนหนึ่งของแนวทางแบบสัมพันธ์ซึ่งแทนที่สิ่งเหล่านี้
ฐานข้อมูลเชิงสัมพันธ์ตอบคำถามเหล่านี้อย่างไร
- ฐานข้อมูลเชิงสัมพันธ์ เก็บข้อมูลใน ตาราง ที่จัดการโดยซอฟต์แวร์เดียว DBMS ซึ่งทุกโปรแกรมใช้
- ทุกข้อเท็จจริงถูกเก็บ ครั้งเดียว ดังนั้นความซ้ำซ้อนและความไม่สอดคล้องหายไป: ที่อยู่ถูกเปลี่ยนในที่เดียวและทุกโปรแกรมเห็นการเปลี่ยนแปลง
- โปรแกรมขอข้อมูลจาก DBMS bằngชื่อ therefore the storage can change without the programs changing: ความอิสระของข้อมูล (data independence)
- กฎความถูกต้อง (integrity rules) สิทธิ์การเข้าถึง และการสำรองข้อมูลถูกบังคับใช้แบบรวมศูนย์ และตารางใดก็สามารถค้นหาหรือเชื่อมโยงกับตารางอื่นได้

ข้อมูลชุดเดียว ผู้ดูแลประตูเดียว
ฐานข้อมูลแบบความสัมพันธ์กำจัดความไม่สอดคล้องของข้อมูลได้อย่างไร?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
หนึ่งสำเนา อัปเดตหนึ่งครั้ง ไม่มีการเบี่ยงเบน DBMS ให้ข้อมูลปัจจุบันเดียวกันแก่ทุกโปรแกรม
คำศัพท์: ตาราง แถว และคอลัมน์
- ตาราง (relation) คือตารางข้อมูลที่มีแถวและคอลัมน์ มีตารางหนึ่งสำหรับแต่ละประเภทของ เอนทิตี (entity) หรือสิ่งที่เป็นที่เก็บข้อมูล:
CUSTOMER,ORDER,PRODUCT. - บันทึก (record) คือแถวหนึ่ง ซึ่งเป็นตัวอย่างหนึ่งของเอนทิตี; คำศัพท์ทางการคือ ทิวเปิล (tuple).
- ฟิลด์ (field) คือกอลัมน์หนึ่ง เป็นข้อมูลชิ้นหนึ่งเกี่ยวกับแต่ละบันทึก; คำศัพท์ทางการคือ แอททริบิวต์ (attribute).

แถวเป็นบันทึก คอลัมน์เป็นฟิลด์ และคอลัมน์หนึ่งชี้ไปยังตารางอื่น
อ่านตารางเชิงสัมพันธ์ด้วย SELECT
ตารางเชิงสัมพันธ์คือแถว (บันทึก) และคอลัมน์ (ฟิลด์) WHERE กรองแถวที่ตรงกับเงื่อนไข; SELECT จากนั้นเก็บเพียงคอลัมน์ที่คุณขอเท่านั้น
คำศัพท์: คีย์
- คีย์หลัก (primary key) คือฟิลด์หรือกลุ่มฟิลด์ที่ระบุตัวบันทึกได้อย่างไม่ซ้ำซ้อน ไม่สามารถเป็นค่าว่าง (null) และไม่มีการซ้ำซ้อน คีย์ผสม (composite key) คือคีย์หลักที่ประกอบด้วยฟิลด์สองขึ้นไป
- คีย์ทางเลือก (candidate key) คือฟิลด์หรือกลุ่มใด ๆ ที่สามารถใช้เป็นคีย์หลักได้ คีย์รอง (secondary key) คือฟิลด์ที่ไม่ใช่คีย์หลักซึ่งมีการสร้างดัชนีเพื่อการค้นหาที่รวดเร็ว การสร้างดัชนี (indexing) สร้างดัชนีบนฟิลด์เพื่อให้การค้นหาและการเชื่อมโยงเร็วขึ้น
- คีย์ภายนอก (foreign key) คือฟิลด์whose value ตรงกับคีย์หลักของตารางอื่น เพื่อเชื่อมโยงทั้งสองตาราง ในรูปย่อ คีย์หลักจะขีดเส้นใต้และระบุคีย์ภายนอก:
CUSTOMER(CustomerID, Name, Phone)
ORDER(OrderID, CustomerID, OrderDate) -- CustomerID is a foreign key → CUSTOMER
คีย์หลัก (Primary key):
Difficulty 1/5 · 100 coins + a small bonus on first completion today
คีย์หลักระบุตัวตนของแต่ละแถว คีย์ภายนอก (Foreign key) คือคีย์ที่เชื่อมโยงไปยังตารางอื่น
จับคู่ประเภทคีย์แต่ละชนิดกับสิ่งที่มันคือ
Difficulty 2/5 · 140 coins + a small bonus on first completion today
คีย์หลักระบุตัวตนของแถว; คีย์ภายนอกเชื่อมโยงไปยังตารางอื่น; คีย์รวม = ฟิลด์หลายอันรวมกัน; คีย์ทางเลือก = คีย์ที่เป็นไปได้
ฟิลด์whose value matches the primary key of another table is a ______ key.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
คีย์ภายนอกคือสิ่งที่สร้างความสัมพันธ์ระหว่างตารางสองตาราง
ตัวอย่างวิธีทำ: ชื่อกองส่วนต่างๆ ของฐานข้อมูลห้องสมุด
- ห้องสมุดบันทึกหนังสือ สมาชิก และยืมหนังสือแต่ละครั้ง ระบุเอนทิตี คีย์หลักของแต่ละรายการ และคีย์ภายนอก
- เอนทิตี:
BOOK,MEMBER,LOAN. คีย์หลัก:BookID,MemberID,LoanIDซึ่งเลือกเพราะมีความไม่ซ้ำซ้อนสำหรับทุกบันทึกและไม่เคยว่าง; ชื่อเรื่องหรือชื่อจะไม่สามารถใช้ได้ เนื่องจากหนังสือสองเล่มอาจมีชื่อเรื่องเดียวกัน LOAN(LoanID, BookID, MemberID, DateOut, DateDue):BookIDและMemberIDเป็นคีย์ภายนอก แต่ละตัวตรงกับคีย์หลักของตารางของตนเอง เบอร์โทรศัพท์ของสมาชิกควรอยู่ในMEMBERไม่ใช่ในรายการยืมทุกครั้ง
ใน LOAN(LoanID, BookID, MemberID, DateOut), BookID และ MemberID เป็น ____ keys.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
แต่ละตัวตรงกับคีย์หลักของตารางอื่น คือ BOOK และ MEMBER และเชื่อมโยงการกู้ยืมเข้ากับตารางเหล่านั้น
ความสัมพันธ์และความถูกต้องของการอ้างอิง
- ความสัมพันธ์ เชื่อมโยงเอนทิตีสองชนิด หนึ่งต่อหนึ่ง: สมาชิกหนึ่งคนมีบัตรห้องสมุดหนึ่งใบ หนึ่งต่อหลาย: สมาชิกหนึ่งคนมีการยืมหลายครั้ง; การยืมแต่ละครั้งเป็นของสมาชิกหนึ่งคน หลายต่อหลาย: หนังสือหนึ่งเล่มมีผู้เขียนหลายคน และผู้เขียนคนหนึ่งเขียนหนังสือหลายเล่ม
- ความถูกต้องของการอ้างอิง (referential integrity) หมายความว่าคีย์ภายนอกทุกค่าต้องตรงกับคีย์หลักที่มีอยู่จริงในตารางที่อ้างอิง: ไม่มีการยืมสำหรับสมาชิกที่ไม่มีอยู่จริง และไม่มีการบันทึก孤儿 (orphan records)
- DBMS บังคับใช้: ปฏิเสธการแทรกข้อมูลที่มีคีย์ภายนอกที่ไม่รู้จัก และปฏิเสธการลบบันทึกที่还有其他บันทึกยังอ้างอิงอยู่
ความสมบูรณ์เชิงอ้างอิง (Referential integrity) รับประกันว่า:
Difficulty 1/5 · 100 coins + a small bonus on first completion today
มันป้องกันเรคอร์ด孤儿 — คุณไม่สามารถอ้างอิงถึงคีย์หลักที่ไม่ได้มีอยู่จริง
จับคู่ความสัมพันธ์แต่ละชนิดกับประเภทของมัน
Difficulty 2/5 · 140 coins + a small bonus on first completion today
นับว่าแต่ละเอนทิตีสามารถเชื่อมโยงไปยังอีกเอนทิตีหนึ่งได้กี่ตัว หลายต่อหลายต้องใช้ตารางเชื่อมโยงเพื่อจัดเก็บ
ตัวอย่างวิธีทำ: ความถูกต้องของการอ้างอิงป้องกันอะไรได้บ้าง
- ลูกค้าที่มีคำสั่งซื้อค้างชำระสามรายการถูกลบออกจากตาราง
CUSTOMERอธิบายว่าความถูกต้องของการอ้างอิงทำงานอย่างไร - คีย์ภายนอก
CustomerIDของคำสั่งซื้อแต่ละรายการต้องตรงกับลูกค้าที่มีอยู่จริง การลบลูกค้าจะทำให้คำสั่งซื้อสามรายการชี้ไปยังบันทึกที่ไม่มีอยู่แล้ว: บันทึก孤儿 - ดังนั้น DBMS จึงปฏิเสธการลบจนกว่าคำสั่งซื้อจะถูกลบหรือโอนไปใหม่ หรือหากตั้งค่าให้ cascade จะลบคำสั่งซื้อไปด้วย ในทุกกรณีคำสั่งซื้อจะไม่เคยอ้างถึงลูกค้าที่ไม่มีอยู่จริง
- บอกกฎ是什么, อะไรที่จะทำลายมัน, และ DBMS ทำอย่างไร
ความสมบูรณ์เชิงอ้างอิงอนุญาตให้ลบลูกค้าwhile orders in another table still refer to that customer.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
สิ่งนี้จะสร้างเรคอร์ด孤儿 DBMS จะปฏิเสธการลบ หรือดำเนินการ cascade ไปยังคำสั่งซื้อ เพื่อให้คีย์ภายนอกทุกตัวยังคงชี้ไปยังเรคอร์ดที่มีอยู่
นิยามที่กรรมการสอบยอมรับ
| พจน์ | นิยาม |
|---|---|
| เอนทิตี | สิ่งที่เป็นที่เก็บข้อมูล แทนด้วยตารางหนึ่ง |
| แอททริบิวต์ | ข้อมูลชิ้นหนึ่งเกี่ยวกับเอนทิตี คอลัมน์หนึ่ง |
| ทิวเปิล | แถวหนึ่งของตาราง บันทึกหนึ่ง |
| คีย์หลัก | แอททริบิวต์หรือกลุ่มแอททริบิวต์ที่ระบุตัวทิวเปิลแต่ละตัวได้อย่างไม่ซ้ำซ้อน |
| คีย์ทางเลือก | แอททริบิวต์หรือกลุ่มที่สามารถเลือกเป็นคีย์หลักได้ |
| คีย์รอง | แอททริบิวต์ที่มีดัชนีเพื่อค้นหาตารางอย่างรวดเร็ว |
| คีย์ภายนอก | แอททริบิวต์ในตารางหนึ่งที่เป็นคีย์หลักของอีกตารางหนึ่ง เพื่อสร้างการเชื่อมโยง |
| ความถูกต้องของการอ้างอิง | คีย์ภายนอกทุกค่าอ้างถึงคีย์หลักที่มีอยู่จริง |
คะแนนที่หลุดหายไป
- ทิวเปิลคือแถว, แอททริบิวต์คือคอลัมน์. สลับกันจะได้คะแนนเต็มไม่ได้
- คำว่า "ไม่ซ้ำซ้อน" (unique) เพียงอย่างเดียวไม่ได้นิยามคีย์หลัก; มัน ระบุตัวบันทึก และเป็นค่าว่างไม่ได้
- คีย์ภายนอก สามารถซ้ำได้: ลูกค้าหนึ่งคน มีคำสั่งซื้อหลายรายการ ส่วนคีย์หลักนั้นห้ามซ้ำ
- คีย์รอง ใช้สำหรับการค้นหาที่เร็ว ไม่ใช่สำหรับการระบุตัวตน อย่าเรียกว่า "คีย์หลักลำดับที่สอง"
คุณเข้าใจแล้ว
- วิธีการใช้ไฟล์ suffers ความซ้ำซ้อน, ความไม่สอดคล้องกัน และ ความขึ้นอยู่กับข้อมูล พร้อมกับความถูกต้อง การแชร์ การค้นหา และความปลอดภัยที่ต่ำ
- ฐานข้อมูลเชิงสัมพันธ์ เก็บข้อเท็จจริงแต่ละอย่างไว้ครั้งเดียวในตารางที่ถูกจัดการโดย DBMS เดียวกัน ทำให้โปรแกรมอิสระจากการจัดเก็บและกฎถูกบังคับใช้แบบรวมศูนย์
- เอนทิตี → ตาราง · ทิวเปิล → บันทึก, แถว · แอททริบิวต์ → ฟิลด์, คอลัมน์ · คีย์หลัก ระบุ, คีย์ภายนอก เชื่อมโยง, คีย์ทางเลือก อาจระบุ, คีย์รอง มีดัชนีสำหรับการค้นหา
- ความถูกต้องของการอ้างอิง: คีย์ภายนอกทุกตัวตรงกับคีย์หลักที่มีอยู่จริง จึงไม่มีบันทึก孤儿