ผมคิดว่าเราทุกคนคุ้นเคยกับการฟื้นฟูฐานข้อมูล
คำถามของฉันคือ: อะไรคือแนวทางที่คุณใช้เมื่อคุณต้องการทำให้ตารางผิดปกติ?
ผมคิดว่าเราทุกคนคุ้นเคยกับการฟื้นฟูฐานข้อมูล
คำถามของฉันคือ: อะไรคือแนวทางที่คุณใช้เมื่อคุณต้องการทำให้ตารางผิดปกติ?
คำตอบ:
ทำให้เป็นปกติเมื่อใช้งาน OLAP ให้ทำมาตรฐานเมื่อ OLTP (จากบทความที่เชื่อมโยงภายใต้หัวข้อการทำให้เป็นปกติ)
ฐานข้อมูลที่มีไว้สำหรับการประมวลผลธุรกรรมออนไลน์ (OLTP) โดยปกติแล้วจะเป็นมาตรฐานมากกว่าฐานข้อมูลที่มีไว้สำหรับการประมวลผลการวิเคราะห์ออนไลน์ (OLAP) แอปพลิเคชัน OLTP มีลักษณะเป็นธุรกรรมขนาดเล็กจำนวนมากเช่นการปรับปรุงบันทึกการขายที่เคาน์เตอร์ชำระเงินซูเปอร์มาร์เก็ต ความคาดหวังคือแต่ละธุรกรรมจะออกจากฐานข้อมูลในสถานะที่สอดคล้องกัน ในทางตรงกันข้ามฐานข้อมูลที่มีไว้สำหรับการดำเนินการ OLAP นั้นส่วนใหญ่จะเป็นฐานข้อมูล "อ่านส่วนใหญ่" แอปพลิเคชัน OLAP มักจะดึงข้อมูลประวัติที่สะสมมาเป็นระยะเวลานาน สำหรับฐานข้อมูลดังกล่าวข้อมูลที่ซ้ำซ้อนหรือ "denormalized" อาจช่วยให้แอปพลิเคชันระบบธุรกิจอัจฉริยะ ตารางมิติในสคีมาของดาวมักจะมีข้อมูลที่ผิดปกติ ข้อมูลที่ผิดปกติหรือซ้ำซ้อนจะต้องได้รับการควบคุมอย่างรอบคอบในระหว่างการแยก, การแปลง, การโหลด (ETL) และผู้ใช้ไม่ควรได้รับอนุญาตให้ดูข้อมูลจนกว่าจะอยู่ในสถานะที่สอดคล้องกัน ทางเลือกปกติของสคีตาร์คือสคีเกล็ดหิมะ ในหลายกรณีความต้องการ denormalization ได้จางหายไปเมื่อคอมพิวเตอร์และซอฟต์แวร์ RDBMS มีประสิทธิภาพมากขึ้น แต่เนื่องจากปริมาณข้อมูลที่เพิ่มขึ้นโดยทั่วไปพร้อมกับประสิทธิภาพของฮาร์ดแวร์และซอฟต์แวร์ฐานข้อมูล OLAP มักจะยังคงใช้ schema แบบปกติ
Denormalization ยังใช้เพื่อปรับปรุงประสิทธิภาพของคอมพิวเตอร์ขนาดเล็กเช่นเดียวกับในเครื่องบันทึกเงินสดและอุปกรณ์พกพาเนื่องจากสิ่งเหล่านี้อาจใช้ข้อมูลเพื่อการค้นหาเท่านั้น (เช่นการค้นหาราคา) การทำให้เป็นปกติอาจใช้เมื่อไม่มี RDBMS สำหรับแพลตฟอร์ม (เช่น Palm) หรือไม่มีการเปลี่ยนแปลงข้อมูลและการตอบสนองที่รวดเร็วเป็นสิ่งสำคัญ
ทำให้เป็นปกติจนกว่าจะเจ็บและทำให้เป็นปกติจนกว่ามันจะทำงาน (เช่น: ประสิทธิภาพเป็นที่ยอมรับ) :)
เหตุผลหนึ่งที่อาจเป็นไปได้ที่จะใช้การควบคุมความผิดปกติคือหากคุณสามารถใช้ข้อ จำกัด ด้านความสมบูรณ์ของข้อมูลที่ไม่สามารถทำได้ SQL DBMS ส่วนใหญ่มีการสนับสนุนที่ จำกัด อย่างมากสำหรับข้อ จำกัด หลายตาราง ใน SQL บางครั้งวิธีเดียวที่มีประสิทธิภาพในการใช้ข้อ จำกัด บางอย่างคือเพื่อให้แน่ใจว่าแอ็ตทริบิวต์ที่เกี่ยวข้องในข้อ จำกัด นั้นมีอยู่ทั้งหมดในตารางเดียวกัน - แม้ว่าการทำให้มาตรฐานกลับเป็นมาตรฐาน
การควบคุมความผิดปกติหมายถึงกลไกที่นำมาใช้เพื่อให้แน่ใจว่าไม่สามารถเกิดความไม่สอดคล้องกันได้เนื่องจากข้อมูลซ้ำซ้อน ค่าใช้จ่ายของการควบคุมพิเศษเหล่านี้และความเสี่ยงของข้อมูลที่ไม่สอดคล้องกันจะต้องได้รับการพิจารณาเมื่อตัดสินใจว่า
เหตุผลทั่วไปอีกประการสำหรับการทำให้เป็นปกติคือการอนุญาตให้มีการเปลี่ยนแปลงโครงสร้างการจัดเก็บหรืออนุญาตการเพิ่มประสิทธิภาพทางกายภาพอื่น ๆ ที่ DBMS จะไม่อนุญาต ตามหลักการของความเป็นอิสระของข้อมูลทางกายภาพ DBMS ควรจะมีวิธีการกำหนดค่าโครงสร้างการจัดเก็บข้อมูลภายในโดยไม่จำเป็นต้องเปลี่ยนการแสดงตรรกะของข้อมูลในฐานข้อมูล น่าเสียดายที่ DBMSs จำนวนมากมีข้อ จำกัด อย่างมากเกี่ยวกับตัวเลือกการใช้งานทางกายภาพที่มีอยู่สำหรับสคีมาฐานข้อมูลที่กำหนด พวกเขามีแนวโน้มที่จะประนีประนอมความเป็นอิสระของฐานข้อมูลทางกายภาพโดยการสนับสนุนการใช้งานแบบจำลองเชิงตรรกะที่ต้องการเท่านั้น
มันควรจะชัดเจน แต่ก็ยังต้องมีการกล่าวว่า: ในทุกกรณีมันเป็นเพียงการเปลี่ยนแปลงในคุณสมบัติการใช้งานทางกายภาพที่สามารถกำหนดประสิทธิภาพ - คุณสมบัติเช่นโครงสร้างข้อมูลภายในไฟล์การทำดัชนีฮาร์ดแวร์และอื่น ๆ การทำให้เป็นมาตรฐานและการทำให้เป็นปกตินั้นไม่เกี่ยวกับประสิทธิภาพหรือการเพิ่มประสิทธิภาพการจัดเก็บ
ทำให้เป็นปกติถ้าคุณเข้าถึงข้อมูลที่คำนวณบ่อยตามที่แนะนำในคำตอบสำหรับคำถามนี้ ค่าใช้จ่ายในการจัดเก็บและบำรุงรักษาข้อมูลที่คำนวณได้มักจะน้อยกว่าค่าใช้จ่ายในการคำนวณซ้ำแล้วซ้ำอีกหากโปรไฟล์การโหลดของคุณอ่านยาก
ฉันทำผิดปกติเป็นประจำเพื่อให้สามารถบังคับใช้ความถูกต้องของข้อมูลด้วยข้อ จำกัด ตัวอย่างหนึ่งคือคำถามล่าสุดในไซต์นี้ - ฉันทำซ้ำคอลัมน์ในอีกตารางหนึ่งเพื่อให้ฉันสามารถใช้ข้อ จำกัด การตรวจสอบเพื่อเปรียบเทียบกับคอลัมน์อื่น ตัวอย่างของเทคนิคนี้ก็คือการโพสต์บล็อกของฉัน
คุณไม่สามารถใช้ข้อ จำกัด ของ CHECK เพื่อเปรียบเทียบคอลัมน์ในแถวที่แตกต่างกันหรือในตารางที่แตกต่างกันยกเว้นว่าคุณตัดการทำงานดังกล่าวในรูปแบบ UDF แบบสเกลาร์ที่เรียกใช้ในรูปแบบข้อ จำกัด การตรวจสอบ ถ้าคุณต้องการเปรียบเทียบคอลัมน์ในแถวที่แตกต่างกันหรือในตารางที่แตกต่างกันเพื่อบังคับใช้กฎธุรกิจ ตัวอย่างเช่นสมมติว่าคุณรู้เวลาทำงานของแพทย์และคุณต้องการตรวจสอบให้แน่ใจว่าการนัดหมายทั้งหมดพอดีภายในเวลาทำงานหรือไม่ แน่นอนคุณสามารถใช้ทริกเกอร์หรือขั้นตอนการจัดเก็บเพื่อใช้กฎธุรกิจนี้ แต่ทริกเกอร์หรือขั้นตอนการจัดเก็บไม่สามารถรับประกันได้ 100% ว่าข้อมูลทั้งหมดของคุณสะอาด - ใครบางคนสามารถปิดการใช้งานหรือปล่อยไก ข้อมูลสกปรกและเปิดใช้งานหรือสร้างทริกเกอร์ของคุณใหม่ นอกจากนี้บางคนสามารถปรับเปลี่ยนตารางของคุณโดยตรงโดยข้ามขั้นตอนที่เก็บไว้
ให้ฉันสาธิตวิธีการใช้กฎธุรกิจนี้โดยใช้ข้อ จำกัด FK และ CHECK เท่านั้นซึ่งจะรับประกันได้ว่าข้อมูลทั้งหมดเป็นไปตามกฎเกณฑ์ทางธุรกิจตราบใดที่ข้อ จำกัด ทั้งหมดเชื่อถือได้
อีกตัวอย่างหนึ่งคือวิธีการบังคับว่าช่วงเวลาไม่มีช่องว่างและไม่มีการทับซ้อน
Fulfillable
ตารางที่มีรายละเอียดทั้งหมดในแต่ละรายการ Fulfillable และแล้วก็มีเป็นFulfillableQueue
ตารางที่ใช้คิวใน SQL Server เฉพาะ Fulfillables ที่มีค่าคงที่เท่านั้นที่StateID
อาจอยู่ในคิว StateID
อยู่ในFulfillable
ตาราง แต่ฉันทำซ้ำFulfillableQueue
และบังคับใช้ข้อ จำกัด นี้ด้วยFOREIGN KEY
และCHECK
ข้อ จำกัด