Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> SQL

ระบบจัดการฐานข้อมูลเชิงสัมพันธ์ (RDMS)


ข้อมูลและข้อมูลของแบบจำลองการออกแบบฐานข้อมูลเชิงสัมพันธ์ (RDD) ลงในชุดของตารางที่มีแถวและคอลัมน์ แต่ละแถวของความสัมพันธ์/ตารางแสดงถึงระเบียน และแต่ละคอลัมน์แสดงถึงแอตทริบิวต์ของข้อมูล Structured Query Language (SQL) ใช้เพื่อจัดการฐานข้อมูลเชิงสัมพันธ์ การออกแบบฐานข้อมูลเชิงสัมพันธ์ประกอบด้วยสี่ขั้นตอน โดยที่ข้อมูลจะถูกจำลองเป็นชุดของตารางที่เกี่ยวข้อง ขั้นตอนคือ −

  • กำหนดความสัมพันธ์/แอตทริบิวต์
  • กำหนดคีย์หลัก
  • กำหนดความสัมพันธ์
  • การทำให้เป็นมาตรฐาน

ฐานข้อมูลเชิงสัมพันธ์แตกต่างจากฐานข้อมูลอื่นในแนวทางในการจัดระเบียบข้อมูลและดำเนินการธุรกรรม ใน RDD ข้อมูลจะถูกจัดเป็นตารางและการเข้าถึงข้อมูลทุกประเภทจะดำเนินการผ่านธุรกรรมที่มีการควบคุม การออกแบบฐานข้อมูลเชิงสัมพันธ์เป็นไปตามคุณสมบัติ ACID (อะตอมมิก ความสอดคล้อง ความสมบูรณ์ และความทนทาน) ที่จำเป็นจากการออกแบบฐานข้อมูล การออกแบบฐานข้อมูลเชิงสัมพันธ์กำหนดให้ใช้เซิร์ฟเวอร์ฐานข้อมูลในแอปพลิเคชันเพื่อจัดการกับปัญหาการจัดการข้อมูล

ระบบจัดการฐานข้อมูลเชิงสัมพันธ์ (RDMS)

กระบวนการออกแบบฐานข้อมูลเชิงสัมพันธ์

การออกแบบฐานข้อมูลเป็นศิลปะมากกว่าวิทยาศาสตร์ เนื่องจากคุณต้องตัดสินใจหลายอย่าง ฐานข้อมูลมักจะถูกปรับแต่งให้เหมาะสมกับแอพพลิเคชั่นเฉพาะ ไม่มีแอปพลิเคชันที่กำหนดเองสองตัวที่เหมือนกัน ดังนั้นจึงไม่มีฐานข้อมูลสองอันที่เหมือนกัน แนวทาง (โดยปกติในแง่ของสิ่งที่ไม่ควรทำแทนสิ่งที่ต้องทำ) มีให้ในการตัดสินใจออกแบบเหล่านี้ แต่ทางเลือกสุดท้ายขึ้นอยู่กับผู้ออกแบบ

ขั้นตอนที่ 1 − กำหนดวัตถุประสงค์ของฐานข้อมูล (การวิเคราะห์ความต้องการ)

  • รวบรวมข้อกำหนดและกำหนดวัตถุประสงค์ของฐานข้อมูลของคุณ
  • การร่างตัวอย่างแบบฟอร์มการป้อนข้อมูล คำค้นหา และรายงานมักจะช่วยได้

ขั้นตอนที่ 2 − รวบรวมข้อมูล จัดระเบียบในตาราง และระบุคีย์หลัก

  • เมื่อคุณตัดสินใจเกี่ยวกับวัตถุประสงค์ของฐานข้อมูลแล้ว ให้รวบรวมข้อมูลที่จำเป็นเพื่อเก็บไว้ในฐานข้อมูล แบ่งข้อมูลออกเป็นตารางตามหัวเรื่อง
  • เลือกหนึ่งคอลัมน์ (หรือสองสามคอลัมน์) เป็นคีย์หลักที่เรียกว่า ซึ่งระบุแต่ละแถวไม่ซ้ำกัน

