ออกแบบ Database ยังไง มี Best Practice หรือ Pattern อะไรบ้าง ?

พอดีได้เห็นคำถามในหลายกลุ่มเลย เช่น สมาคมโปรแกรมเมอร์ไทย หรือ .NET Thailand แนวๆจะออกแบบ Database ยังไง มี Best Practice หรือ Pattern อะไรบ้าง ผมมีตอบๆไปนะ เลยคิดว่าเขียน Blog สรุปดีกว่าครับ

  1. มาตกลงกันก่อนว่าเก็บอะไร มาจากตัว requirement พวก Noun จะสื่อถึง Entity ที่ต้องเก็บอยู่แล้วครับ
  2. พวกระบบที่มีรูปแบบ เช่น Course / E-commerce / Inventory มักจะมี pattern คล้ายๆกัน ดูจากอันนี้ได้ครับ มีจดไว้นิดหน่อย ลองดู
  3. คุยกัน ทำข้อตกลงกลาง ยิ่งคนเยอะ มันจะมีเรื่องเดียวกัน แต่คนไม่รู้ ต่างคนทำออกมาเพื่อเก็บของแบบเดียวกันนี่แหละ ของผม 20 คน มันมีเคสนี้จริงๆ พอไปไล่ถามเก็บอะไร ตัวอย่างข้อมูล มันอันเดวกัน 5555
  4. normalization ให้ได้ 3NF
  5. อันไหนที่ต้อง read บ่อยๆ ทำ report ถอยลงมา denormalization จะได้ ลด join ครับ ลองดู Blog นี้ดูครับ
  6. อื่นๆ ที่พอนึกได้ Design Technique for Enterprise Transaction Design
  7. จริงๆแล้ว งานที่เราทำอยู่ มันไม่จำเป็นต้องอยู่ในรูปแบบของ RDBMS ก็ได้นะ ถ้าไม่ใช้งานที่ต้องการ ACID
    ไปลองทำเป็นแบบ Document ไหม (NoSQL แบบนึง)

Recap ACID

- Atomicity - transaction is treated as a single unit ทำสำเร็จจบ ถ้าไม่ ตี Fail
- Consistency - ใน Single Unit มันต้องสอดคล้อง โอนจาก A -> B เงินหัก A ไปเพิ่ม B เก็บตาม data type / Schema
- Isolation - concurrent transactions โอนเงินพร้อมกัน มันไม่ต้องเข้ามั่ว / หลบ race condition
- Durability - อะไรที่ Commit ไปแล้วสถานะคงเดิม เช่น ปิด DB ไปเปิดมาก็เหมือนเดิม

Type of Database ตามนี้เลยครับ

ถ้าเอาตามเทรนลองถาม ChatGPT เพิ่มเติมได้ครับ แต่ตอนนี้ผมหนีมาอีกค่าย claude ai ตัวไม่ดังบ้าง


Discover more from naiwaen@DebuggingSoft

Subscribe to get the latest posts sent to your email.