2009-12-02 2 views
3

데이터베이스를 저장소로 사용하는 단일 사용자 데스크톱 응용 프로그램에서 데이터베이스에 대한 데이터 유효성 검사를 수행해야합니까, 아니면 코드에서 수행 할 수 있습니까? 모범 사례는 무엇이며, 없으면 두 가지 가능성 각각의 장단점은 무엇입니까?데스크톱 응용 프로그램에 대한 데이터 유효성 검사를 수행 할 위치는 어디입니까? 데이터베이스 또는 코드?

+1

"단일 사용자 데스크톱을 통해 모든 삽입 및 업데이트의 정확성을 확인하기 위해

세 번째 우선 순위는 것 응용 프로그램 "은 데이터베이스 백엔드에 대한 실제 이유가 없음을 나타냅니다. 물론, 데이터가 "자연스럽게 관계형"이고 데이터베이스에 대한 요구가있을 수 있다면 그것은 매우 정당합니다. 그러나 그렇지 않으면 이것은 "내 망치가 있습니다.이 나사는 못처럼 보입니다. "-bell – Kimvais

+1

소매 응용 프로그램이므로이 경우 SQL과 데이터베이스를 매우 유용하게 사용할 수 있습니다. – luvieere

+1

충분히 공정하게, 단지 당신이 적어도 그것에 대해 생각하고 있는지 확인하고 싶었습니다. :) – Kimvais

답변

6

둘 다합니다.

데이터 유효성 검사의 가장 좋은 방법은 프로그램 입력을 데이터베이스에 삭제하는 것입니다. 그러나 이것은 자체 유효성 확인을 가지고있는 데이터베이스를 핑계로 삼지 않습니다. 코드에서 유효성 검사를 프로그래밍하면 관리되는 환경에서 생성 된 델타 만 고려됩니다.손상된 데이터베이스, 관리 오류 및 둘 이상의 응용 프로그램에서 데이터베이스를 사용할 원격/미래의 가능성을 고려하지 않습니다.이 경우 응용 프로그램 수준 데이터 유효성 검사 논리가이 새 응용 프로그램에 복제되어야합니다.

데이터베이스에는 자체 검증 루틴이 있어야합니다. 들어오는 데이터를 청결성 검사/제한/어설 션을 실행하는만큼 정리하는 것으로 생각할 필요가 없습니다. 데이터베이스에 유효하지 않은 데이터가있을 수 있습니다. 이것이 전체 무결성 제약 조건입니다. 요약하면

, 당신은 둘 다 수행

  1. 살균을하고 데이터 저장소에 도달하기 전에 사용자 입력을 확인합니다.
  2. 데이터 저장소에 유효성 검사를 강화하는 제약 조건을 부여하십시오.
5

데이터가 데이터베이스에 도달하기 전에 항상 코드에서 유효성을 검사해야합니다.

+4

일반적으로 나는 데이터베이스를 남겨두기를 원합니다. 데이터베이스는 비즈니스 논리를 추가 할 수있는 장소가 아닌 데이터를 저장하는 저장소입니다 (변경시 두 곳에서 유지해야 함). – DOK

+2

데이터베이스는 항상 데이터의 유효성을 검사해야합니다. 비즈니스 논리가 아니며 견고성과 보안을위한 캡슐화입니다. –

+3

@DOK : "S"DBMS는 시스템을 의미합니다. 그것은 엔진이지 저장소가 아닙니다. 엔진을 사용하여 데이터를 보호하십시오. 누군가가 앱이나 다른 앱을 사용하여 데이터를 변경하지 않는 경우 어떻게해야합니까? – gbn

9

모범 사례는 둘 다입니다. 데이터베이스는 자체 상태가 유효한지 확인해야하며 프로그램은 데이터베이스에 쓰레기를 전달하지 않아야합니다.

단점은 더 많은 코드를 작성해야하며, 약간의 추가 런타임 오버 헤드가 발생한다는 것입니다.

