การออกแบบโครงสร้างฐานข้อมูล Firebase Realtime Database

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