개발자 끄적끄적

데이터베이스 응용(2023.10.2) 본문

데이터베이스의 응용

데이터베이스 응용(2023.10.2)

햏치 2023. 10. 5. 18:51

<Key>
- a group of one or more attributes that uniquely identifies a row
- ACTIVITY relation
- Combination of two attributes become a key
- must consult the users to decide a key
- Every relation has at least one key
- Unique Attribute may not be the key of the table




<중간고사 문제>
2. 유일성을 갖는 속성(예를 들어 주민등록번호)을 키 값으로 정하는 직관적 방식이 부적절한 이유에 대해 간단히 설명
Sol) 유일성을 갖는 속성일지라도 그 속성이 여러 개의 다른 속성을 결정하는 관계(다중값 결정)가 있는 경우 키 값으로서
  역할을 할 수 없고 키의 구성요소가 된다




<Normalization(정규화)>
- Undesirable relation -> desirable relation
- Undesirable relation = Modification Anomalie -> 갱신이상 현상
  - deletion anomaly : 삭제이상 -> 내가 원하지 않은 데이터까지 함께 삭제되는 것
  - insertion anomaly : 삽입이상 -> 어떤 정보를 입력하고 싶은데 입력에 문제가 생기는 것

- 정보의 중복에 따른 이상
  - 특정정보의 표현불가
  - NULL값의 보유
  - 정보의 부정확
 
- 정규화 : 독립적으로 관련 있는 속성들은 별개의 table로 표현
- 실무자들이 일반적으로 사용할 수 있는 table 형태는 3NF
- ERD -> 3NF로의 변환 : ERD의 Entity는 실세계인 overall view로서 파악된 것이므로
                               개체내부 속성 간의 관계에의한 효율을 고려해서 tune-up 시킬 필요가 있다
  
ex_1) ACTIVITY(SID, Activity, Fee)
        KEY : SID  -> 학생 한명이 오직 한 개의 특별활동만 할 수 있는 경우
ex_2) ACTIVITY(SID, Activity, Fee)
       KEY : SID, Activity  -> 학생 한명이 여러 개의 특별활동을 할 수 있는 경우

- Modification Anomalie Solution(갱신이상 해결 방법)
  - Sol) dividing the relation into two relations
  ex) STU_ACT(SID, Activity)
       KEY : SID, Activity
   ------------------------------------
      ACT-COST(Activity, Fee)
      KEY : Activity

  - 주의) Referential integrity constraint(참조무결성 원칙) -> Table과 Table사이에 일관성을 유지해야한다
    - STU_ACT는 ACT-COST의 부분집합
    - before we allow an Activity to b entered into STU-ACT, we must check to make sure
      that it is already present in ACT-COST



<Essence of Normalization>
- Anomlies(이상현상 발생 이유) occurs because ACTIVITY contains facts about 'two different themes(주제)'
  - two themes
    - the student who participate in each activity
    - how much each activity costs
- we must add date about two themes at once and delete data about two themes
- Each relation must have a single theme(테이블은 한 개의 주제만 갖아야한다)




<Classes of Relations>
 - Normal forms : classes of relations and the techniques for preventing anomalies
  - E.F.Codd : 1NF, 2NF, 3NF
  - Boyce-Codd : BCNF, 4NF, 5NF
  - No theory guaranteed that any of them would eliminate all anomalies
  - R.Fagin : Domain/Key normal form(DK/NF)




<Relationship of the Normal Forms>
1NF < 2NF < 3NF < BCNF < 4NF < 5NF




<First through Fifth Forms>
- 1NF
  - Any table of data that meets the definition of a relation 
  - Definition of a relation
    - All cells of the table must have of a single value
    - Repeating groups  and arrays are not allowed as values
    - All entries in any attribute must be of the same kind
    - Each column must have a unique name (order of the column is insignificant)
    - No two rows in a table may be identical (order of the row is insignificant)

- 2NF
  - Definition : if all non-key attributes in a relation are dependent on all of the key a relation is in second normal form




<정규화를 하기 위한 판단 근거>
1. 함수종속성(Functional dependency)
- 한 relation에 있는 2개의 속성 A와 B사이에 다음의 관계가 성립하면 A->B라 한다
  1) 한 tuple 상에서 A값에 대해 하나의 상응하는 B의 값이 존재
  2) 임의의 두 tuple A가 같으면 tuple의 B값도 반드시 동일
  A->B 단 AB가 R의 부분집합 r일 때
  r에 속한 모든 tuple들 t1과 t2에서 
  if t1[A]=t2[A] then
     t1[B]=t2[B]이다