ขั้นตอนที่ 3 - สร้างความสัมพันธ์ระหว่างตาราง

ฐานข้อมูลที่ประกอบด้วยตารางที่ไม่เกี่ยวข้องและไม่เกี่ยวข้องกันมีจุดประสงค์เพียงเล็กน้อย (คุณอาจพิจารณาใช้สเปรดชีตแทน) พลังของฐานข้อมูลเชิงสัมพันธ์อยู่ในความสัมพันธ์ที่สามารถกำหนดได้ระหว่างตาราง สิ่งสำคัญที่สุดในการออกแบบฐานข้อมูลเชิงสัมพันธ์คือการระบุความสัมพันธ์ระหว่างตาราง ประเภทของความสัมพันธ์ ได้แก่:

  • หนึ่งต่อหลายคน
  • กลุ่มต่อกลุ่ม
  • ตัวต่อตัว

หนึ่งต่อหลายคน

ในฐานข้อมูล "บัญชีรายชื่อชั้นเรียน" ครูอาจสอนเป็นศูนย์หรือมากกว่า ในขณะที่ชั้นเรียนสอนโดยครูคนเดียว (และเพียงคนเดียว) ในฐานข้อมูล "บริษัท" ผู้จัดการจะจัดการพนักงานตั้งแต่ 0 คนขึ้นไป ในขณะที่พนักงานจะได้รับการจัดการโดยผู้จัดการเพียงคนเดียว (และมีเพียงคนเดียว) ในฐานข้อมูล "การขายผลิตภัณฑ์" ลูกค้าสามารถสั่งซื้อได้หลายรายการ ในขณะที่มีการสั่งซื้อโดยลูกค้ารายใดรายหนึ่ง ความสัมพันธ์แบบนี้เรียกว่า one-to-many

ความสัมพันธ์แบบหนึ่งต่อกลุ่มไม่สามารถแสดงในตารางเดียว ตัวอย่างเช่น ในฐานข้อมูล "รายชื่อชั้นเรียน" เราอาจเริ่มต้นด้วยตารางชื่อครู ซึ่งเก็บข้อมูลเกี่ยวกับครู (เช่น ชื่อ สำนักงาน โทรศัพท์ และอีเมล) ในการจัดเก็บชั้นเรียนที่ครูแต่ละคนสอน เราสามารถสร้างคอลัมน์ class1, class2, class3 แต่ประสบปัญหาทันทีเกี่ยวกับจำนวนคอลัมน์ที่จะสร้าง ในทางกลับกัน หากเราเริ่มต้นด้วยตารางที่เรียกว่า Classes ซึ่งเก็บข้อมูลเกี่ยวกับชั้นเรียน เราสามารถสร้างคอลัมน์เพิ่มเติมเพื่อเก็บข้อมูลเกี่ยวกับ (หนึ่ง) ครู (เช่น ชื่อ สำนักงาน โทรศัพท์ และอีเมล) อย่างไรก็ตาม เนื่องจากครูอาจสอนหลายชั้นเรียน ข้อมูลของครูจึงซ้ำกันในหลายแถวในชั้นเรียนแบบตาราง

เพื่อรองรับความสัมพันธ์แบบหนึ่งต่อกลุ่ม เราต้องออกแบบตารางสองตาราง:สำหรับเช่น ตารางคลาสเพื่อเก็บข้อมูลเกี่ยวกับคลาสที่มี classID เป็นคีย์หลัก และตารางครูเพื่อเก็บข้อมูลเกี่ยวกับครูที่มีรหัสครูเป็นคีย์หลัก จากนั้น เราสามารถสร้างความสัมพันธ์แบบหนึ่งต่อกลุ่มโดยการจัดเก็บคีย์หลักของตาราง Teacher (เช่น รหัสครู) (ปลาย "หนึ่ง" หรือตารางหลัก) ในคลาสของตาราง (ส่วน "กลุ่ม" หรือ ตารางลูก) ดังภาพประกอบด้านล่าง

