Chapter 4 : ฐานข้อมูลเชิงสัมพันธ์ (Relational Database) อ.คเชนทร์ ซ่อนกลิ่น
หัวข้อ ความหมายฐานข้อมูลเชิงสัมพันธ์ โครงสร้างฐานข้อมูลเชิงสัมพันธ์ รีเลชั่น (Relation) ดีกรี (Degree) คาร์ดินัลริตี้ (Cardinality) โดเมน (Domain)
หัวข้อ (ต่อ) โครงสร้างฐานข้อมูลเชิงสัมพันธ์ (ต่อ) คีย์ (Key) คีย์หลัก (Primary Key : PK) คีย์นอก (Foreign Key : FK) คีย์ร่วม (Composite Key) คีย์คู่แข่ง (Candidate Key) คีย์สำรอง (Alternate Key) ค่าว่าง (Null Values)
หัวข้อ (ต่อ) ความสัมพันธ์ (Relationship) กฎควบคุมความคงสภาพของข้อมูล (Integrity Constraint) กฎความคงสภาพของ Entity (Entity Integrity Rule) กฎความคงสภาพของการอ้างอิง (Referential Integrity Rule) ความสัมพันธ์ (Relationship)
ความหมายของฐานข้อมูลเชิงสัมพันธ์ โมเดลฐานข้อมูลเชิงสัมพันธ์ถูกพัฒนาขึ้นมาครั้งแรกในปี ค.ศ.1970 โดย E.F.Codd จาก บริษัท IBM โดยมีการเก็บข้อมูลในรูปแบบของ ตาราง (Table) หรือ รีเลชั่น (Relation) ที่ประกอบด้วย 1. Attribute : คอลัมน์ ที่ใช้แทน เขตข้อมูล (Field) 2.Tuple : แถว ที่ใช้แทน ระเบียน (Record) โดย Relation ต่างๆ ได้ผ่านกระบวนการทำให้ Relation เป็นบรรทัดฐาน (Normalized) ในระหว่างการออกแบบเพื่อลดความซ้ำซ้อน และเพื่อให้การ จัดการฐานข้อมูลเป็นไปอย่างมีประสิทธิภาพ
โครงสร้างของฐานข้อมูลเชิงสัมพันธ์ Relation Relation เป็นหน่วยเก็บข้อมูลในรูปแบบของตาราง(Table) โดยเป็นคำศัพท์ที่ถูกนำมาจากวิชาคณิตศาสตร์ที่แสดงถึงรูปแบบของตาราง 2 มิติ ที่ประกอบด้วยคอลัมน์และแถวของข้อมูล คอลัมน์ แสดงคุณสมบัติของ Relation หมายถึง Attribute ของ Relation แถว ข้อมูลตามคอลัมน์ที่เป็นคุณสมบัติของ Relation หมายถึง Tuple หรือ Record
คุณสมบัติของ Relation 1. ช่อง(Cell) แต่ละช่องของตารางเก็บข้อมูลได้เพียงค่าเดียว 2. ชนิดข้อมูล ข้อมูลที่อยู่ในคอลัมน์เดียวกันจะต้องมีชนิดข้อมูล(Data Type) เป็นแบบเดียวกัน เช่น คอลัมน์รหัสประจำตัวของทุกแถวจะต้องมีข้อมูล ที่เป็นตัวเลขเท่านั้น 3. ชื่อคอลัมน์ แต่ละคอลัมน์ของ Relation หนึ่งๆ จะต้องมีชื่อคอลัมน์ที่แตกต่างกัน ส่วนลำดับของคอลัมน์ก่อนและหลังไม่ถือว่าสำคัญ 4. แถว ข้อมูลแต่ละแถวของ Relation หนึ่งๆ จะต้องแตกต่างกัน ส่วนการเรียงลำดับ ของแถวไม่ถือว่าสำคัญ
รูปแสดงโครงสร้างของ Relation Attribute นักศึกษา รหัสประจำตัว ชื่อ คณะ ที่อยู่ 54652235 มานิด สุขใจ วิทยาศาสตร์ อุตรดิตถ์ 54652236 สว่าง นาการ 54652237 ระฟ้า ดีพร้อม วิทยาการจัดการ Tuple หรือ Record ช่องใส่ข้อมูล (Cell) รูปแสดงโครงสร้างของ Relation
รูปแบบที่ใช้แทน Relation สามารถเขียนแทนได้ดังนี้ นักศึกษา รหัสประจำตัว ชื่อ คณะ ที่อยู่ หรือ Relation Schema นักศึกษา(รหัสประจำตัว,ชื่อ,คณะ,ที่อยู่)
โครงสร้างของฐานข้อมูลเชิงสัมพันธ์ (ต่อ) ดีกรี (Degree) จำนวนของ Attribute ใน Relation Binary Unary ID POSITION 1 MANAGER 2 SALE VAT 7 Degree = 1 Degree = 2 Ternary n-ary ID PRODUCT … 1 RAM 2 PRINTER ID ROOM PRICE 1 BIG MEETNG 1000 2 SMALL MEETNG 50 Degree = 3 Degree = n
ตัวอย่าง 4 3 นักศึกษา รหัสประจำตัว ชื่อ-สกุล คณะ ที่อยู่ 54652235 มานิด สุขใจ วิทยาศาสตร์ อุตรดิตถ์ 54652236 สว่าง นาการ 4 Degree = สินค้า รหัสสินค้า ชนิดสินค้า ราคา / หน่วย P01 กระดาษ A4 70 g. 70 P02 กระดาษ A4 80 g. 80 P03 กระดาษ F4 80 g. 100 P04 กระดาษยาวพิเศษ (F14) 80 g. 120 3 Degree =
โครงสร้างของฐานข้อมูลเชิงสัมพันธ์ (ต่อ) คาร์ดินัลริตี้ (Cardinality) จำนวนของ Tuple ใน Relation ROOM POSITION ID ROOM PRICE 1 BIG MEETNG 1000 2 SMALL MEETNG 50 ID POSITION 1 MANAGER 2 SALE 3 PR 4 Cardinality = 2 Cardinality = 4
ตัวอย่าง สารสนเทศ (Information) Degree = 5 Cardinality = 7 จำนวน Attribute ที่มีในตาราง Entity หรือ Relation (ตาราง) Degree = Cardinality = 5 Attribute (Field ) 7 จำนวน Tuple ที่มีในตาราง ตารางนักศึกษา สารสนเทศ (Information) Tuple (Record)
โครงสร้างของฐานข้อมูลเชิงสัมพันธ์ (ต่อ) โดเมน(Domain) ขอบเขตของค่าที่เป็นไปได้ของข้อมูลแต่ละ Attribute เพื่อป้องกันไม่ให้ เกิดการป้อนข้อมูลที่เกินขอบเขตที่กำหนด เช่น กำหนดให้ค่าเงินเดือนของพนักงานจะต้องมีค่ามากกว่า 0 เพื่อป้องกันไม่ให้ผู้ใช้ป้อนจำนวนเงินที่เป็น 0 หรือ มีค่าติดลบให้กับข้อมูลในส่วนของเงินเดือนของพนักงาน, กำหนดเพศ ให้กับพนักงานจะต้องมีค่าเป็นชาย หรือ หญิง เท่านั้น
ตัวอย่าง กำหนดเพศให้กับพนักงานจะต้องมีค่าเป็น ชาย หรือ หญิง เท่านั้น รหัส ชื่อ เงินเดือน เพศ 1 โดม 20000 ชาย 2 ญาญ่า 30000 หญิง ค่าเงินเดือนต้องมีค่ากว่า 0
โครงสร้างของฐานข้อมูลเชิงสัมพันธ์ (ต่อ) คีย์(Key) Attribute หรือ กลุ่มของ Attribute ที่อยู่ใน Relation ที่ถูกกำหนดขึ้นมาเพื่อ ให้แต่ละ Tuple (แถว) มีความแตกต่าง และเพื่อสามารถระบุความเป็น เอกลักษณ์ (Uniquely) ในแต่ละแถว สามารถบอกได้ว่าข้อใดสัมพันธ์ กับข้อมูลใด มีอยู่ 5 ประเภท คีย์หลัก (Primary Key : PK) คีย์นอก (Foreign Key : FK) คีย์ร่วม (Composite Key) คีย์คู่แข่ง (Candidate Key) คีย์สำรอง (Alternate Key)
ประเภทของคีย์ คีย์หลัก (Primary Key : PK) เป็น Attribute ที่มีคุณสมบัติของข้อมูลที่มีค่าเป็นเอกลักษณ์โดยคุณสมบัตินั้นจะสามารถระบุว่าข้อมูลนั้นเป็นของ Tuple ใด นักศึกษา(รหัสประจำตัว,ชื่อ,คณะ,ที่อยู่) คนงาน(รหัสคนงาน,ชื่อคนงาน,อัตราค่าต่อชั่วโมง,ประเภทความชำนาญ,รหัสผู้ควบคุม)
ตัวอย่าง
ประเภทของคีย์ (ต่อ) คีย์นอก (Foreign Key : FK) คีย์ซึ่งประกอบด้วย Attribute หรือกลุ่มของ Attributeใน Relation ซึ่งมีคุณสมบัติเป็นคีย์หลัก และไปปรากฏอีก Relation หนึ่ง เพื่อประโยชน์ในการเชื่อมโยงข้อมูลซึ่งกันและกัน
ตัวอย่าง FK PK
ประเภทของคีย์ (ต่อ) คีย์ร่วม (Composite Key) คีย์หลักที่ประกอบด้วย Attribute มากกว่า 1 Attribute เนื่องจากถ้าใช้ Attribute เดียวอาจจะมีปัญหาข้อมูลแต่ละแถวซ้ำกันได้ ซ้ำ PROJWORK(PROJNO,EMPNUM,HOURS)
ประเภทของคีย์ (ต่อ) คีย์คู่แข่ง (Candidate Key) ในแต่ละ Relation อาจมี Attribute ที่ทำหน้าที่เป็นคีย์หลักได้มากกว่าหนึ่ง Attribute โดยเรียก Attribute เหล่านี้ว่า คีย์คู่แข่ง (Candidate Key) เช่น นักศึกษาแต่ละคน มี - รหัสประจำตัวนักศึกษา - รหัสประจำตัวบัตรประชาชน โดยปกติแล้วจะเลือก Candidates Key ที่สั้นที่สุดเป็น Primary Key
คีย์คู่แข่ง Candidate Key คีย์หลัก (Primary Key) ตัวอย่าง คีย์คู่แข่ง Candidate Key รหัสนักศึกษา ชื่อ สกุล บัตรประชาชน ชั้นเรียน สาขา คีย์หลัก (Primary Key)
ประเภทของคีย์ (ต่อ) คีย์สำรอง (Alternate Key) คือ คีย์คู่แข่ง (Candidate Key) ที่ไม่ได้ถูกเลือกให้เป็นคีย์หลัก
ตัวอย่าง คีย์หลัก (Primary Key) คีย์คู่แข่ง Candidate Key รหัสนักศึกษา ชื่อ สกุล บัตรประชาชน ชั้นเรียน สาขา คีย์หลัก (Primary Key) คีย์สำรอง (Alternate Key)
เพิ่มเติม คีย์คู่แข่ง Candidate Key คีย์หลัก (Primary Key) คีย์สำรอง (Alternate Key) Candidate Key สามารถเป็น Primary Key และ Alternate Key ได้
ค่าว่าง (Null Value) ถ้า Attribute ใดไม่มีค่าข้อมูลเก็บอยู่ จะเรียกค่าใน Attribute นั้นว่า ค่าว่าง (Null Value) ซึ่งค่าว่างนี้ไม่ได้หมายความว่าข้อมูลที่เก็บอยู่ใน Attribute นั้นมีค่าเป็นช่องว่าง (blank) หรือ เลข 0 แต่เป็นเพียงการบอกว่ายังไม่รู้ หรือ ว่ายังไม่พร้อมที่จะใส่ข้อมูลลงไป ซึ่งตอนหลังอาจมีการกลับมาใส่ข้อมูลลงไปใหม่ได้ รหัสนักศึกษา รหัสวิชา เกรด 50000001 โดม 50000002 ญาญ่า A ค่าว่าง
กฎควบคุมความคงสภาพของข้อมูล (Integrity Constraint) กฎความคงสภาพของ Entity (Entity Integrity Rule) “ค่าข้อมูลของคีย์หลักจะต้องไม่เป็นค่าว่าง(Null Value)” เพราะจะไม่สามารถนำ Primary Key มาใช้เข้าถึงข้อมูลในแต่ละแถวได้
ตัวอย่าง ค่าว่าง ค่าว่าง รหัสนักศึกษา รหัสวิชา เกรด โดม B 50000002 ญาญ่า A ค่าว่าง รหัสนักศึกษา รหัสวิชา เกรด 50000001 โดม 50000002 ญาญ่า A
กฎควบคุมความคงสภาพของข้อมูล (Integrity Constraint) กฎความคงสภาพของการอ้างอิง (Referential Integrity Rule) “ถ้า Relation ใดมี Attribute ที่เป็นคีย์นอกอยู่ ข้อมูลที่เป็นคีย์นอกนั้นจะต้องเป็นข้อมูลที่มีอยู่ในคีย์หลักอีก Relation หนึ่ง” เนื่องจากจะต้องมีการอ้างถึงค่าในตารางที่เป็นคีย์นอก
ตัวอย่าง รหัสสินค้า ชื่อสินค้า จำนวน bk00198 เสื้อยืด 100 cd00034 คีย์หลัก ตารางสินค้า รหัสสินค้า ชื่อสินค้า จำนวน bk00198 เสื้อยืด 100 cd00034 กางเกงขายาง 250 คีย์หลัก คีย์นอก ตารางยอดขาย รหัสพนักงาน รหัสสินค้า ยอดขาย HY001 bk00198 80 HY002 cd00034 200
กฎการควบคุมความถูกต้องของข้อมูล (Data Integrity) ตัวอย่างงานระบบทะเบียนนักศึกษาจะมี Integrity Rule ดังต่อไปนี้ นักศึกษาทุกคนต้องสังกัดคณะที่มีอยู่เท่านั้น วิชาที่ลงทะเบียนต้องเป็นวิชาที่เปิดสอนเท่านั้น เกรดเฉลี่ยแต่ละเทอมจะอยู่ระหว่าง 0.00-4.00 เท่านั้น เกรดที่ได้จะต้องเป็น A,B+,B,C+,C,D+,D หรือ F เท่านั้น เป็นต้น
ความสัมพันธ์ (Relationship) แบ่งออกเป็น 3 ประเภท คือ 1. ความสัมพันธ์แบบหนึ่งต่อหนึ่ง One to One Relationship (1 – 1 or 1:1) 2. ความสัมพันธ์แบบหนึ่งต่อกลุ่ม One to Many Relationship (1 – M or 1:M) 3. ความสัมพันธ์แบบกลุ่มต่อกลุ่ม Many to Many Relationship (M – N or M:N)
ความสัมพันธ์ (Relationship) (ต่อ) ความสัมพันธ์แบบหนึ่งต่อหนึ่ง (1 – 1 or 1:1) เป็นความสัมพันธ์ที่เข้าใจง่ายที่สุด เป็นความสัมพันธ์ของข้อมูลใน 1 เรคคอร์ดในตารางหนึ่งมีความสัมพันธ์กับข้อมูลอย่างมากหนึ่งข้อมูลกับอีกเรคคอร์ดในอีกตารางหนึ่งเท่านั้นในลักษณะที่เป็นหนึ่งต่อหนึ่ง
ความสัมพันธ์ (Relationship) (ต่อ) ตัวอย่างความสัมพันธ์แบบ One-to-One Relationship (1:1) พนักงานแต่ละคนจะมีที่จอดรถยนต์เพียงหนึ่งช่องเท่านั้น ที่จอดรถยนต์แต่ละช่องต้องเป็นที่จอดของพนักงานเพียงหนึ่งคนเท่านั้น พนักงาน จอดรถ ที่จอดรถ 1 E-R Diagram แสดงความสัมพันธ์ “จอดรถ” ระหว่างเอ็นทิตี้พนักงานและเอ็นทิตี้ที่จอดรถ พนักงาน ที่จอดรถยนต์ แผนภาพแสดงความสัมพันธ์ระหว่าง สมาชิกเอ็นทิตี้พนักงานกับเอ็นทิตี้ที่จอดรถ
ความสัมพันธ์ (Relationship) (ต่อ) ตัวอย่างความสัมพันธ์แบบ One-to-One Relationship (1:1) นักศึกษา สัญญาเงินกู้ 1 ทำ นักศึกษาหนึ่งคนทำสัญญาเงินกู้ได้เพียงครั้งเดียว สัญญาการกู้เงินแต่ละฉบับถูกลงชื่อกู้ได้จากนักศึกษาเพียงคนเดียวเท่านั้น
ความสัมพันธ์แบบ1:1 ระหว่างตาราง PROFESSOR และ DEPARTMENT
ความสัมพันธ์ (Relationship) (ต่อ) ความสัมพันธ์แบบหนึ่งต่อกลุ่ม (1 – M or 1:M) เป็นความสัมพันธ์ที่พบบ่อยที่สุดในฐานข้อมูล เป็นความสัมพันธ์ของข้อมูลใน 1 เรคคอร์ดในตารางหนึ่งมีความสัมพันธ์กับข้อมูลมากกว่าหนึ่งข้อมูลกับอีกเรคคอร์ดในอีกตารางหนึ่งเท่านั้นในลักษณะที่เป็นหนึ่งต่อกลุ่ม วิศวกรรมไฟฟ้า วิศวกรรมคอมพิวเตอร์ คณะวิศวกรรมศาสตร์ วิศวกรรมอุตสาหการ วิศวกรรมเครื่องกล
ความสัมพันธ์ (Relationship) (ต่อ) ตัวอย่างความสัมพันธ์แบบ One-to-Many Relationship (1:M) อาจารย์หนึ่งคนจะสอนได้หลายกลุ่มเรียน แต่ละกลุ่มเรียนจะมีอาจารย์สอนได้เพียงคนเดียว DBMS Sec.01 DBMS Sec.02 อาจารย์ สอน กลุ่มเรียน 1 M DBMS Sec.03 DBMS Sec.04 DBMS Sec.05 E-R Diagram แสดงความสัมพันธ์ “สอน” ระหว่างเอ็นทิตี้อาจารย์และเอ็นทิตี้กลุ่มเรียน อาจารย์ กลุ่มเรียน แผนภาพแสดงความสัมพันธ์ระหว่าง สมาชิกเอ็นทิตี้อาจารย์กับเอ็นทิตี้กลุ่มเรียน
ความสัมพันธ์ (Relationship) (ต่อ) ตัวอย่างความสัมพันธ์แบบ One-to-Many Relationship (1:M) อาจารย์ นักศึกษา 1 M เป็นที่ปรึกษา อาจารย์แต่ละคนสามารถเป็นที่ปรึกษาให้กับนักศึกษาได้หลายคน นักศึกษาแต่ละคนจะมีอาจารย์ที่ปรึกษาเพียงคนเดียวเท่านั้น
ความสัมพันธ์ (Relationship) (ต่อ) ตัวอย่างความสัมพันธ์แบบ One-to-Many Relationship (1:M) ความสัมพันธ์แบบ 1:M ระหว่างตาราง PAINTER และ ตาราง PAINTING
ความสัมพันธ์ (Relationship) (ต่อ) ความสัมพันธ์แบบกลุ่มต่อกลุ่ม (M – N or M:N) เป็นความสัมพันธ์ของข้อมูลในเรคคอร์ดใดๆ ของตารางหนึ่งมีค่าตรงกับข้อมูลของหลายๆ เรคคอร์ดในตารางอื่นๆ เช่น Database Systems พัชราภา Computer Networks เขมนิจ Computer Architecture สุวนันท์ Data Structures
ความสัมพันธ์ (Relationship) (ต่อ) ตัวอย่างความสัมพันธ์แบบ Many-to-Many Relationship (M:N) นักศึกษาแต่ละคนลงทะเบียนเรียนวิชาได้มากกว่า 1 วิชา แต่ละวิชามีนักศึกษาได้มากกว่า 1 คน วิชา DBMS นักศึกษา วิชา M N ลงทะเบียนเรียน วิชา Network วิชา OOP E-R Diagram แสดงความสัมพันธ์ “ลงทะเบียนเรียน” ระหว่างเอ็นทิตี้นักศึกษาและเอ็นทิตี้วิชา นักศึกษา วิชา แผนภาพแสดงความสัมพันธ์ระหว่าง สมาชิกเอ็นทิตี้นักศึกษากับเอ็นทิตี้วิชา
เกิดความซับซ้อน !!! ความสัมพันธ์แบบ M:N ระหว่างตาราง STUDENT และ CLASS CLASS_CODE ความสัมพันธ์แบบ M:N ระหว่างตาราง STUDENT และ CLASS
แก้ปัญหาโดย ความสัมพันธ์ เป็น Composite Entity และ STUDENT has CLASS ความสัมพันธ์ เป็น Composite Entity และ เปลี่ยนคำกริยาเป็นคำนาม STUDENT CLASS ENROLL M 1 N จาก 2 ตาราง คือ ตาราง STUDENT และ ตาราง CLASS แยกออกได้เป็น 3 ตาราง คือ ตาราง STUDENT , ตาราง CLASS , ตาราง ENROLL
สร้างตารางเพิ่มขึ้นมาอีก 1 อัน เป็น Composite Entity นำ PK ของตารางที่นำมาเชื่อม เป็น Composite key สร้างตารางเพิ่มขึ้นมาอีก 1 อัน เป็น Composite Entity none แปลงความสัมพันธ์แบบ M:N เป็น 2 ความสัมพันธ์แบบ 1:M
แบบฝึกหัด 1. จงเขียนโครงสร้างของ Relation (ห้ามซ้ำกับสไลด์ประกอบการเรียน) 2. คุณสมบัติในการจัดเก็บข้อมูลของ Relation มีอะไรบ้าง 3. Relation ประกอบด้วยคีย์ประเภทต่างๆ อะไรบ้าง จงอธิบายพร้อมยกตัวอย่าง ประกอบประเภทคีย์ดังกล่าว 4. Null หมายถึงอะไรใน Relational Database 5. เหตุใดจึงต้องมีการนำ Integrity rule มาใช้ในฐานข้อมูล 6. ความสัมพันธ์ระหว่าง Relation มีกี่ประเภท อะไรบ้าง จงยกตัวอย่างประกอบ (ห้ามยกตัวอย่างซ้ำกับสไลด์ประกอบการเรียน)