ในการทำระบบงานต่างๆ ไม่ว่าจะระบบเล็ก หรือเป็นระบบใหญ่ขึ้นมาสักระบบนึง แน่นอนเลยว่าข้อมูลย่อมมีมหาศาลมากมาย
แต่เราจำเป็นไหม ? ว่าจะต้องทำหน้าจอขึ้นมา เพื่อจัดการกับข้อมูลเหล่านี้
คำตอบ คือ ไม่ครับ ในข้อมูลส่วนที่ไม่ต้องมีการแก้ไขบ่อยๆ เช่น ข้อมูลจังหวัด ข้อมูลประเทศ หรือ เป็นข้อมูลราคาหุ้นจากตลาด SET หรือ MAI ครับ
ปัญหาถัดมา คือ เราทำอย่างไร เพื่อไม่ให้ข้อมูลเหล่านี้มันหายไป ตอน Migrate ระบบ หรือระหว่างการใช้งาน เพื่อไม่ให้ User มือบอนไปกดลบได้ครับ ?
ทางเลือกนึงที่ใช้ คือ การกำหนด Flag ขึ้นมา หรือเพิ่มคอลัมน์ในฐานข้อมูลเราแหละครับ แต่ถ้ามองไปอีกที การเพิ่ม Column = เพิ่มพื้นที่ในการจัดเก็บ ?
หรือ เราแยก Script ขึ้นมา เพื่อ Initial ข้อมูล โดยเฉพาะ แต่เรามั่นใจได้อย่างไรว่า Script มันจะไม่หลาย ยิ่งหลาย Site นี่โคตรงง 555
และ Idea สุดท้ายครับ คือ การกำหนด ID ของ Row นั้นในฐานข้อมูลให้ติดลบครับ
ทำไมถึงต้องทำ ID ติดลบหละ
- ง่ายแก่การ Clear Data เช่น จาก UAT ไป Production ข้อมูลที่เป็นค่า Default เหล่านี้ จะไม่ถูกลบออกไปด้วยครับ
- สามารถกำหนด Query เพื่อดึงข้อมูลที่เราต้องการให้แก้ไขได้ เช่น Price Source มีข้อมูล Default คือ ตลาด SET (-1) และ ตลาด MAI (-2) ถ้ามีตลาดอื่นเกิดขึ้นมา เราก็สามารถใช้ User เพิ่มเข้าไปเอง แต่ข้อมูลเดิม 2 อันนี้ เราสามารถกำหนดไม่ให้ User เข้าไปแก้ไขได้ครับ และวิธีนี้ง่ายกับการเขียน Code ด้วย เพราะ เราแค่ตรวจสอบเพียง ID เท่านั้น
ตัวอย่างของ MYSQL อันนี้ดูมาจากระบบ Web Board ครับ
CREATE TABLE USER_STATUS ( STATUS_ID TINYINT NOT NULL PRIMARY KEY, NAME VARCHAR(64) NOT NULL, MSG VARCHAR(255) DEFAULT NULL )ENGINE=INNODB; ------------------------------ INSERT INTO USER_STATUS VALUES (-99,'BANNED', 'ACCOUNT BANNED'), (-2,'CLOSED', 'ACCOUNT CLOSED'), (-1,'UNVERIFIED', 'ACCOUNT NOT VERIFIED'), (0,'SUSPENDED','ACCOUNT SUSPENDED'), (1,'ACTIVE', NULL);
ข้อควรระวัง หากจะใช้วิธีนี้
- DBMS บางตัวไม่ Support การทำงานแบบนี้ เช่น MSSQL
- Component บางตัวไม่ Support เช่น ใน .Net Framework ตัว DataSet กับ DataAdapter จะใช้ ID ที่ติดลบ ไว้เก็บรายการใหม่ที่เรา New ขึ้นมาครับ
Discover more from naiwaen@DebuggingSoft
Subscribe to get the latest posts sent to your email.