ระบบจัดการฐานข้อมูลเชิงสัมพันธ์ (RDMS) รหัสครูของคอลัมน์ในตารางย่อย คลาสเรียกว่าคีย์ต่างประเทศ คีย์นอกของตารางลูกคือคีย์หลักของตารางหลัก ใช้เพื่ออ้างอิงตารางหลัก

หลายต่อหลายคน

ในฐานข้อมูล "การขายผลิตภัณฑ์" คำสั่งซื้อของลูกค้าอาจมีผลิตภัณฑ์ตั้งแต่หนึ่งรายการขึ้นไป และผลิตภัณฑ์สามารถปรากฏในคำสั่งซื้อจำนวนมาก ในฐานข้อมูล "ร้านหนังสือ" หนังสือเขียนโดยผู้แต่งตั้งแต่หนึ่งคนขึ้นไป ในขณะที่ผู้เขียนอาจเขียนหนังสือเป็นศูนย์หรือมากกว่า ความสัมพันธ์แบบนี้เรียกว่าแบบกลุ่มต่อกลุ่ม

มาอธิบายด้วยฐานข้อมูล "การขายผลิตภัณฑ์" เราเริ่มต้นด้วยสองตาราง:ผลิตภัณฑ์และคำสั่งซื้อ ผลิตภัณฑ์ตารางประกอบด้วยข้อมูลเกี่ยวกับผลิตภัณฑ์ (เช่น ชื่อ คำอธิบาย และปริมาณในสต็อก) โดยมีรหัสผลิตภัณฑ์เป็นคีย์หลัก คำสั่งซื้อแบบตารางประกอบด้วยคำสั่งซื้อของลูกค้า (รหัสลูกค้า dateOrdered วันที่ที่ต้องการ และสถานะ) อีกครั้ง เราไม่สามารถจัดเก็บสินค้าที่สั่งซื้อไว้ในตารางใบสั่งซื้อได้ เนื่องจากเราไม่ทราบว่าจะสำรองสินค้าได้กี่คอลัมน์ นอกจากนี้เรายังไม่สามารถจัดเก็บข้อมูลการสั่งซื้อในตารางสินค้าได้

เพื่อรองรับความสัมพันธ์แบบกลุ่มต่อกลุ่ม เราจำเป็นต้องสร้างตารางที่สาม (เรียกว่าตารางเชื่อมต่อ) พูด OrderDetails (หรือ OrderLines) โดยที่แต่ละแถวแสดงรายการของคำสั่งซื้อเฉพาะ สำหรับตาราง OrderDetails คีย์หลักประกอบด้วยสองคอลัมน์:orderID และ productID ซึ่งระบุแต่ละแถวไม่ซ้ำกัน คอลัมน์ orderID และ productID ในตาราง OrderDetails ใช้เพื่ออ้างอิงตารางใบสั่งซื้อและสินค้า ดังนั้นจึงเป็นคีย์นอกในตาราง OrderDetails ด้วย

ระบบจัดการฐานข้อมูลเชิงสัมพันธ์ (RDMS)

อันที่จริงความสัมพันธ์แบบกลุ่มต่อกลุ่มถูกนำไปใช้เป็นความสัมพันธ์แบบหนึ่งต่อกลุ่มสองความสัมพันธ์ โดยมีการแนะนำตารางการรวม

คำสั่งซื้อมีหลายรายการใน OrderDetails รายการ OrderDetails เป็นของคำสั่งซื้อหนึ่งโดยเฉพาะ

ผลิตภัณฑ์อาจปรากฏในรายละเอียดการสั่งซื้อจำนวนมาก แต่ละรายการ OrderDetails ระบุหนึ่งผลิตภัณฑ์

ตัวต่อตัว

