2010-05-11 2 views
0

저는 법적인 문서를 스캔하고 이름과 관련된 것을 저장하고 데이터베이스에 저장할 수있는 응용 프로그램을 설계해야합니다.디자인 리뷰 - 내가 제대로하고 있다고 생각합니까? 나를위한 첫 상용 프로젝트!

이제 조직 내부에는 많은 부서가 있으며 각 부서에는 많은 하위 부서가있을 수 있습니다.

일부 큰 조직에는 많은 부서와 하위 조직이 있으며 문제는 1 ~ 2 개만 있습니다.

부서 테이블과 Supdepartment 테이블을 생성하여 연결 등을 생성하는 방법에 대해 살펴 보았습니다. 확장 성이 뛰어나며 사용자가 프로그램을 조직 구성표에 맞게 동적으로 만들 수 있습니다.

올바른 방법으로 접근하고 있습니까? 제가 말했듯이, 이것은 제가 처음으로 상업적으로 응용 한 것입니다. 그래서 저는 그것을 올바로하고 시간에 관한 것들을 전달하기위한 자신의 이름과 다른 것에 대한 좋은 코드를 확장하기를 원합니다.

편집 :이 같은 것이 더 좋다고 생각하십니까?

Department 
ID Name Description ParentDepartment 

ParentDepartment가 null 인 경우 루트 부서입니까? 이것이 최적의 해결책입니까? 루트 부서의 수에 따라 폼에 단추를로드하기 때문에 디자인이 그 방향을 향합니다.

이렇게 설정해도 Department 테이블의 모든 항목을 스캔해야 "루트 니"임을 확인할 수 없습니까? : P

답변

1

IMO 부서 테이블이있는 것만으로 더 나을 수 있습니다. 자기 참조 parentId 열이있어서 최상위 부서가 null 부모를 가지므로 모든 하위 부서에는 부모가 있습니다. 이렇게하면 깊이 중첩 할 수 있습니다.

+0

편집을 참조하십시오. –

+1

예, 그것이 제가 의미했던 것입니다. Id 및 ParentId 열에 인덱스를 추가하면 쿼리가 빠르게 유지됩니다. – BlackICE

0

부서 테이블이 하나이며 자체 참조가 있어야합니다. A는 부서이며,이 두 개의 하위 부서의 x와 y,

DEPTNO DEPTNAME ParentDeptID 1 널 2 × 1 3 Y 1

이 방법이 그래서, 당신은 수준의 어떤 넥타이를하지 않습니다 이 계층 구조에서 단지 2

3

나는 이것을 해왔다. 나는 당신이 부서에 속한 것으로 문서를 확인하지 않는 것이 더 나을 것이라고 생각한다. 당신이 말했듯이, 그들은 시간이 지남에 따라 변화하고 성장합니다 (그리고 나는 줄어들 것입니다). 그래서 당신은 당신의 목록을 계속 변경해야합니다. 나는 당신이 문서에 태그를 붙이는 것이 더 운이 좋을 것이라고 생각한다. 예를 들어,이 문서에는 customerid = 12345 및 invoiceid = asdasdasd가 있습니다. 다른 문서에는 고객 ID가 없으며 paymentid = 1234567890이 있습니다. 그런 다음 각 부서에서 관심있는 내용을 결정할 수 있으며 변경 사항은 검색된 문서 만 변경하면 검색 메커니즘 만 변경됩니다.

EDIT : 일부 조직에는 검색을 수행하는 중급 이상의 사람들이 있다는 점도 유의해야합니다. 문서를 올바르게 분류하기 위해 문서에 의존해야한다면 문서를 작성하는 것처럼 디지털 문서를 잃어 버리거나 잘못 입력 할 수 있습니다. 다시 말하지만, 문서를 부서에 엄격하게 연결하지 않는 또 다른 이유가있을 수 있습니다. 또한 태그를 사용하면 단일 문서를 두 부서 또는 하위 부서에 연결할 수 있습니다. 그것만으로도 당신의 방식대로 할 수없는 이유 일 수 있습니다.

+0

입력 해 주셔서 감사합니다. 매우 확장 성이 좋습니다! –

1

유연한 디자인 (즉,쉽게 확장 가능) :

부모가 2 명인 부서는 어떻게됩니까? 부서를 쉽게 분류 할 수없는 상황이있을 수 있습니다. 두 부모에게 추가하면 쉽게 찾을 수 있습니다 (상황을 생각하십시오 : 빨강 녹색 황색 노란색은 두 부모를, 빨간색과 녹색은 쉽게 찾을 수 있습니다. . 검색 적색 또는 녹색은 "중복", 저는 믿습니다, 제대로 부서를 분류하기 위해 더 나은 가능성을 지불하게됩니다)

을 나는 그것이 다른 테이블에서 부서 간의 관계를 유지하는 것이 낫다 생각한다.

Department 
Id Name Description 

DepartmentRelation 
ParentId ChildId 

이것은 또한 1NF를 준수합니다 : http://en.wikipedia.org/wiki/First_normal_form

+0

또한 이러한 유형의 테이블에 begin_date 및 end_date를 추가하는 경향이 있습니다. 이렇게하면 관계의 복잡한 기록을 유지할 수 있습니다. 지금 필요하지 않더라도 필요한 경우 나중에 날짜 값을 채울 수 있습니다. – Randy

+0

@Randy : 좋은 지적입니다! 특히 조직이 부서를 변경하는 경향이 있고 오래된 파일을 잃고 싶지 않은 경우 (예전 부서를 검색 할 수 있지만 이전 부서를 추가 할 수는 없습니다). 따라서이 경우 no_more_add_date 만 있으면 충분합니다. – Pindatjuh

1

만약 당신이 계층 SQL Server 2008을 사용하는 경우 새로운 HierarchyID data type을 사용하는 것이 좋습니다. 전체 설명은 Model Your Data Hierarchies With SQL Server 2008을 참조하십시오.

시나리오에 따라 과잉 사용이 가능할 수도 있지만 노드 식별 경로를 사용하면 쉽게 작업 할 수 있습니다. 예 : 특정 부서의 루트 노드를 쉽게 찾을 수 있습니다.

관련 문제