2009-12-30 2 views
0

약 15 개의 체크 박스가있는 웹 폼이 있는데, 사용자는 체크 박스와 그 사이의 수량을 모두 체크 할 수 있습니다. 양식 데이터를 저장할 데이터베이스는 MySQL이지만 보고서는 MySQL ODBC 연결을 사용하여 MS Access의 데이터에서 생성됩니다. 이 문제를 처리하기위한 세 가지 옵션이 있습니다.내 체크 박스 데이터를 데이터베이스에 저장하기위한 정상적인 방법은 무엇입니까?

스프레드 시트 방법 :

모든 확인란에 대한 부울 칼럼에 대한 텍스트 상자 하나 개의 테이블이 "기타"

정규화 방법 :

두 테이블을 가지고, 하나는 체크 박스 정보가 아닌 다른 양식 데이터입니다. 그런 다음 폼 데이터의 FK와 일대 다 관계의 체크 박스 값을 포함하는 두 번째 테이블. 양식이 처리 될 때 일부 루핑으로 양식 데이터를 삽입하는 것과는 별도로 확인란 값을 삽입하는 것을 처리하십시오.

단문 방법 :

체크 박스 데이터에 대한 텍스트 필드 하나 개의 테이블이 있습니다. 양식을 처리 할 때 체크 상자 값을 쉼표로 분리 된 문자열로 연결하고이를 다른 데이터와 함께 텍스트 필드에 넣습니다.


액세스 방법과 짧은 방법은 모두 보고서를 생성하는 데 사용하기 쉽기 때문에 매력적입니다. 특히 짧은 방법. 안타깝게도 정규화 된 방식을 선호하는 반면 Access 구성 요소를 개발하는 조직에서는 정규화 된 데이터를 적절하게 사용하는 보고서를 생성하는 방법을 알지 못합니다. 액세스 방법과 짧은 방법 모두 체크 박스 값 (액세스 방법이 더 그렇습니다)으로 필터링 할 때 문제가 될 수 있습니다.

어떻게해야합니까? 제가 정상화 된 방식으로 간다면 보고서를 작성하는 도구를 개발해야 할 책임이 있습니다. 이는 몇 발가락에 발을 디디 며 정치적 논쟁이 될 수 있습니다. 나는 그들이 이미 사용하고있는 것을 고수한다. (접근 방법) 즉각적인 작업 부하를 증가시키고 프로그래밍 문제를 혼란에 빠뜨리는 것이지만, 어떤 사무실 정치도 피한다. 또는 현재 약간의 프로그래밍 비용과 나중에 불편을 겪고있는 하이브리드 방식은 다른 프로젝트 참여자에게 몇 가지 장애물이 있습니까?

+0

비정규 화 된 접근 방식은 액세스 방식이 아닙니다. 접근은 절대로 적절한 테이블 구조를 사용하는 것을 금지합니다. 그것이 "스프레드 시트 방법"을 읽으려면 그것을 바꾸십시오. 왜냐하면 그것이 그것을 설명하는 더 합리적인 방법이기 때문입니다. 이 문구를 사용하여 질문을 투표하고 내 downvote를 수정하면 문제를 해결할 수 있습니다. –

+0

"액세스 방법"으로 설정 한 이유는 일반적으로이 패턴을 볼 수있는 장소이기 때문에 코딩을하지 않고도 양식을 올바르게 작동시킬 수있는 가장 쉬운 방법이기 때문입니다. 그것을 변경해 주셔서 감사합니다, 그것은 더 적절한 설명 것 같습니다. –

답변

2

"액세스 방법"이라고하는 것이 정규화되지 않았다는 것에 동의하지 않습니다. 모든 체크 상자가 다른 의미를 가지며 키에만 종속되어 있고 (서로가 아닌) 테이블은 정규화됩니다 (최소한 3NF 또는 BCNF).

즉, 해당 구조에 대한 문제보고가 없다면 Codd가 귀하의 수면에 오지 않을 것입니다. (심지어 "Date"체크 박스를 NULL로 저장하지 않는 한 Date도 마찬가지입니다. p)

+0

설명 된 것은 분명히 비정규 화 된 것 같습니다. 왜냐하면 그는 15 개의 값과 기타를 말하기 때문입니다. 그리고 비정규 화 된 접근 방식을 "액세스 방식"이라고 부르는 것은 그럴 일도 아니므로 그냥 피투성이입니다. 스프레드 시트 방식입니다. Access는 개발자가 올바르게 표준화 된 스키마를 작성하는 능력을 어떤 식 으로든 제한하지 않습니다. –

+0

David, 나는 전혀 보지 못합니다. 질문에는 "사용자가 0 또는 15 개의 체크 박스와 그 사이의 모든 수량을 확인할 수있는 약 15 개의 체크 박스가있는 웹 양식이 있습니다." 그래서 내 책에서는 15 개의 선택적 속성으로 변환하고, 여러 개의 체크 박스에 대해 별도의 제약 조건 (의존성)이 없다. ".. plus Other"라고 읽지 않은 곳에서 읽으십시오. –

+0

"액세스 방법"의 끝에서 "그는"다른 텍스트 상자 "라고 말합니다. –

0

true/false 값이 PK와 직접 관련이있는 개별 데이터 조각 인 경우 그때 당신은 그들을 위해 존재하는 엔티티와 같은 테이블에 넣을 수 있습니다.

다른 테이블로 분리하려는 경우 괜찮습니다. 영원히 옵션으로 사용할 수있는 열을 넣으십시오. 나중에 열을 추가하거나 제거하여 쉽게 확장하거나 제거 할 수 있습니다.

쉼표로 구분 된 값의 목록은 유지 보수 할 수 없으므로 혼동 될 수 있으므로 권장하지 않습니다.

+0

? - 알려 주시기 바랍니다. –

0

정규화 된 형식으로 캡처 할 데이터를 디자인하십시오.

Access 데이터베이스에 체크 상자 데이터의 각 항목에 대해 별도의 열로 설명 된 형식으로 표시 할 크로스 탭 쿼리를 작성하십시오. 해당 크로스 탭 쿼리를 보고서 용 데이터를 추출하는 사람들이 선택하는보기로 사용합니다.

크로스 탭 쿼리를 수행하는 데 약간의 시간을 소비하면서 두 가지 장점을 모두 활용할 수 있습니다. 이 지연이 엄청난 것이면 스냅 샷을 고려하십시오.

관련 문제