ในฐานข้อมูล "การขายผลิตภัณฑ์" ผลิตภัณฑ์อาจมีข้อมูลเสริมเพิ่มเติม เช่น รูปภาพ คำอธิบายเพิ่มเติม และความคิดเห็น การเก็บไว้ในตารางผลิตภัณฑ์ส่งผลให้เกิดพื้นที่ว่างจำนวนมาก (ในระเบียนเหล่านั้นโดยไม่มีข้อมูลเสริมเหล่านี้) นอกจากนี้ ข้อมูลขนาดใหญ่เหล่านี้อาจทำให้ประสิทธิภาพของฐานข้อมูลลดลง

แต่เราสามารถสร้างตารางอื่นได้ (เช่น ProductDetails, ProductLines หรือ ProductExtras) เพื่อจัดเก็บข้อมูลทางเลือก เรกคอร์ดจะถูกสร้างขึ้นสำหรับผลิตภัณฑ์เหล่านั้นที่มีข้อมูลเสริมเท่านั้น ตารางสองตาราง Products และ ProductDetails แสดงความสัมพันธ์แบบหนึ่งต่อหนึ่ง นั่นคือ สำหรับทุกแถวในตารางหลัก จะมีอย่างน้อยหนึ่งแถว (อาจเป็นศูนย์) ในตารางย่อย ควรใช้ productID คอลัมน์เดียวกันเป็นคีย์หลักสำหรับทั้งสองตาราง

ฐานข้อมูลบางแห่งจำกัดจำนวนคอลัมน์ที่สามารถสร้างภายในตารางได้ คุณสามารถใช้ความสัมพันธ์แบบหนึ่งต่อหนึ่งเพื่อแยกข้อมูลออกเป็นสองตาราง ความสัมพันธ์แบบหนึ่งต่อหนึ่งยังมีประโยชน์สำหรับการจัดเก็บข้อมูลที่สำคัญบางอย่างในตารางที่ปลอดภัย ในขณะที่ความสัมพันธ์ที่ไม่ละเอียดอ่อนในตารางหลัก

ระบบจัดการฐานข้อมูลเชิงสัมพันธ์ (RDMS)

ประเภทข้อมูลคอลัมน์

คุณต้องเลือกประเภทข้อมูลที่เหมาะสมสำหรับแต่ละคอลัมน์ ชนิดข้อมูลทั่วไปประกอบด้วยจำนวนเต็ม ตัวเลขทศนิยม สตริง (หรือข้อความ) วันที่/เวลา ไบนารี คอลเลคชัน (เช่น การแจงนับและการตั้งค่า)

ขั้นตอนที่ 4 - ปรับแต่งและทำให้การออกแบบเป็นมาตรฐาน

ตัวอย่างเช่น

  • เพิ่มคอลัมน์
  • สร้างตารางใหม่สำหรับข้อมูลทางเลือกโดยใช้ความสัมพันธ์แบบตัวต่อตัว
  • แบ่งโต๊ะใหญ่เป็นโต๊ะเล็กสองโต๊ะ
  • วิธีอื่นๆ

การทำให้เป็นมาตรฐาน

ใช้กฎที่เรียกว่านอร์มัลไลเซชันเพื่อตรวจสอบว่าฐานข้อมูลของคุณมีโครงสร้างที่ถูกต้องและเหมาะสมหรือไม่

First Normal Form (1NF): ตารางคือ 1NF ถ้าทุกเซลล์มีค่าเดียว ไม่ใช่รายการของค่า คุณสมบัตินี้เรียกว่าอะตอม 1NF ยังห้ามไม่ให้มีกลุ่มคอลัมน์ซ้ำ เช่น item1, item2, itemN คุณควรสร้างตารางอื่นโดยใช้ความสัมพันธ์แบบหนึ่งต่อกลุ่มแทน

