ฉันคิดว่าคำถามเกี่ยวกับความรับผิดชอบต่อคุณภาพของข้อมูล
คำตอบขึ้นอยู่กับว่าคุณเห็นระบบอย่างไร
หากคุณเห็นว่าฐานข้อมูลเป็นบริการที่แยกจากกันและเป็นอิสระแยกต่างหากจากแอ็พพลิเคชันแสดงว่าฐานข้อมูลมีหน้าที่รับผิดชอบในการสร้างความมั่นใจในความสอดคล้องและคุณภาพของข้อมูลที่มี เป็นหลักเนื่องจากฐานข้อมูลนั้นสามารถใช้งานได้โดยแอปพลิเคชันที่แตกต่างกันดังนั้นจึงไม่สามารถพึ่งพาแอปพลิเคชันที่สองนั้นที่มีความสอดคล้องและพฤติกรรมด้านคุณภาพที่เหมือนกัน ในสถานการณ์เหล่านี้ฐานข้อมูลจำเป็นต้องได้รับการออกแบบเพื่อแสดง API และพฤติกรรมอิสระ ในมุมมองนี้มีแอปพลิเคชั่นอย่างน้อยสองตัวหนึ่งในนั้นคือฐานข้อมูลและอีกอันคือแอปพลิเคชันที่ใช้
ในทางกลับกันฐานข้อมูลอาจถูกพิจารณาว่าเป็นรูปแบบของไฟล์ที่ซับซ้อนซึ่งอยู่ภายใต้การควบคุมโดยตรงและทั้งหมดของแอปพลิเคชัน ในแง่นี้ฐานข้อมูลจะกลายเป็นเครื่องมือการทำให้เป็นอนุกรมและเครื่องมือนำทางเอกสารอย่างแท้จริง มันอาจมีพฤติกรรมขั้นสูงบางอย่างเพื่อสนับสนุนการสืบค้นและการบำรุงรักษาเอกสาร (เช่นเครื่องมือ JSON หรือเครื่องมือ XML) แต่จากนั้นก็ไม่จำเป็นต้องทำเช่นนั้น (เช่นสตรีมไฟล์ส่วนใหญ่จะทำ) ในกรณีนี้มันเป็นความรับผิดชอบของโปรแกรมอย่างแท้จริงในการรักษารูปแบบและเนื้อหาที่ถูกต้องภายในไฟล์ ในมุมมองนี้มีแอปพลิเคชั่นเดียวอยู่
ในทั้งสองมุมมองคำถามต่อไปคือวิธีการสนับสนุนการใช้ฐานข้อมูลเป็นไฟล์แฟนซีหรือบริการแยกต่างหาก คุณสามารถทำได้โดย:
- ใช้เครื่องมือที่แพลตฟอร์มฐานข้อมูลจัดทำในรูปแบบของตาราง / มุมมอง / ขั้นตอนการจัดเก็บ / ทริกเกอร์ / ฯลฯ ...
- การรวมฐานข้อมูลไว้ภายในเซอร์วิสที่ไคลเอ็นต์ทั้งหมดต้องใช้เพื่อเข้าถึงฐานข้อมูล
- การห่อฐานข้อมูลในไลบรารีที่ไคลเอ็นต์ทั้งหมดต้องใช้เพื่อเข้าถึงข้อมูล
แต่ละคนมาพร้อมกับข้อดี / ข้อเสียของตัวเองและจะขึ้นอยู่กับข้อ จำกัด ทางสถาปัตยกรรมของสภาพแวดล้อมที่ระบบทำงานภายใน
ไม่ว่าคุณจะใช้มุมมองแบบใดจะจ่ายเพื่อตรวจสอบข้อมูลตามขอบเขตเสมอ
- ตรวจสอบความถูกต้องของฟิลด์บน UI ที่ผู้ใช้ป้อน
- ตรวจสอบคำขอเครือข่าย / API ก่อนที่จะออกจากไคลเอนต์
- ตรวจสอบคำขอเครือข่าย / API ในเซิร์ฟเวอร์ก่อนทำอะไร
- ตรวจสอบข้อมูลที่ส่งผ่านไปยังกฎเกณฑ์ทางธุรกิจ
- ตรวจสอบข้อมูลก่อนที่จะยืนยัน
- ตรวจสอบความถูกต้องของข้อมูลหลังจากได้รับข้อมูลจากการคงอยู่
- เป็นต้น
การตรวจสอบความถูกต้องแต่ละขอบเขตนั้นขึ้นอยู่กับความเสี่ยงที่จะไม่ตรวจสอบความถูกต้อง
- คูณสองตัวเลขด้วยกันไหม?
- คุณได้รับหมายเลขผิดนั่นเป็นปัญหาหรือไม่
- เรียกใช้โพรซีเดอร์บนตำแหน่งหน่วยความจำที่กำหนดหรือไม่?
- มีอะไรอยู่ในตำแหน่งหน่วยความจำนั้น?
- จะเกิดอะไรขึ้นถ้าวัตถุนั้นไม่มีอยู่หรืออยู่ในสถานะไม่ดี?
- ใช้ regex ในสตริงที่มีตัวอักษรคันจิ?
- โมดูล regex สามารถจัดการกับ Unicode ได้หรือไม่?
- regex สามารถจัดการยูนิโค้ดได้หรือไม่?
However, why not perform validation of data on the application side before storing them into the database?
ทีนี้สองคนนี้ไม่ได้แยกกัน เป็นไปได้ว่าคุณจะตรวจสอบสิ่งต่าง ๆ ทั้งสองด้าน ในขณะที่การตรวจสอบความถูกต้องในด้านแอปพลิเคชันนั้นเน้นธุรกิจเป็นหลัก แต่การตรวจสอบความถูกต้องในฐานข้อมูลนั้นมีความสำคัญต่อข้อมูลมากกว่า คิดในฐานข้อมูลที่มีแอปพลิเคชั่นหลายตัวและแตกต่างกัน