Tôi nghĩ rằng câu hỏi là về trách nhiệm đối với chất lượng dữ liệu.
Câu trả lời phụ thuộc vào cách bạn nhìn thấy hệ thống.
Nếu bạn thấy cơ sở dữ liệu là một dịch vụ độc lập, riêng biệt và tự trị tách biệt với ứng dụng, thì cơ sở dữ liệu có trách nhiệm đảm bảo tính nhất quán và chất lượng của dữ liệu chứa trong đó. Về cơ bản vì cơ sở dữ liệu đó có thể được sử dụng bởi một ứng dụng khác, do đó, nó không thể dựa vào ứng dụng thứ hai có cùng tính nhất quán và hành vi chất lượng. Trong những trường hợp này, cơ sở dữ liệu cần được thiết kế để hiển thị API và hành vi tự trị. Theo quan điểm này, có ít nhất hai ứng dụng, một trong số đó là cơ sở dữ liệu và ứng dụng còn lại là ứng dụng sử dụng nó.
Ngược lại, cơ sở dữ liệu có thể được coi là một dạng tệp phức tạp nằm dưới sự kiểm soát trực tiếp và toàn bộ của ứng dụng. Theo nghĩa này, cơ sở dữ liệu sẽ biến thành một công cụ điều hướng tài liệu và tuần tự hóa thuần túy. Nó có thể cung cấp một số hành vi nâng cao để hỗ trợ truy vấn và bảo trì tài liệu (như JSON hoặc các công cụ XML thực hiện) nhưng sau đó, nó không phải (giống như hầu hết các luồng tệp thực hiện). Trong trường hợp này, trách nhiệm của chương trình là duy trì đúng định dạng và nội dung trong tệp. Theo quan điểm này, có một ứng dụng.
Trong cả hai khung nhìn, câu hỏi tiếp theo là làm thế nào để hỗ trợ việc sử dụng cơ sở dữ liệu dưới dạng một tệp ưa thích hoặc một dịch vụ riêng biệt. Bạn có thể đạt được điều này bằng cách:
- sử dụng các công cụ mà nền tảng cơ sở dữ liệu cung cấp dưới dạng bảng / lượt xem / thủ tục được lưu trữ / trình kích hoạt / v.v ...
- gói cơ sở dữ liệu trong một dịch vụ mà tất cả khách hàng phải sử dụng để truy cập cơ sở dữ liệu
- gói cơ sở dữ liệu trong một thư viện phải được sử dụng bởi tất cả các khách hàng để truy cập dữ liệu.
Mỗi cái đi kèm với những ưu / nhược điểm riêng và sẽ phụ thuộc vào các ràng buộc kiến trúc của môi trường mà hệ thống vận hành bên trong.
Bất kể chế độ xem nào bạn thực hiện, nó luôn trả tiền để xác thực dữ liệu tại các ranh giới.
- Xác thực các trường trên giao diện người dùng mà người dùng nhập
- Xác thực yêu cầu mạng / API trước khi nó rời khỏi máy khách
- Xác thực yêu cầu mạng / API trong máy chủ trước khi làm bất cứ điều gì
- Xác thực dữ liệu được truyền vào quy tắc kinh doanh
- Xác thực dữ liệu trước khi được duy trì
- Xác thực dữ liệu sau khi được truy xuất từ sự kiên trì
- cứ thế và cứ thế
Bao nhiêu xác nhận được bảo hành tại mỗi ranh giới phụ thuộc vào mức độ rủi ro khi không xác nhận nó.
- Nhân hai số với nhau?
- Bạn nhận được số sai có phải là một vấn đề?
- gọi một thủ tục trên một vị trí bộ nhớ nhất định?
- Có gì trong vị trí bộ nhớ đó?
- Điều gì xảy ra nếu đối tượng không tồn tại, hoặc ở trạng thái xấu?
- sử dụng regex trên chuỗi chứa kanji?
- Mô-đun regex có thể xử lý unicode không?
- Regex có thể xử lý unicode không?
However, why not perform validation of data on the application side before storing them into the database?
tốt, hai cái này không loại trừ lẫn nhau. Có khả năng bạn sẽ xác nhận những thứ khác nhau ở cả hai bên. Trong khi các xác nhận ở phía ứng dụng là trung tâm kinh doanh, thì các xác nhận trên cơ sở dữ liệu là trung tâm dữ liệu hơn. Hãy suy nghĩ trong một cơ sở dữ liệu được cung cấp bởi một số ứng dụng khác nhau.