ex) Student(S_num, S_name, S_phone, S_dept, S_grade)
  S_num -> S_name, S_dept(역은 성립x)
   



<완전/부분 종속>
- 완전 종속 : Relation의 Key에 의해 종속될 때
- 부분 종속 : Key의 일부분에 의해 종속될 때
ex) 수강(학번, 과목번호, 학과, 성적)에서 학번, 과목번호가 Key값일 때,
     F = {(학번, 과목번호) -> 성적, 학번 -> 학과
           학번, 과목번호 -> 성적(완전함수종속)
           학번 -> 학과(부분함수종속)
           학과 -> 학과번호(부분함수종족도 아니고 완전함수종속도 아니다) 왜냐하면, 학과가 Key가 아니기 때문




<Minimal cover>
- FD를 단순화시킨다
  1. F중의 FD의 오른쪽은 단순속성
  ex) A -> B, C / A->B, A->C

  2. F중의 FD의 왼편은 extraneous attribute가 없다
  ex) CD->E, if C->E or D->E를 체크

  3. F중에는 중복이 없다
  ex) A->B, B->C이면  'A->C' 불필요한 중복관계




<Lossless-Join Decomposition(무손실 분해)>
- 만일 table R이 R1과 R2로 분해된 경우 다음 중의 하나를 만족하면 lossless-decomposition된 것이다
  1. R1과 R2의 Intersection이 -> R1
  2. R1과 R2의 Intersection이 -> R2
  - R1과 R2의 Intersection이 R1을 결정한다는 말은 R1과 R2의 Intersection이 key임을 암시한다

ex)
R=(지점명, 자산, 위치, 대부번호, 고객명, 액수)
R1=(지점명, 자산, 위치) 지점명은 R1의 key
R2=(지점명, 대부번호, 고객명, 액수)
지점명은 R2에서 FK가 된다
즉, R1와 R2의 교집합 -> '지점명'으로 R1의 key가 된다
R1, R2로의 분할은 lossless-join decomposition이다

- N-ary decomposition : relation R이 n개의 sub-relation으로 decomposition되었을 때
  R -> R1, R2, ..., Rn
  Table T를 R에 대해서 구성한다
  ex) 주어진 R과 F가 다음과 같을 때
  R=(E, S, P, O)
  F={E->P, S->O}
  R1=(E, S)
  R2=(E, P, O)
  R3=(S, P, O)
     E     S    P      O
R1 Ve   Vs   null   null
R2 Ve   null  Vp    Vo
R3 null  Vs    Vp   Vo
세 개의 행 가운데 하나의 행이 distinguished varable로 구성이 되면 lossless-join decomposition이다
R1의 경우에 Ve, Vs만 distinguished varable
R2의 경우에 Ve, Vp, Vo만 distinguished varable
R3의 경우에 Vs, Vp, Vo만 distinguished varable

E -> P를 결정하면, E값(결정자)이 동일하면 P값(피결정자)도 동일하다
S -> O를 결정하면 S값(결정자)이 동일하면 O값(피결정자)도 동일하다
따라서 3*4열 테이블을 변환하면
     E    S     P  O
R1 Ve  Vs    Vp  Vo -> distinguished varable로 구성 => lossess-join decomposition(무손실 분해)
R2 Ve  null  Vp  Vo
R3 null Vs   Vp  Vo

ex)
R=(A, B, C, D)
F={C->D, A->B, B->C} KEY=A
R1=(C,D), R2=(B,C), R3=(A,B)

     A     B     C     D
R1  n     n    Vc    Vd
R2  n    Vb   Vc     n
R3  Va   Vb   n      n
첫 번째 함속관계를 적용 : C->D
두 번째 함수관계를 적용 : A->B
세 번째 함수관계를 적용 : B->C

     A     B     C            D
R1  n     n    Vc           Vd
R2  n    Vb   Vc           n->Vd
R3  Va   Vb   n->Vc      n->Vd
  1) C->D에 의해 R2의 D값이 치환
  2) B->C에 의해 R3의 C값이 치환
  3) C->D에 의해 R3의 D값이 치환
  함수종속관계의 적용이 더이상 변화를 주지 않을 때까지 반복 적용

'데이터베이스의 응용' 카테고리의 다른 글

데이터베이스 응용 정의  (0) 2023.08.29