장점은 데이터베이스가 낮은 수준의 유효성을 보장하지만 프로그램이 사용자가 데이터베이스의 오류를 다시 전달하는 것보다 훨씬 효율적으로 올바른 데이터를 입력 할 수 있다는 것입니다. 이전에 개입 할 수 있고 UI 힌트를 제공 할 수 있습니다 그들은) 등이 제대로 완료 될 때까지 유효하지 않은 텍스트는 빨간색 필드

- 의견 승진 편집 (추가 정보) -

많은 경우 스마트 접근 방식은 각각 검증을 구동되는 데이터를 작성하는 것입니다

공유 데이터 파일 (예 : XML)을 사용하여 유효성 검사를 수행하십시오. 유효성 검사에 대한 사양이 변경되면 설명 파일을 편집하기 만하면 유효성 검사의 양쪽 끝이 동기화되어 업데이트됩니다. (코드 변경 없음).

+2

프로그래머라면이 방법이 최선의 방법은 아닙니다. 코드 복제는 갱신/변경을 위해 프론트 엔드 및 백엔드로 돌아 가야 함을 의미합니다. – JonH

+1

디자인을 먼저 적절히 지정하고, 한번 구현하십시오 –

+1

동의합니다. 두 곳 모두 필요합니다. 여러 응용 프로그램에서 작동하는 데이터베이스에서 누군가가 SQL을 사용하여 데이터를 삽입 할 수 있습니다. 그리고 그것은 좋은 사용자 경험을 보장하기 위해 클라이언트 응용 프로그램 내에서 완료되어야합니다. – nathanvda

1

저장하기 전에 데이터를 확인하는 것이 현명하지 않습니까? 데이터베이스 연결 및 리소스가 비쌉니다. 데이터를 데이터베이스로 보내기 전에 데이터의 유효성을 검사하는 일종의 논리가 있는지 확인하십시오. 나는 어떤 사람들이 프론트 엔드에서, 다른 사람들은 백 엔드에서, 다른 사람들은 양쪽에서 그것을하는 것을 보았다.

어셈블리 또는 유효성 검사 단계를 만드는 것이 좋습니다. 데이터의 유효성을 검사 한 다음 db로 보내십시오.

3

데이터가 응용 프로그램보다 오래 지속됩니다. 그것은 수년 동안 주위에 달려있다. 응용 프로그램이 규제 당국이나 법 집행 기관에 관심있는 데이터를 처리하지 않더라도 해당 사용자의 데이터 범위가 계속 증가합니다.

하나의 응용 프로그램이 여러 데이터베이스를 공유하는 것보다 조직간에 데이터를 공유 (보고, 데이터웨어 하우스, 데이터 허브, 웹 서비스)하거나 조직간에 교환하는 것이 더 일반적입니다. 그러한 교환은 스키마를 개념적으로 소유하고있는 프론트 엔드 애플리케이션 외에 데이터를 추출하고 데이터를로드하는 다른 메커니즘을 포함 할 수 있습니다.

데이터 유효성 검사 규칙을 일단 데이터베이스에 저장하면됩니다. 당신이 belt'n'braces를 좋아한다면 GUI에도 넣으십시오.

0

신청하십시오!

sqlerror -12345를 최종 사용자에게 의미있는 메시지로 변환하는 것은 매우 어렵습니다. 많은 경우 데이터베이스가 데이터를 확보 할 때까지 사용자가 오래 동안 머물러있을 수 있습니다 (예 : 제출 한 후 오늘 stackoverflow에서받은 투표 수가 얼마나되는지 볼 수 있습니다).

첫 번째 장점은 응용 프로그램의 데이터를 데이터베이스로 보내기 전에 유효성을 검사하는 것입니다.

두 번째 우선 순위는 사용자가 유효하지 않은 데이터를 입력하거나 데이터가 부적절하다는 것을 즉시 경고하지 않도록 프런트 엔드에서 데이터의 유효성을 검사하고 확인하는 것입니다. (응용 프로그램이 충분히 중요하고 예산이 충분히 큰 경우) 데이터베이스 자체 등 constriants 및 트리거

관련 문제