Sad Puppy 3 'ComputerSicence' 카테고리의 글 목록 :: 개발자 아지트

*패리티 비트

정의: 정보 전달 과정에서 오류가 생겼는지 검사하기 위해 추가하는 비트

사용법: 전송하고자 하는 데이터의 각 문자에 1 비트를 더해 전송한다. 

 

예를들어서 "김민수" 라는 데이터가 있으면

김에 +1 = 8+1 = 9비트

지에 +1 = 8+1 = 9비트

연에 +1 = 8+1 = 9비트

 

이런식으로 각 문자에 1비트를 더해서 전송한다. 

 

종류: 짝수패리티, 홀수패리티

 

종류는 전송 시스템이나 프로토콜 설계하거나 설정할 때 미리 결정됨

송, 수신측에서 같은 규칙을 따를 수 있도록 사전에 합의 해야함

 

짝수패리티가 짝수개수를 다루기 쉬워서 일반적으로 더 많이 사용됨

 

종류는 전체 비트에서 1이 짝수개인지 홀수개인지에 따라 종류가 나뉜다는 의미이다. 

 

전체 비트에서 1의 개수가 (짝수, 홀수)에 맞도록 비트를 정하는 것

 

[짝수 패리티]

짝수 패리티 일 때 7비트 데이터가 1010001 (7자)라면?

1이 총 3개이므로, 1을 짝수로 맞춰주기 위해 1을 더해야 함 

 

만약 1의 개수가 짝수개라면? 0을 맨뒤에 추가한다. 

 

=> 11010001 (맨 앞이 패리티비트) (8자)

 

[홀수 패리티]

만약 데이터가 1010110이고, 1의 개수가 짝수라면, 홀수 패리티에서는 1의 개수가 홀수가 되도록 패리티 비트를 정해야함.

따라서 1을 추가해야함 1은 맨뒤에 추가함

만약 1의 개수가 이미 홀수라면, 패리티 비트로 0을 추가해 홀수를 유지한다. 

=> 10101101

 

 

지금 사이트에 있는 방식은 맨 앞에 추가하는 방식인데, 

패리티 비트를 맨 앞에 추가하는 것은 흔하지 않은 방식이고, 대부분 시스템이서는 패리티 비트를 맨 뒤에 추가함. 이것이 표준임.

 

 

이런 방식으로 검사하는 패리티 비트는 데이터를 수신 하는 쪽, 송신하는 쪽 모두에서 이뤄짐. 

만약 규칙이 맞지 않을 경우, 수신된 데이터에 오류가 발생한 것이라고 간주하고 처리함. 

오류가 발견되면 데이터 재전송을 요청하거나 오류를 알림.

 

앞에서 본 것처럼 패리티 비트는 단순한 오류 검출 매커니즘이라, 하드웨어나 소프트웨어에서 간단하게 구현할 수 있음

이 검사 과정은 보통 데이터 링크 계층이나 전송 계층에서 이뤄지고, 네트워크 카드나 모뎀, 통신 프로토콜 등에서 처리함

 

 

그러나,

 

패리티 비트는 1비트 오류만 검출할 수 있고, 2비트 이상의 오류는 검출하지 못하는 한계가 있다. 

 

예를들면, 

원래 데이터가 1010001 이고, 짝수 페리티를 사용하는 경우 전송데이터는 10100011이 되는데,

만약에 2비트 오류가 11100010 이런식으로 발생한 경우, 수신측에서 오류가 없다고 판단할 수 있음. 

 

또한 오류의 위치도 파악할 수 없음 

 

그래서 보다 복잡한 오류 검출 및 수정이 필요한 경우 CRC(Cyclic Redundancy Check), 해밍 코드 등의 다른 오류 검출 방식이 사용됨. 

 

*해밍코드 

 

 

 

정의:데이터 전송 시 1비트의 에러를 정정할 수 있는 자기 오류정정 코드를 말한다. 

페리티비트를 보고, 1비트에 대한 오류를 정정할 곳을 찾아 수정할 수 있다.

(패리티 비트는 오류를 검출하기만 할 뿐 수정하지는 않기 때문에 해밍 코드를 활용함)

 

사용법: 2의 n승 번째 자리인 1, 2, 4번째 비트가 패리티 비트라는 것 부터 시작함.

이 숫자로부터 시작하는 세개의 패리티 비트가 짝수인지, 홀수인지 기준으로 판별함. 

 

1, 2, 4 번째의 각 패리티 비트들은 데이터 내의 특정 비트 집합을 검사하는데, 

이때 비트 집합은 다음과 같다. 

 

1=> 1, 3, 5, 7 번째 비트 확인

2=> 2, 3, 6, 7번째 비트 확인

4=> 4, 5, 6, 7번째 비트 확인

 

