배움터  
  HOME > 배움터 > 무료강좌
무료강좌
 
액세스 2000, 김규경님의 데이터베이스 기초 다지기 - QA를 통해 본 효율적인 테이블 구성 예제 #2, Access 2000
 


QA를 통해 본 효율적인 테이블 구성 예제 #2

2) 기본키를 찾습니다.
기본 키는 레코드 단위로 구분이 가능하게 하기 위해 사용합니다. 관계형 데이터베이스는 레코드별로 각각 구별이 되어야 합니다. 그러나 두 테이블 모두 하나의 필드만으로는 레코드 하나 하나를 고유하게 구별할 수 없군요.
그렇다면 다중 필드 기본 키를 만들어야 합니다. 그러나 속도의 문제를 가져오므로 신중해야 합니다.
다중 필드 기본 키를 운영해야 한다면 테이블을 분리하는 것을 고려해야 합니다. 
분리한다면 뒤에 언급한 정규화 테이블의 내용과 같이 분리됩니다.
만약 분리하지 않겠다면 그냥 일련번호 기본 키를 이용하는 것이 좋을 것 같습니다.

주민등록번호 필드는 추가하지 않고 기존 테이블을 변경하면 아래와 같겠습니다.

 일련번호 사번 성명  발령일  부서  발령사항
1 94-1 홍길동  94-08-08  사무원  임직
2 94-1 홍길동  95-01-30 사무원  퇴직
3 94-1 홍길동  96-08-05 경리  임직
4 94-1 홍길동  97-09-30 경리  퇴직

3) 우리가 목적하고자 하는 기간을 산정하는데 있어서 아래 테이블을 가지고 상당한 곤란함을 느낄 수 있습니다. 발령일과 만료일 두 필드를 이용하면 간단할 겁니다.

만약 테이블이 다음과 같이 만들어졌다면 어떨까요? 
기간 계산은 훨씬 쉬워지며, 인사상황이 훨씬 일목요연해집니다.

일련번호 사번 성명 발령일 만료일 부서
1 94-1 홍길동 94-08-08 95-01-30 사무원
3 94-1 홍길동  96-08-05 97-09-30  사무원 

그러나 일단 질문자가 작성한 자료형태로 기간을 산정해 보도록 하겠습니다. 이것도 좋은 공부가 되겠습니다.
단 사번은 재입사를 하더라고 기존 사번을 그대로 이용하여 개인당 오직 하나만 부여된다고 가정합니다.

사번 성명 발령일 부서 발령사항
94-1 홍길동 94-08-08 사무원 임직
94-1 홍길동 95-01-30  사무원 퇴직
94-1 홍길동 96-08-05 경리  임직
94-1 홍길동 97-09-30 경리  퇴직

다음은 계산된 결과입니다.
이러한 결과를 계산하기 위하여 질의테이블에서 계산필드를 만들어 사용하는데 계산 값을 사용자 정의함수를 만들어 계산합니다.

01-02.gif(37827바이트)

근무기간을 산정하는 사용자 정의함수입니다.

Function QuitDate(임직일 As Date, 사번 As String, _
     Optional 원하는값 As Integer = 1, _
     Optional 원하는형식 As Integer = 1) As Variant

Dim strCriteria As String
Dim ret As Variant

     임직일 이후에서 퇴직한 첫 자료를 조회한다.
     strCriteria = "날짜>=#" & 임직일 & "# AND 구분='퇴직' AND 사번='" & 사번 & "'"

     ret = DLookup("날짜", "tbl인사정보", strCriteria)

     If 원하는값 = 2 Then
          ret = CDate(Nz(ret, Date))

          If 원하는형식 = 1 Then
               ret = DateDiff("d", 임직일, ret) + 1
          Else
               ret = DateDiff("m", 임직일, ret) + 1
               ret = (ret \ 12) & "년 " & (ret Mod 12) & "개월"
          End If
     End If

     QuitDate = ret

End Function

원하는 작업을 해냈습니다.

 

 

  목차 | 이전 | 다음