เวลาพัฒนาระบบ บางครั้งทำไมเราถึงต้องกำหนดให้ ID ติดลบ

ในการทำระบบงานต่างๆ ไม่ว่าจะระบบเล็ก หรือเป็นระบบใหญ่ขึ้นมาสักระบบนึง แน่นอนเลยว่าข้อมูลย่อมมีมหาศาลมากมาย

แต่เราจำเป็นไหม ? ว่าจะต้องทำหน้าจอขึ้นมา เพื่อจัดการกับข้อมูลเหล่านี้

คำตอบ คือ ไม่ครับ ในข้อมูลส่วนที่ไม่ต้องมีการแก้ไขบ่อยๆ เช่น ข้อมูลจังหวัด ข้อมูลประเทศ หรือ เป็นข้อมูลราคาหุ้นจากตลาด 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 to your email.