Structure Your Database
บทความนี้เกี่ยวกับแนวปฏิบัติที่ดีที่สุดสำหรับการจัดทำข้อมูล JSON ในฐานข้อมูล Firebase Realtime Database สิ่งสำคัญคือต้องวางแผนก่อนว่าจะบันทึกข้อมูลอย่างไร และดึงข้อมูลในภายหลังเพื่อให้ง่ายต่อการใช้งานที่สุดโครงสร้างฐานข้อมูลแบบ Json Tree
-ข้อมูลเก็บไว้เป็น JSON Object ให้เข้าใจง่ายๆเลยให้เรียกว่า Json Tree ก็ได้
-ไม่มี Tables หรือ Records เหมือน SQL Database
ตัวอย่างการเก็บ ข้อมูลอย่าง user profile
{
"users": {
"alovelace": {
"name": "Ada Lovelace",
"contacts": { "ghopper": true },
},
"ghopper": { ... },
"eclarke": { ... }
}
}
เวลาจะใช้งาน ก็เซ็ตพาธประมาณนี้
/users/$uid
Flatten data structures
ถ้าข้อมูลถูกแบ่งออกเป็นพาธที่แยกกัน (denormalization)
การออกแบบแบบ Flatten data structures สามารถดาวน์โหลดได้อย่างมีประสิทธิภาพ
{
// chats = ให้คิดถึงข้อมูลที่แสดงใน List ของแต่ละห้อง
"chats": {
"one": {
"title": "Historical Tech Pioneers",
"lastMessage": "ghopper: Relay malfunction found. Cause: moth.",
"timestamp": 1459361875666
},
"two": { ... },
"three": { ... }
},
// member = สมาชิกในห้องสนทนา
"members": {
"one": {
"ghopper": true,
"alovelace": true,
"eclarke": true
},
"two": { ... },
"three": { ... }
},
// message = ข้อความในห้องสนทนา
"messages": {
"one": {
"m1": {
"name": "eclarke",
"message": "The relay seems to be malfunctioning.",
"timestamp": 1459361875337
},
"m2": { ... },
"m3": { ... }
},
"two": { ... },
"three": { ... }
}
}
Create data that scales
ตัวอย่างการแสดงรายการกลุ่มที่ผู้ใช้เป็นเจ้าของและดึงข้อมูลเฉพาะสำหรับกลุ่มเหล่านั้น
! หลีกเลี่ยงการซ้อนข้อมูลแบบนี้ (ในกรณีที่ message มีจำนวนมากๆ)
{
"chats": {
"one": {
"title": "Historical Tech Pioneers",
"messages": {
"m1": { "sender": "ghopper", "message": "Relay malfunction found. Cause: moth." },
"m2": { ... },
// a very long list of messages
}
},
"two": { ... }
}
}
Ref : https://firebase.google.com/docs/database/android/structure-data