การเชื่อมโยงตารางในฐานข้อมูลเชิงสัมพันธ์

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

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



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

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

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

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

การเชื่อมโยง: ความสัมพันธ์ระหว่างแบบจำลอง

โมเดลแหล่งที่มา: โมเดลที่กำหนดการเชื่อมโยง

โมเดลเป้าหมาย: โมเดลที่มีการกำหนดการเชื่อมโยง

Foreign key: คอลัมน์ฐานข้อมูลที่มีการอ้างอิงไปยังตารางอื่น

คีย์เป้าหมาย: คอลัมน์ฐานข้อมูลที่คีย์ต่างประเทศอ้างอิง

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

สมาคมแบบหนึ่งต่อหนึ่ง

การเชื่อมโยงประเภทแรกคือการเชื่อมโยงแบบหนึ่งต่อหนึ่ง ที่นี่ สองรุ่นเชื่อมต่อกันด้วยคีย์ต่างประเทศอันเดียว

เป็นของ

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

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

กุญแจเป้าหมาย

คีย์เป้าหมายคือคอลัมน์ในโมเดลเป้าหมายที่คอลัมน์คีย์ต่างประเทศในโมเดลต้นทางชี้ไป ตามค่าเริ่มต้น คีย์เป้าหมายสำหรับความสัมพันธ์เป็นของ To จะเป็นคีย์หลักของโมเดลเป้าหมาย

มีอย่างใดอย่างหนึ่ง

การเชื่อมโยงประเภทที่สองคือการเชื่อมโยงแบบมีหนึ่งการเชื่อมโยง สิ่งนี้จะสร้างการเชื่อมโยงซึ่งมีคีย์ต่างประเทศสำหรับความสัมพันธ์อยู่บนโมเดลเป้าหมาย ดังนั้นการสร้างความสัมพันธ์แบบหนึ่งต่อหนึ่ง

ความแตกต่างระหว่าง Has One และ Belongs To คืออะไร? ลองใช้ตัวอย่างผู้ใช้และโพสต์จากก่อนหน้านี้เพื่อดูความแตกต่าง เมื่อเราเชื่อมโยงไปยังโมเดลในภาคต่อ พวกมันคือปารีสของโมเดลต้นทางและเป้าหมาย

หากเรากำหนดโพสต์เป็นแหล่งที่มาและผู้ใช้เป็นเป้าหมาย จะมีลักษณะดังนี้:

post.belongsTo (ผู้ใช้);

or

post.hasOne(ผู้ใช้);

หรือถ้าเรากำหนด User เป็นแหล่งที่มาและ Post เป็นเป้าหมาย ก็จะมีลักษณะดังนี้:

User.belongsTo (โพสต์);

or

User.hasOne(โพสต์);

หนึ่งต่อหลายสมาคม:

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

hasMany หรือเป็นของToMany

hasMany สร้างการเชื่อมโยงซึ่งมี คีย์ต่างประเทศ สำหรับความสัมพันธ์อยู่ใน โมเดลเป้าหมาย สร้างความสัมพันธ์แบบหนึ่งต่อกลุ่ม

BelongsToMany สร้างการเชื่อมโยงโดยมี คีย์ต่างประเทศสองคีย์ บนตารางที่สาม สร้างความสัมพันธ์แบบกลุ่มต่อกลุ่ม

เมื่อเราเริ่มสร้างไซต์ของเรา การตรวจสอบให้แน่ใจว่าเราใช้การเชื่อมโยงที่ถูกต้องระหว่างตารางจะช่วยให้มั่นใจได้ว่าเนื้อหาของเราอัปเดตและแสดงอย่างถูกต้อง

หากต้องการดูว่าการเชื่อมโยงเหล่านี้มีลักษณะอย่างไรในโปรแกรมแก้ไขข้อความของคุณและในโปรแกรมเช่น postico ฉันได้อัปโหลดภาพหน้าจอสองสามภาพเพื่อใช้อ้างอิง

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