เหตุใดจึงต้องใช้การเชื่อมตาราง (ทบทวนโมเดลเชิงสัมพันธ์)
ทบทวนโมเดลเชิงสัมพันธ์ ตารางที่ทำให้เป็นบรรทัดฐาน คีย์ต่างประเทศ และเหตุใด JOIN จึงเป็นสะพานสำหรับประกอบข้อมูลจากหลายตารางกลับเข้าด้วยกัน
เหตุใดจึงต้องใช้การเชื่อมตาราง (ทบทวนโมเดลเชิงสัมพันธ์) เป็นบทเรียน SQL Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน SQL Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส SQL Academy มีบทเรียนทั้งหมด 4 บทเรียน
การทำให้เป็นมาตรฐานในภาพเดียว
แทนที่จะทำซ้ำข้อมูล คุณจะแบ่งข้อมูลออกเป็นหลายตาราง:
users— id, name, emailorders— id, user_id, total
แต่ละคำสั่งซื้อจะอ้างอิงผู้ใช้ด้วยรหัส ไม่ใช่เก็บชื่อและอีเมลของผู้ใช้ซ้ำอีกครั้ง
เหตุผลที่ต้องทำให้เป็นมาตรฐาน
ประโยชน์:
- ไม่มีข้อมูลซ้ำ — เปลี่ยนอีเมลของผู้ใช้ได้ในที่เดียว
- ตารางมีขนาดเล็กลง — อัตราการพบข้อมูลในแคชดีขึ้น
- ข้อจำกัดช่วยบังคับใช้ความสัมพันธ์
คีย์ต่างประเทศกำหนดความเชื่อมโยง
ความเชื่อมโยงจะประกาศด้วย FOREIGN KEY:
CREATE TABLE orders (
id BIGSERIAL PRIMARY KEY,
user_id BIGINT NOT NULL REFERENCES users(id),
total NUMERIC(10,2) NOT NULL
);ประกอบข้อมูลกลับด้วย JOIN
หากต้องการแสดงชื่อผู้ใช้ในแต่ละคำสั่งซื้อ คุณต้อง JOIN ตารางกลับเข้าด้วยกัน:
SELECT o.id, o.total, u.full_name, u.email
FROM orders o
JOIN users u ON u.id = o.user_id
ORDER BY o.id;แนวคิดในใจ: ผลคูณคาร์ทีเซียนที่ผ่านการกรอง
ในเชิงแนวคิด JOIN จะ:
- สร้างผลคูณคาร์ทีเซียนของสองตาราง โดยจับคู่ทุกแถวของ A กับทุกแถวของ B
- เก็บเฉพาะคู่ที่เงื่อนไข ON เป็น TRUE
ในทางปฏิบัติ ฐานข้อมูลจะใช้อัลกอริทึมการเชื่อมแบบแฮช แบบผสาน หรือแบบวนซ้อน แต่ผลลัพธ์เหมือนกัน
หนึ่งต่อหลาย
ผู้ใช้หนึ่งคนสามารถมีคำสั่งซื้อหลายรายการได้ ฝั่งที่มีหลายรายการจะเป็นผู้เก็บคีย์ต่างประเทศ
-- Each order row points back to its user:
SELECT u.email, COUNT(o.id) AS order_count
FROM users u
LEFT JOIN orders o ON o.user_id = u.id
GROUP BY u.id, u.email;หลายต่อหลายผ่านตารางเชื่อมโยง
แท็ก ↔ โพสต์: ให้เพิ่มตารางที่สาม:
CREATE TABLE posts (id BIGSERIAL PRIMARY KEY, title TEXT);
CREATE TABLE tags (id BIGSERIAL PRIMARY KEY, name TEXT);
CREATE TABLE post_tags (
post_id BIGINT REFERENCES posts(id),
tag_id BIGINT REFERENCES tags(id),
PRIMARY KEY (post_id, tag_id)
);การสอบถามความสัมพันธ์แบบหลายต่อหลาย
ใช้การเชื่อมสองครั้งเพื่อนำทุกอย่างมารวมกัน:
SELECT p.title, t.name
FROM posts p
JOIN post_tags pt ON pt.post_id = p.id
JOIN tags t ON t.id = pt.tag_id
WHERE t.name = 'sql';เมื่อใดควรลดการทำให้เป็นมาตรฐาน
การเก็บข้อมูลซ้ำอาจใช้เพื่อเพิ่มประสิทธิภาพในบางกรณี เช่น การแคชผลรวมที่คำนวณไว้ คอลัมน์สำหรับการค้นหาข้อความทั้งหมด หรือมุมมองที่จัดเก็บผลลัพธ์ไว้ เริ่มต้นด้วยโครงสร้างที่ทำให้เป็นมาตรฐาน แล้วค่อยลดการทำให้เป็นมาตรฐานเมื่อมีข้อมูลจากการวัดประสิทธิภาพ
JOIN เทียบกับคำสั่งสอบถามย่อย
คำสั่งสอบถามที่ใช้ JOIN หลายรายการสามารถเขียนเป็นคำสั่งสอบถามย่อยได้ และในทางกลับกัน ให้เลือกแบบที่อ่านเข้าใจได้ชัดเจนกว่า ตัววางแผนสมัยใหม่มักสร้างแผนการทำงานเดียวกัน
คีย์ต่างประเทศไม่ได้ถูกบังคับใช้โดยอัตโนมัติ
คุณต้องประกาศคีย์เหล่านี้ด้วย REFERENCES แม้จะมีข้อจำกัด FK แล้ว การสร้างดัชนีบนคอลัมน์ FK ก็ยังเป็นหน้าที่ของ YOUR โปรดประกาศดัชนีอย่างชัดเจนเพื่อประสิทธิภาพในการเชื่อมตาราง
สรุป
การเชื่อมตารางช่วยประกอบข้อมูลที่เคยแยกออกจากกันเพื่อรักษาความถูกต้องกลับเข้าด้วยกัน
- คีย์ต่างประเทศใช้ประกาศความเชื่อมโยง
- JOIN ย้อนการทำให้เป็นมาตรฐานในขณะสอบถามข้อมูล
- ความสัมพันธ์หนึ่งต่อหลายใช้ FK ที่ฝั่งหลาย ส่วนความสัมพันธ์หลายต่อหลายใช้ตารางเชื่อมโยง
ตรวจสอบความเข้าใจ
ในความสัมพันธ์หนึ่งต่อหลายระหว่าง users กับ orders ตารางใดเป็นผู้เก็บคอลัมน์คีย์ต่างประเทศ
คำถามที่พบบ่อย
บทเรียน “เหตุใดจึงต้องใช้การเชื่อมตาราง (ทบทวนโมเดลเชิงสัมพันธ์)” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “เหตุใดจึงต้องใช้การเชื่อมตาราง (ทบทวนโมเดลเชิงสัมพันธ์)” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส SQL Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส SQL Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “เหตุใดจึงต้องใช้การเชื่อมตาราง (ทบทวนโมเดลเชิงสัมพันธ์)”
ทบทวนโมเดลเชิงสัมพันธ์ ตารางที่ทำให้เป็นบรรทัดฐาน คีย์ต่างประเทศ และเหตุใด JOIN จึงเป็นสะพานสำหรับประกอบข้อมูลจากหลายตารางกลับเข้าด้วยกัน คุณปฏิบัติ SQL Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน SQL Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน SQL Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “เหตุใดจึงต้องใช้การเชื่อมตาราง (ทบทวนโมเดลเชิงสัมพันธ์)” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน SQL Academy นี้ได้ไหม
ได้ บทเรียน SQL Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- เหตุใดจึงต้องใช้การเชื่อมตาราง (ทบทวนโมเดลเชิงสัมพันธ์)
- กลไกของ INNER JOIN
- LEFT/RIGHT JOIN และการเชื่อมตาราง OUTER
- การเชื่อมตารางเข้ากับตัวเองและชื่อแทน