비트를 확인할 때 앞에서 부터 읽는다. 

 

0011011

-> 이 방향 (1번째 비트 부터 시작)

 

짝수 패리티의 해밍코드가 0011011일때 오류가 수정된 코드는?

 

1. 1, 3, 5, 7 번째 비트 확인: 0101로 짝수이므로 '0'

2. 2, 3, 6, 7번째 비트 확인: 0111로 홀수이므로 '1'

3. 4, 5, 6, 7번째 비트 확인: 1011로 홀수이므로 '1'

 

역순으로 패리티 비트 110을 도출할 수 있음

10진법으로 바꾸면, 6으로, 6번째 비트를 수정하면 됨

0011001

 

erd란?

: 개체-관계 다이어그램

엔티티, 속성, 관계를 시각적으로 표현하는 방법이다. 

 

엔티티: 현실 세계에서 독립적으로 존재하는 객체, 데이터베이스에서는 테이블로 표현됨

속성: 엔티티의 특성이나 데이터를 나타내며, 엔티티를 설명하고 식별하는데 사용됨

관계; 엔티티 간의 연결을 나타내며, 데이터의 흐름을 정의함 

 

제 1정규화 : 하나의 속성이 하나의 값을 가져야함. (각 테이블의 모든 열이 원자 값을 가짐)

제 2정규화: 기본 키가 아닌 열이 기본 키의 모든 부분에 전적으로 종속하도록 한다. 

제 3정규화: 기본 키에만 의존하지 않는 불필요한 데이터를 제거한다. 

더보기

제 3정규화: 기본 키에만 의존하지 않는 불필요한 데이터를 제거한다. 

기본 키에만 의존하지 않는 불필요한 데이터를 제거한다는 말은 데이터베이스에서 부분 함수 종속과 관련된 문제를 해결하는 것을 의미해. 이것은 데이터를 저장할 때 정보가 중복되지 않도록 테이블을 잘 설계하는 방법 중 하나야. 쉽게 말해서, 데이터를 효율적으로 정리하는 방법이라고 생각하면 돼.

  • 기본 키(Primary Key): 데이터베이스에서 각 줄(row)을 고유하게 식별하는 값이야. 예를 들어, 학생 명단에서는 학생마다 고유한 학생 번호가 기본 키가 될 수 있어. 학생 번호가 같으면 같은 학생이라고 보면 돼.
  • 부분 함수 종속: 테이블의 어떤 칼럼(열)의 값이 기본 키의 일부분에 의해서만 결정되는 상황을 말해. 예를 들어, "수업" 테이블이 있다고 해보자. 여기에는 학생 번호, 수업 코드, 학생 이름, 수업 이름 같은 칼럼이 있어.

문제 상황:

  1. 만약 학생 번호와 수업 코드를 합쳐서 기본 키로 삼는다면, 각 줄은 한 학생이 특정 수업을 듣고 있다는 것을 나타내.
  2. 여기서 학생 이름은 학생 번호에만 의존하고, 수업 이름은 수업 코드에만 의존해.
  3. 이런 상황에서 한 학생이 여러 수업을 들으면 학생 이름이 여러 줄에 반복돼서 저장될 수 있어. 마찬가지로 여러 학생이 같은 수업을 들으면 수업 이름도 반복돼서 저장돼.

해결 방법:

이런 불필요한 중복을 피하기 위해 테이블을 나누는 거야:

  • 학생 테이블: 학생 번호, 학생 이름
  • 수업 테이블: 수업 코드, 수업 이름
  • 수강 테이블: 학생 번호, 수업 코드

이렇게 테이블을 나누면, 각 테이블의 정보가 기본 키에만 의존하게 돼. 따라서 데이터의 중복을 줄이고, 정보가 변경될 때 모든 관련 데이터를 일일이 수정하지 않아도 돼.

이것이 바로 기본 키에만 의존하지 않는 불필요한 데이터를 제거하는 이유야. 이렇게 하면 데이터베이스가 더 효율적으로 관리되고, 오류도 줄일 수 있어.

BCNF: BCNF는 3NF에서 더 나아가 모든 결정자가 후보키가 되도록 한다. 

 

더보기
 

BCNF(Boyce-Codd Normal Form)라는 것은 데이터베이스 테이블을 아주 잘 정리된 상태로 만드는 기준 중 하나야. 

기본 개념들

  • 기본 키(Primary Key): 각 줄(row)을 고유하게 구분할 수 있는 값이야. 학생 명단에서는 학생 번호가 기본 키가 될 수 있어.
  • 후보 키(Candidate Key): 기본 키로 쓸 수 있는 모든 키들을 말해. 기본 키도 후보 키 중 하나야. 예를 들어, 학생 테이블에서는 학생 번호가 유일하다면, 학생 번호가 후보 키야.
  • 결정자(Determinant): 어떤 칼럼의 값이 다른 칼럼의 값을 결정한다면, 이때 앞의 칼럼을 결정자라고 해. 예를 들어, 학생 번호가 있으면 그 학생의 이름을 알 수 있다면, 학생 번호가 학생 이름의 결정자야.

