질문은 데이터 품질에 대한 책임에 관한 것입니다.
대답은 시스템을 보는 방법에 따라 다릅니다.
데이터베이스가 응용 프로그램과 별 개인 독립적이고 고유하며 자율적 인 서비스 인 경우 데이터베이스는 데이터베이스에 포함 된 데이터의 일관성과 품질을 보장해야합니다. 기본적으로 해당 데이터베이스를 다른 응용 프로그램에서 사용할 수 있기 때문에 일관성과 품질이 동일한 두 번째 응용 프로그램에 의존 할 수 없습니다. 이러한 상황에서 데이터베이스는 API 및 자율적 인 동작을 노출하도록 설계되어야합니다. 이보기에는 최소한 두 개의 응용 프로그램이 있습니다. 그 중 하나는 데이터베이스이고 다른 하나는이를 사용하는 응용 프로그램입니다.
반대로 데이터베이스는 응용 프로그램을 직접적이고 완벽하게 제어하는 복잡한 파일 형식으로 간주 될 수 있습니다. 이런 의미에서 데이터베이스는 순수한 직렬화 및 문서 탐색 도구가됩니다. 쿼리 및 문서 유지 관리 (JSON 또는 XML 도구와 같은)를 지원하는 몇 가지 고급 동작을 제공 할 수 있지만 (대부분의 파일 스트림처럼) 다시 할 필요는 없습니다. 이 경우 파일 내에서 올바른 형식과 내용을 유지하는 것은 전적으로 프로그램의 책임입니다. 이보기에는 하나의 응용 프로그램이 있습니다.
두 가지 관점에서 다음 질문은 데이터베이스 사용을 멋진 파일 또는 별도의 서비스로 지원하는 방법입니다. 이를 통해 다음을 달성 할 수 있습니다.
- 데이터베이스 플랫폼이 테이블 / 뷰 / 저장 프로 시저 / 트리거 / 등의 형태로 제공하는 도구 사용
- 모든 클라이언트가 데이터베이스에 액세스하기 위해 사용해야하는 서비스 내에서 데이터베이스 자체 랩핑
- 데이터에 액세스하기 위해 모든 클라이언트가 사용해야하는 라이브러리에 데이터베이스를 래핑합니다.
각각에는 장단점이 있으며 시스템이 작동하는 환경의 구조적 제약에 따라 달라집니다.
어떤보기를 사용하든 항상 경계에서 데이터의 유효성을 검사하기 위해 비용을 지불합니다.
- 사용자가 입력 한 UI에서 필드의 유효성을 검사합니다
- 클라이언트를 떠나기 전에 네트워크 / API 요청의 유효성을 검사하십시오
- 작업을 수행하기 전에 서버에서 네트워크 / API 요청을 확인하십시오.
- 비즈니스 규칙으로 전달되는 데이터의 유효성 검사
- 지속되기 전에 데이터 유효성 검사
- 지속성에서 검색된 후 데이터 유효성 검증
- 등등
각 경계에서 얼마나 많은 검증이 보증되는지는 그것을 검증하지 않는 것이 얼마나 위험한 지에 달려 있습니다.
- 두 숫자를 곱하면?
- 주어진 메모리 위치에서 프로 시저를 호출합니까?
- 그 메모리 위치에 무엇입니까?
- 개체가 존재하지 않거나 상태가 좋지 않으면 어떻게됩니까?
- 한자를 포함하는 문자열에 정규식을 사용합니까?
- 정규식 모듈이 유니 코드를 처리 할 수 있습니까?
- 정규식으로 유니 코드를 처리 할 수 있습니까?
However, why not perform validation of data on the application side before storing them into the database?
글쎄,이 둘은 상호 배타적이지 않다. 양쪽에서 다른 것들을 검증 할 것입니다. 응용 프로그램의 유효성 검사는 비즈니스 중심이지만 데이터베이스의 유효성 검사는 데이터 중심입니다. 여러 다른 응용 프로그램에서 제공하는 데이터베이스를 생각해보십시오.