Second Normal Form (2NF) - ตารางคือ 2NF หากเป็น 1NF และทุกคอลัมน์ที่ไม่ใช่คีย์จะขึ้นอยู่กับคีย์หลักทั้งหมด นอกจากนี้ หากคีย์หลักประกอบด้วยหลายคอลัมน์ คอลัมน์ที่ไม่ใช่คีย์ทุกคอลัมน์จะขึ้นอยู่กับชุดทั้งหมดและไม่ใช่ส่วนหนึ่งของคอลัมน์

ตัวอย่างเช่น คีย์หลักของตาราง OrderDetails ที่ประกอบด้วยรหัสคำสั่งซื้อและรหัสผลิตภัณฑ์ หากราคาต่อหน่วยขึ้นอยู่กับรหัสผลิตภัณฑ์เท่านั้น จะไม่ถูกเก็บไว้ในตารางรายละเอียดการสั่งซื้อ (แต่ในตารางผลิตภัณฑ์) ในทางกลับกัน หากราคาต่อหน่วยขึ้นอยู่กับผลิตภัณฑ์และคำสั่งซื้อเฉพาะ จะถูกเก็บไว้ในตารางรายละเอียดการสั่งซื้อ

รูปแบบปกติที่สาม (3NF) - ตารางคือ 3NF หากเป็น 2NF และคอลัมน์ที่ไม่ใช่คีย์ไม่แยกจากกัน กล่าวอีกนัยหนึ่ง คอลัมน์ที่ไม่ใช่คีย์จะขึ้นอยู่กับคีย์หลัก เฉพาะในคีย์หลักเท่านั้นและไม่มีอะไรอื่น ตัวอย่างเช่น สมมติว่าเรามีตารางผลิตภัณฑ์ที่มีคอลัมน์ productID (คีย์หลัก) ชื่อและราคาต่อหน่วย คอลัมน์ discountRate จะไม่อยู่ในตารางผลิตภัณฑ์หากขึ้นอยู่กับราคาต่อหน่วยซึ่งไม่ใช่ส่วนหนึ่งของคีย์หลัก

รูปแบบปกติที่สูงขึ้น: 3NF มีความไม่เพียงพอ ซึ่งนำไปสู่รูปแบบ Normal ที่สูงขึ้น เช่น Boyce/Codd Normal form, Fourth Normal Form (4NF) และ Fifth Normal Form (5NF) ซึ่งอยู่นอกเหนือขอบเขตของบทช่วยสอนนี้

ในบางครั้ง คุณอาจตัดสินใจที่จะฝ่าฝืนกฎการปรับมาตรฐานบางอย่าง ด้วยเหตุผลด้านประสิทธิภาพ (เช่น สร้างคอลัมน์ชื่อ TotalPrice ในตารางคำสั่งซื้อ ซึ่งสามารถดึงมาจากบันทึกรายละเอียดคำสั่งซื้อ) หรือเพราะผู้ใช้ร้องขอ ตรวจสอบให้แน่ใจว่าคุณตระหนักดีถึงมัน พัฒนาตรรกะในการเขียนโปรแกรมเพื่อจัดการกับมัน และจัดทำเอกสารประกอบการตัดสินใจอย่างเหมาะสม

กฎความสมบูรณ์

คุณควรใช้กฎความสมบูรณ์เพื่อตรวจสอบความสมบูรณ์ของการออกแบบของคุณ -

1. กฎความสมบูรณ์ของเอนทิตี − คีย์หลักต้องไม่มีค่า NULL มิฉะนั้น จะไม่สามารถระบุแถวได้โดยไม่ซ้ำกัน สำหรับคีย์ผสมที่ประกอบด้วยหลายคอลัมน์ ไม่มีคอลัมน์ใดที่สามารถมีค่า NULL ได้ RDBMS ส่วนใหญ่ตรวจสอบและบังคับใช้กฎนี้

2.Referential Integrity Rule - ค่าคีย์นอกแต่ละค่าต้องจับคู่กับค่าคีย์หลักในตารางที่อ้างอิง (หรือตารางพาเรนต์)

