พอดีได้เห็นคำถามในหลายกลุ่มเลย เช่น สมาคมโปรแกรมเมอร์ไทย หรือ .NET Thailand แนวๆจะออกแบบ Database ยังไง มี Best Practice หรือ Pattern อะไรบ้าง ผมมีตอบๆไปนะ เลยคิดว่าเขียน Blog สรุปดีกว่าครับ
- มาตกลงกันก่อนว่าเก็บอะไร มาจากตัว requirement พวก Noun จะสื่อถึง Entity ที่ต้องเก็บอยู่แล้วครับ
- พวกระบบที่มีรูปแบบ เช่น Course / E-commerce / Inventory มักจะมี pattern คล้ายๆกัน ดูจากอันนี้ได้ครับ มีจดไว้นิดหน่อย ลองดู
- Blog: Streamlined Object Modeling / Example
- Schema.org - Schema.org - มีตัวอย่างเหมือนกัน เช่นPerson - Schema.org Type
- คุยกัน ทำข้อตกลงกลาง ยิ่งคนเยอะ มันจะมีเรื่องเดียวกัน แต่คนไม่รู้ ต่างคนทำออกมาเพื่อเก็บของแบบเดียวกันนี่แหละ ของผม 20 คน มันมีเคสนี้จริงๆ พอไปไล่ถามเก็บอะไร ตัวอย่างข้อมูล มันอันเดวกัน 5555
- normalization ให้ได้ 3NF
- อันไหนที่ต้อง read บ่อยๆ ทำ report ถอยลงมา denormalization จะได้ ลด join ครับ ลองดู Blog นี้ดูครับ
- อื่นๆ ที่พอนึกได้ Design Technique for Enterprise Transaction Design
- จริงๆแล้ว งานที่เราทำอยู่ มันไม่จำเป็นต้องอยู่ในรูปแบบของ 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.