3NF(제3정규형)

3NF는 데이터를 중복 없이 잘 정리하는 기준 중 하나야. 이 기준에 맞으려면 모든 비기본 속성이 기본 키에만 의존해야 해. 예를 들어, 학생 테이블에서 '학생 번호'로 학생 이름과 학년을 알 수 있다면, 그건 3NF야.

BCNF(보이스-코드 정규형)

BCNF는 3NF보다 조금 더 철저한 기준이야. 이 기준에 따르면, 테이블의 모든 결정자는 후보 키여야 해. 즉, 모든 속성을 결정하는 값은 반드시 후보 키여야 한다는 뜻이야.

예시로 이해하기

문제 상황

학생이 듣는 수업을 기록한 테이블을 생각해 보자.

학생 번호수업 코드강의실
1 MATH101 101A
2 SCI102 102B
1 SCI102 102B
  • 여기서 '수업 코드'가 '강의실'을 결정한다고 해보자. 그러니까 'MATH101'은 항상 '101A' 강의실에서 열려.

BCNF가 아닌 이유

이 테이블은 BCNF가 아니야. 왜냐하면 '수업 코드'가 '강의실'을 결정하는데, '수업 코드' 자체는 후보 키가 아니거든. 후보 키는 '학생 번호 + 수업 코드'가 돼야 해.

BCNF로 만들기

테이블을 다음과 같이 나누면 돼:

  1. 수업 테이블 (수업 정보만 따로 분리)수업 코드강의실
    MATH101 101A
    SCI102 102B
  2. 학생 수강 테이블 (학생과 수업 정보만 남김)학생 번호수업 코드
    1 MATH101
    2 SCI102
    1 SCI102

이렇게 나누면, 모든 결정자가 후보 키가 돼서 BCNF를 만족하게 돼!

요약

  • 3NF: 기본 키에만 의존하도록 중복을 제거하는 기준.
  • BCNF: 모든 결정자가 후보 키가 되도록 더 철저하게 정리하는 기준.

이렇게 하면 데이터의 일관성을 유지하고, 오류를 줄일 수 있어. 이런 방식으로 데이터를 정리하는 것은 데이터베이스를 관리하는 중요한 방법이야!

 

제 4정규화: 다치 종속을 제거하여 중복을 줄임

더보기

4NF(제4정규형)은 데이터베이스를 정리할 때 다치 종속(Multi-Valued Dependency)을 제거하여 중복을 더 줄이는 방법이야. 

기본 개념들

  • 다치 종속(Multi-Valued Dependency): 한 속성이 여러 값과 연관될 수 있는 상황이야. 예를 들어, 학생이 여러 과목을 들을 수 있고, 또 여러 활동을 할 수 있다고 해보자. 여기서 학생은 과목과 활동에 다치 종속성을 가질 수 있어.

예시로 이해하기

문제 상황

학생의 수업과 활동을 기록한 테이블이 있다고 해보자.

학생 이름과목활동
철수 수학 축구
철수 영어 축구
철수 수학 수영
철수 영어 수영
  • 철수가 듣는 과목은 수학과 영어야.
  • 철수가 하는 활동은 축구와 수영이야.

중복 문제

이 테이블에는 중복이 많아. 철수가 수학을 듣는다는 정보와 축구를 한다는 정보가 여러 번 반복돼. 이렇게 되면 데이터가 많아지고, 수정하기도 불편해.

다치 종속 해결

4NF는 이런 중복을 없애기 위해 테이블을 나누는 방법이야.

  1. 학생과 과목 테이블 (학생이 듣는 과목만 기록)학생 이름과목
    철수 수학
    철수 영어
  2. 학생과 활동 테이블 (학생이 하는 활동만 기록)학생 이름활동
    철수 축구
    철수 수영

이렇게 나누면 철수가 듣는 과목과 하는 활동이 각각 따로 기록돼서 중복이 줄어들어!

요약

  • 다치 종속: 한 속성이 여러 값과 관련 있는 경우.
  • 4NF: 다치 종속을 제거하여 데이터의 중복을 줄이고, 관리하기 쉽게 만드는 방법.

이렇게 데이터를 정리하면 정보가 깔끔하게 저장되고, 나중에 변경하거나 확인할 때 더 편리해져!

 

제 5정규화: 더 이상 분해를 할 수 없을 때 까지 테이블을 분해한다. 

 

 

 

+ Recent posts