คุณสามารถแทรกแถวที่มีคีย์นอกในตารางย่อยได้ก็ต่อเมื่อมีค่าอยู่ในตารางหลักเท่านั้น

หากค่าของคีย์เปลี่ยนแปลงในตารางพาเรนต์ (เช่น แถวที่อัปเดตหรือลบ) แถวทั้งหมดที่มีคีย์นอกนี้ในตารางย่อยจะต้องได้รับการจัดการตามนั้น คุณสามารถ (ก) ไม่อนุญาตการเปลี่ยนแปลง (b) เรียงซ้อนการเปลี่ยนแปลง (หรือลบระเบียน) ในตารางย่อยตามลำดับ; (c) ตั้งค่าคีย์ในตารางย่อยเป็น NULL

RDBMS ส่วนใหญ่สามารถตั้งค่าให้ดำเนินการตรวจสอบและรับรองความสมบูรณ์ของการอ้างอิงในลักษณะที่กำหนด

3.ความสมบูรณ์ของตรรกะทางธุรกิจ - นอกจากกฎความสมบูรณ์ทั่วไปสองข้อข้างต้นแล้ว อาจมีความถูกต้อง (การตรวจสอบ) ที่เกี่ยวข้องกับตรรกะทางธุรกิจ เช่น รหัสไปรษณีย์ต้องเป็นตัวเลข 5 หลักภายในช่วงที่กำหนด วันที่และเวลาที่จัดส่งจะอยู่ในชั่วโมงทำการ ปริมาณที่สั่งซื้อต้องเท่ากับหรือน้อยกว่าปริมาณในสต็อก ฯลฯ สิ่งเหล่านี้สามารถดำเนินการกฎการยกเลิก (สำหรับคอลัมน์เฉพาะ) หรือตรรกะการเขียนโปรแกรม

การจัดทำดัชนีคอลัมน์

คุณสามารถสร้างดัชนีในคอลัมน์ที่เลือกเพื่ออำนวยความสะดวกในการค้นหาและดึงข้อมูล ดัชนีคือไฟล์ที่มีโครงสร้างซึ่งช่วยเพิ่มความเร็วในการเข้าถึงข้อมูลสำหรับ SELECT แต่อาจทำให้ INSERT, UPDATE และ DELETE ช้าลง หากไม่มีโครงสร้างดัชนี ในการประมวลผลการสืบค้น SELECT ด้วยเกณฑ์ที่ตรงกัน (เช่น SELECT * FROM Customers WHERE name='Tan Ah Teck') กลไกจัดการฐานข้อมูลจำเป็นต้องเปรียบเทียบทุกระเบียนในตาราง ดัชนีเฉพาะ (เช่น ในโครงสร้าง BTREE) สามารถเข้าถึงระเบียนได้โดยไม่ต้องเปรียบเทียบทุกระเบียน อย่างไรก็ตาม ดัชนีจะต้องสร้างใหม่ทุกครั้งที่มีการเปลี่ยนแปลงเรกคอร์ด ซึ่งส่งผลให้มีค่าใช้จ่ายที่เกี่ยวข้องกับการใช้ดัชนี

ดัชนีสามารถกำหนดได้ในคอลัมน์เดียว ชุดของคอลัมน์ (เรียกว่าดัชนีที่ต่อกัน) หรือส่วนหนึ่งของคอลัมน์ (เช่น 10 อักขระแรกของ VARCHAR(100)) (เรียกว่าดัชนีบางส่วน) . คุณสามารถสร้างดัชนีมากกว่าหนึ่งรายการในตาราง ตัวอย่างเช่น หากคุณมักจะค้นหาลูกค้าโดยใช้ชื่อลูกค้าหรือหมายเลขโทรศัพท์ คุณสามารถเพิ่มความเร็วในการค้นหาโดยสร้างดัชนีในคอลัมน์ชื่อลูกค้าและหมายเลขโทรศัพท์ RDBMS ส่วนใหญ่จะสร้างดัชนีบนคีย์หลักโดยอัตโนมัติ