Everything Jingle Bell แบบครอบจักวาล MongoDB [ตอนที่ 3: การออกแบบ Schema]

หลังจากตอนที่ 2.2 link เรื่องการจัดการข้อมูลที่เป็นแบบ Array ตอนนี้เราจะมาดูกันต่อในเรื่องการออกแบบโครงสร้างของฐานข้อมูล (Schema) ซึ่งถ้าใครเคยทำ MySQL หรือฐานข้อมูลแบบ Relational มาแล้วก็จะมีความรู้เรื่องการออกแบบฐานข้อมูลมาพอสมควร แต่สำหรับคนที่ยังไม่เป็นเลย หรือยังไม่คล่องผมก็แนะนำว่าคุณก็สามารถอ่านได้เหมือนกันเพราะหลักการมันไม่ได้หนีห่างกันไปไหนครับ

Schema

การออกแบบ Schema ก็คือการระบุว่าในแต่ละ Collection( Table if MySQL) จะมีฟิลด์อะไรบ้าง และแต่ละฟิลด์เก็บข้อมูลแบบไหนนั่นเองครับ โดยในแต่ละภาษาจะมี Class ORM ให้ทำการประกาศ Schema ได้อยู่แล้วอย่าง Spring Boot ก็จะมีวิธีการแบบนี้ link หรือใครทำ NodeJs ก็จะรู้จักกันดีคือ Mongoose

 

One-To-One (1:1)

 

เราสามารถใช้ความสามารถของ JSON (เพราะ mongodb เป็นการเก็บข้อมูลโดยเอาฟอร์แมตมาจาก JSON ) เข้ามาเก็บข้อมูลได้ด้วยแบบนี้ โดยการทำแบบนี้เขาเรียกว่าการทำ Embedding

 

foreign key or Relationship 

 

One-To-Many (1:N)

ปกติการออกแบบ MySQL เราะจะเอา ID ของ foreign key ไปเก็บใน table ที่เราต้องการเก็บข้อมูลแบบ 1:N ตัวอย่างเช่น

 

ที่นี้ถ้าเป็น MongoDB ละ ก็แบบนี้ ซึ่งแบบนี้ก็ไม่ต่างไรกับการทำ MySQL สักนิด

 

งั่นผมแนะนำให้เอาความสามารถของ JSON มาใช้ให้เกิดประโยชน์ดีกว่าซึ่ง MongoDB เองก็แนะนำให้ทำแบบนี้ คือจับเอาข้อมูลลงไปใน Array (Embedding) สะเลยพอจะดึงมาก็ query มันครั่งเดียวได้ข้อมูลครบเลย

ข้อดี มันทำให้เราไม่ต้อง query แยกกันระหว่างสอง table เพื่อดึงเอาข้อมูลที่เป็น Relation กัน ไม่ต้องสร้าง หลายๆ table

ข้อเสีย คือเราไม่สามารถเข้าถึงข้อมูลแค่บางชุดเพราะข้อมูลจะถูกส่งกลับมาทั่งหมด ดังนั่นจึงเป็นหน้าที่ client หรือ server เองต้องจัดการ Logic ตรงนี้เอง

 

หรือเราจะทำการแยก Table แล้วใช้ foreign key ก็ได้เหมือนกันแบบนี้ และก็ยังใช้ Array มันเป็นการเก็บข้อมูล

 

สำหรับการออกแบบ Schema พื้นฐานก็มีเท่านี้ครับ อธิบายเพิ่มเติมสำหรับคำว่า Embedding คือการเก็บข้อมูลแบบ key:value ในรูป { } ไว้ เช่น name: { fname :  “John”,  lname: “Doe” } เราเรียกว่า Embedding และ Array เองก็ทำ Embedding ได้คือ name: [{  .. }, { .. }, { .. }] …………… จบแล้วครับ แล้วผมกันใหม่ตอนที่ 4 วิธีการทำ Index นะครับ

Facebook Comments