ประการแรก raison d'etre (เหตุผลของการเป็น) ของฐานข้อมูลเชิงสัมพันธ์คือการสร้างแบบจำลองความสัมพันธ์ระหว่างเอนทิตี การเข้าร่วมเป็นเพียงกลไกที่เราสำรวจความสัมพันธ์เหล่านั้น แน่นอนว่าพวกเขามาในราคาเล็กน้อย แต่หากไม่มีการรวมก็ไม่มีเหตุผลที่จะมีฐานข้อมูลเชิงสัมพันธ์
ในโลกวิชาการเราได้เรียนรู้สิ่งต่างๆเช่นรูปแบบปกติต่างๆ (1, 2, 3, Boyce-Codd ฯลฯ ) และเราเรียนรู้เกี่ยวกับคีย์ประเภทต่างๆ (หลักต่างประเทศทางเลือกที่ไม่ซ้ำกัน ฯลฯ ) และวิธีการ สิ่งเหล่านี้เข้ากันได้ดีในการออกแบบฐานข้อมูล และเราเรียนรู้พื้นฐานของ SQL รวมถึงการจัดการทั้งโครงสร้างและข้อมูล (DDL & DML)
ในโลกขององค์กรโครงสร้างทางวิชาการจำนวนมากมีประสิทธิผลน้อยกว่าที่เราเคยเชื่อ ตัวอย่างที่สมบูรณ์แบบคือแนวคิดของคีย์หลัก ในทางวิชาการคือแอตทริบิวต์ (หรือชุดของแอตทริบิวต์) ที่ระบุหนึ่งแถวในตารางโดยไม่ซ้ำกัน ดังนั้นในหลาย ๆ โดเมนที่มีปัญหาคีย์หลักทางวิชาการที่เหมาะสมคือแอตทริบิวต์ 3 หรือ 4 รายการ อย่างไรก็ตามเกือบทุกคนในโลกธุรกิจสมัยใหม่ใช้จำนวนเต็มตามลำดับที่สร้างขึ้นโดยอัตโนมัติเป็นคีย์หลักของตาราง ทำไม? สองเหตุผล ประการแรกเป็นเพราะมันทำให้โมเดลสะอาดขึ้นมากเมื่อคุณย้าย FK ไปทั่วทุกที่ ประการที่สองและสำคัญที่สุดสำหรับคำถามนี้คือการดึงข้อมูลผ่านการรวมนั้นเร็วกว่าและมีประสิทธิภาพมากกว่าในจำนวนเต็มเดียวมากกว่าใน 4 คอลัมน์ varchar (ตามที่กล่าวไว้แล้วโดยไม่กี่คน)
มาเจาะลึกลงไปอีกหน่อยตอนนี้เป็นสองประเภทย่อยของฐานข้อมูลโลกแห่งความจริง ประเภทแรกคือฐานข้อมูลธุรกรรม นี่เป็นพื้นฐานสำหรับแอปพลิเคชันอีคอมเมิร์ซหรือการจัดการเนื้อหาจำนวนมากที่ขับเคลื่อนไซต์ที่ทันสมัย ด้วยฐานข้อมูลธุรกรรมคุณกำลังเพิ่มประสิทธิภาพอย่างมากสำหรับ "ปริมาณงานธุรกรรม" แอปการค้าหรือเนื้อหาส่วนใหญ่จะต้องสร้างความสมดุลระหว่างประสิทธิภาพการสืบค้น (จากตารางบางตาราง) กับประสิทธิภาพการแทรก (ในตารางอื่น ๆ ) แม้ว่าแต่ละแอปจะมีปัญหาเฉพาะทางธุรกิจที่ต้องแก้ไข
ฐานข้อมูลโลกแห่งความจริงประเภทที่สองคือฐานข้อมูลการรายงาน สิ่งเหล่านี้ถูกใช้โดยเฉพาะเพื่อรวบรวมข้อมูลทางธุรกิจและสร้างรายงานทางธุรกิจที่มีความหมาย โดยทั่วไปจะมีรูปร่างแตกต่างจากฐานข้อมูลธุรกรรมที่สร้างข้อมูลและได้รับการปรับให้เหมาะสมอย่างมากสำหรับความเร็วในการโหลดข้อมูลจำนวนมาก (ETL) และประสิทธิภาพการสืบค้นด้วยชุดข้อมูลขนาดใหญ่หรือซับซ้อน
ในแต่ละกรณีนักพัฒนาหรือ DBA จำเป็นต้องสร้างสมดุลระหว่างฟังก์ชันการทำงานและเส้นโค้งประสิทธิภาพอย่างรอบคอบและยังมีเทคนิคการเพิ่มประสิทธิภาพมากมายทั้งสองด้านของสมการ ใน Oracle คุณสามารถทำสิ่งที่เรียกว่า "แผนอธิบาย" เพื่อที่คุณจะได้เห็นวิธีแยกวิเคราะห์และดำเนินการสืบค้นโดยเฉพาะ คุณกำลังต้องการเพิ่มการใช้ดัชนีอย่างเหมาะสมของ DB no-no ที่น่ารังเกียจอย่างหนึ่งคือการใส่ฟังก์ชันไว้ในที่ซึ่งส่วนคำสั่งของแบบสอบถาม เมื่อใดก็ตามที่คุณทำเช่นนั้นคุณรับประกันได้ว่า Oracle จะไม่ใช้ดัชนีใด ๆ ในคอลัมน์นั้น ๆ และคุณจะเห็นการสแกนตารางทั้งหมดหรือบางส่วนในแผนอธิบาย นั่นเป็นเพียงตัวอย่างหนึ่งของวิธีการเขียนข้อความค้นหาที่ช้าและไม่มีส่วนเกี่ยวข้องกับการรวม
และในขณะที่เรากำลังพูดถึงการสแกนตารางสิ่งเหล่านี้ส่งผลต่อความเร็วในการสืบค้นตามสัดส่วนกับขนาดของตารางอย่างชัดเจน การสแกนตารางเต็ม 100 แถวนั้นไม่สามารถสังเกตเห็นได้ เรียกใช้แบบสอบถามเดียวกันบนตารางที่มีแถว 100 ล้านแถวและคุณจะต้องกลับมาในสัปดาห์หน้าเพื่อรับคืน
ลองพูดคุยเกี่ยวกับการทำให้เป็นมาตรฐานเป็นเวลาหนึ่งนาที นี่เป็นอีกหนึ่งหัวข้อวิชาการเชิงบวกที่สามารถทำให้เครียดมากเกินไป เวลาส่วนใหญ่ที่เราพูดถึงการทำให้เป็นมาตรฐานเราหมายถึงการกำจัดข้อมูลที่ซ้ำกันโดยการใส่ลงในตารางของตัวเองและย้าย FK ผู้คนมักจะข้ามสิ่งที่ต้องพึ่งพาทั้งหมดที่อธิบายโดย 2NF และ 3NF และในกรณีที่รุนแรงเป็นไปได้อย่างแน่นอนที่จะมีฐานข้อมูล BCNF ที่สมบูรณ์แบบซึ่งมีขนาดมหึมาและเป็นสัตว์ร้ายที่สมบูรณ์ในการเขียนโค้ดเนื่องจากมันถูกทำให้เป็นมาตรฐาน
แล้วเราจะสมดุลตรงไหน? ไม่มีคำตอบเดียวที่ดีที่สุด คำตอบที่ดีกว่าทั้งหมดมักจะเป็นการประนีประนอมระหว่างความง่ายในการดูแลโครงสร้างการบำรุงรักษาข้อมูลและความง่ายในการสร้าง / บำรุงรักษาโค้ด โดยทั่วไปยิ่งข้อมูลซ้ำกันน้อยเท่าไหร่ก็ยิ่งดีเท่านั้น
แล้วทำไมบางครั้งการเข้าร่วมจึงช้า? บางครั้งการออกแบบเชิงสัมพันธ์ที่ไม่ดี บางครั้งการจัดทำดัชนีก็ไม่ได้ผล บางครั้งปัญหาเกี่ยวกับปริมาณข้อมูล บางครั้งก็เป็นข้อความค้นหาที่เขียนขึ้นอย่างน่ากลัว
ขออภัยสำหรับคำตอบที่ยืดยาวเช่นนี้ แต่ฉันรู้สึกว่าจำเป็นที่จะต้องให้บริบทที่เหมาะสมกับความคิดเห็นของฉันมากกว่าแค่การตอบสนองแบบ 4-bullet