<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ko">
	<id>https://devhrxoobm.itwiki.kr/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Lunalcni</id>
	<title>IT 위키 - 사용자 기여 [ko]</title>
	<link rel="self" type="application/atom+xml" href="https://devhrxoobm.itwiki.kr/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Lunalcni"/>
	<link rel="alternate" type="text/html" href="https://devhrxoobm.itwiki.kr/w/%ED%8A%B9%EC%88%98:%EA%B8%B0%EC%97%AC/Lunalcni"/>
	<updated>2026-09-16T18:01:03Z</updated>
	<subtitle>사용자 기여</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>https://devhrxoobm.itwiki.kr/index.php?title=%EB%94%94%ED%94%BC-%ED%97%AC%EB%A8%BC_%ED%82%A4_%EA%B5%90%ED%99%98&amp;diff=39982</id>
		<title>디피-헬먼 키 교환</title>
		<link rel="alternate" type="text/html" href="https://devhrxoobm.itwiki.kr/index.php?title=%EB%94%94%ED%94%BC-%ED%97%AC%EB%A8%BC_%ED%82%A4_%EA%B5%90%ED%99%98&amp;diff=39982"/>
		<updated>2024-11-18T22:08:22Z</updated>

		<summary type="html">&lt;p&gt;Lunalcni: 수식 적용 및 공유된 키에 대한 서술 오류 수정&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[분류:보안]][[분류:암호학]][[분류:정보보안기사]]&lt;br /&gt;
;Diffie-Hellman Key Exchange&lt;br /&gt;
디피라는 사람과 헬만 이라는 사람이 공동 개발했다고 해서 &#039;디피-헬만&#039;이다. 디피-헬만 키 교환법, 디피-헬만 알고리즘, 디피-헬만 프로토콜등 다양한 이름으로 불린다.&lt;br /&gt;
&lt;br /&gt;
== 핵심 ==&lt;br /&gt;
; 디피-헬만법은 이산대수의 어려움을 이용한 알고리즘이다. 쉽게 말해 주어진 g, x, p 를 이용하여 y = g^x mod p 를 구하기는 쉽지만 g, y , p 값을 이용하여 원래의 x를 찾기 어렵다는 원리를 이용한 것이다.&lt;br /&gt;
*  비대칭키(공개키) 알고리즘에서 사용되는 키 교환 방식이다.&lt;br /&gt;
* 상대방의 공개키와 나의 개인키를 이용하여 비밀키를 생성한다.&lt;br /&gt;
* A의 공개키와 B의 개인키를 DH연산하면 B의 비밀키가 되고&lt;br /&gt;
* B의 공개키와 A의 개인키를 DH연산하면 A의 비밀키가 된다.&lt;br /&gt;
* 이산대수법에 의거한 수학적 공식에 의해 A의 비밀키와 B의 비밀키는 같아진다.&lt;br /&gt;
* 송신자와 수신자는 안전하게 교환된 비밀키를 사용하여 데이터를 암호화한 후 전달한다.&lt;br /&gt;
&lt;br /&gt;
== 예시 == &lt;br /&gt;
# 당사자들은 임의 큰 소수 p와 그보다 작은 자연수 g를 선택한다.&lt;br /&gt;
#* p=17와 그보다 작은 자연수 g=2로 선택했다.&lt;br /&gt;
# 각자 자신의 개인 키를 선택한다.&lt;br /&gt;
#*A의 개인 키 = 11&lt;br /&gt;
#* B의 개인 키 = 13&lt;br /&gt;
#상대방에게 각자 개인키로 g&amp;lt;sup&amp;gt;&amp;lt;개인 키&amp;gt;&amp;lt;/sup&amp;gt; mod p를 계산한 공개 키를 보낸다. &lt;br /&gt;
#*A는 B에게 2&amp;lt;sup&amp;gt;11&amp;lt;/sup&amp;gt;(mod 17) = &#039;&#039;&#039;8&#039;&#039;&#039;을 보낸다.&lt;br /&gt;
#* B는 A에게 2&amp;lt;sup&amp;gt;13&amp;lt;/sup&amp;gt;(mod 17) = &#039;&#039;&#039;15&#039;&#039;&#039;를 보낸다.&lt;br /&gt;
#각자 &amp;lt;상대 공개 키&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;본인 개인 키&amp;gt;&amp;lt;/sup&amp;gt;(mod p) 계산을 통해 비밀키를 만들어낸다.&lt;br /&gt;
#*A는 받은 15으로 계산한다. 15&amp;lt;sup&amp;gt;11&amp;lt;/sup&amp;gt;(mod 17) = &#039;&#039;&#039;9&#039;&#039;&#039;&lt;br /&gt;
#* B는 받은 8로 계산한다.  8&amp;lt;sup&amp;gt;13&amp;lt;/sup&amp;gt;(mod 17) = &#039;&#039;&#039;9&#039;&#039;&#039;&lt;br /&gt;
#*공유된 키인 9를 사용한다.&lt;br /&gt;
#결론 &lt;br /&gt;
#*A만 알고 있는 키는 11, B만 알고 있는 키는 13이다.&lt;br /&gt;
#* 외부에 노출될 우려가 있는 값은 2, 17, 8, 15이다. (노출 되어도 상관 없음)&lt;br /&gt;
#*둘만 알고 있는 키는 &#039;&#039;&#039;9&#039;&#039;&#039;이다. (개인 키를 모르기 때문에, 노출의 우려가 없음)&lt;br /&gt;
&lt;br /&gt;
지금은 예시이기 때문에 매우 작은 숫자를 이용하였으나, 숫자가 수십~수백 자리로 커지게 되면 2, 17, 8, 15에 해당하는 숫자는 노출이 되어도 개인 키를 모르기 때문에 공유된 키 값을 유추하기 어렵다는 것이 수학적 안전성의 근거이다.&lt;br /&gt;
&lt;br /&gt;
==취약점==&lt;br /&gt;
*신분위장 공격에 취약하다 &lt;br /&gt;
**인증 과정이 없다.&lt;br /&gt;
**애초에 B가 아닌 사람이 B인척 하여 키를 교환할 수 있다.&lt;br /&gt;
**연산된 결과인 비밀키만 취득한 제 3자가 B 행세를 할 수도 있다.&lt;br /&gt;
*재전송 공격에 취약하다 &lt;br /&gt;
** 암호화된 정보를 스니핑 해서 재전송 함으로써 행위를 조작할 수 있다.&lt;br /&gt;
**&#039;&#039;&#039;정보의 무결성이 보장되지 않는다&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
;디피-헬만 키 교환은 단순히 안전한 키 교환에 의한 안전성에 의존하므로 단독으로 사용하기엔 부족하다. 디피-헬만은 수 많은 프로토콜에서 사용되고 있지만 모두 인증, 무결성, 부인방지 등의 추가적인 안전성을 더해서 사용한다.&lt;br /&gt;
&lt;br /&gt;
==출처==&lt;br /&gt;
출처 : [[http://raisonde.tistory.com/entry/디피-헬만-키-교환-알고리즘Diffie-Hellman-key-exchange 지식잡식 블로그]]&lt;/div&gt;</summary>
		<author><name>Lunalcni</name></author>
	</entry>
	<entry>
		<id>https://devhrxoobm.itwiki.kr/index.php?title=%EB%8D%B0%EC%9D%B4%ED%84%B0_%EB%A7%81%ED%81%AC_%EA%B3%84%EC%B8%B5&amp;diff=38668</id>
		<title>데이터 링크 계층</title>
		<link rel="alternate" type="text/html" href="https://devhrxoobm.itwiki.kr/index.php?title=%EB%8D%B0%EC%9D%B4%ED%84%B0_%EB%A7%81%ED%81%AC_%EA%B3%84%EC%B8%B5&amp;diff=38668"/>
		<updated>2023-10-26T04:43:53Z</updated>

		<summary type="html">&lt;p&gt;Lunalcni: 상위 문서 링크&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[분류:네트워크]]&lt;br /&gt;
==개요==&lt;br /&gt;
* [[OSI 7계층]] 모델의 2번째 계층&lt;br /&gt;
* 데이터 패킷을 생성하고 전송하는 방법을 규정한다.&lt;br /&gt;
&lt;br /&gt;
==하위 계층 2개==&lt;br /&gt;
===[[MAC]]===&lt;br /&gt;
* Media Access Control&lt;br /&gt;
* 장비가 네트워크 매체에 대한 접근을 통제하는데 사용되는 절차&lt;br /&gt;
&lt;br /&gt;
===[[LLC]]===&lt;br /&gt;
* Logical Link Control&lt;br /&gt;
* 네트워크 노드 장비 간 논리적 연결 수립·제어 명세&lt;br /&gt;
&lt;br /&gt;
== 프로토콜 ==&lt;br /&gt;
* [[HDLC]]&lt;br /&gt;
* [[이더넷|이더넷(Ethernet)]]: 현재 가장 많이 쓰인다&lt;br /&gt;
* [[X.25]]: [[패킷 스위칭]] 2계층 기술로, 현재는 거의 사용되지 않는다.&lt;br /&gt;
* [[FrameRelay]]: [[패킷 스위칭]] 2계층 기술로, 현재는 거의 사용되지 않는다.&lt;br /&gt;
* [[ATM]]: [[패킷 스위칭]] 2계층 기술로, 현재는 거의 사용되지 않는다.&lt;br /&gt;
* [[토큰링|토큰링(Token Ring)]]&lt;br /&gt;
* [[DFFI]]&lt;br /&gt;
* [[L2TTP]]&lt;br /&gt;
* [[L2F]]&lt;br /&gt;
* [[PPP]]&lt;br /&gt;
* [[PPTP]]&lt;br /&gt;
* [[MPLS]]&lt;br /&gt;
&lt;br /&gt;
==3가지 기능==&lt;br /&gt;
===회선제어===&lt;br /&gt;
* 노드와 노드간의 통신 제어 규범(line discipline)&lt;br /&gt;
* 회선 분류 : 점대점 또는 멀티포인트 회선, 단방향 또는 반이중 또는 양방향&lt;br /&gt;
* 절차: 회선 연결 → 데이터 링크 확립 → 데이터 전송 → 데이터 링크 해제 → 회선 절단&lt;br /&gt;
&lt;br /&gt;
===흐름제어===&lt;br /&gt;
* 수신 장치의 용량 이상으로 데이터가 넘치지 않도록 송신 장치를 제어&lt;br /&gt;
* 제어방식 : [[정지-대기 기법]](Stop and Wait), [[슬라이딩 윈도우]](Sliding Window)&lt;br /&gt;
&lt;br /&gt;
===오류제어===&lt;br /&gt;
* 감쇠, 잡음, 주파수혼란 등으로 전송된 데이터상에 발생될 수 있는 오류의 해결을 위한 제어&lt;br /&gt;
* 오류 제어 기술로 [[순방향 오류 정정]](FEC)와 [[자동 재전송 요구]](ARQ)등이 있다.&lt;/div&gt;</summary>
		<author><name>Lunalcni</name></author>
	</entry>
	<entry>
		<id>https://devhrxoobm.itwiki.kr/index.php?title=OSI_7%EA%B3%84%EC%B8%B5&amp;diff=38667</id>
		<title>OSI 7계층</title>
		<link rel="alternate" type="text/html" href="https://devhrxoobm.itwiki.kr/index.php?title=OSI_7%EA%B3%84%EC%B8%B5&amp;diff=38667"/>
		<updated>2023-10-26T04:43:00Z</updated>

		<summary type="html">&lt;p&gt;Lunalcni: 띄어쓰기 수정 및 링크 위치 변경&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 개요 ==&lt;br /&gt;
* Open Systems Interconnection Reference Model 7 Layer&lt;br /&gt;
*:-개방형 시스템 상호연결 참조 모델 7계층&lt;br /&gt;
* 국제 표준화 기구(ISO)에서 개발한 통신에 관한 계층화 표준 모델&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 의의 ==&lt;br /&gt;
* 분산된 이기종 시스템간의 네트워크 상호호환을 위한 표준 아키텍처를 정의할수 있다.&lt;br /&gt;
* 통신에 관련된 목적을 달성하기 계층별로 분할하여 분업이 가능하다. (Divide and conquer)&lt;br /&gt;
* 기술표준인 기존 TCP 4계층 모델이 계층별로 역할이 불명확하여 발생했던 많은 문제들에 대한 해답을 제시한다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 7계층 ==&lt;br /&gt;
=== Layer 1 : 물리 계층(Physical layer) ===&lt;br /&gt;
* 물리적인 장치의 전기적, 전자적 연결에 대한 명세&lt;br /&gt;
* 디지털 데이터를 아날로그적인 전기적 신호로 변환하여 물리적인 전송이 가능케 한다.&lt;br /&gt;
* 주소 개념이 없으며 물리적으로 연결된 노드간에 신호를 주고 받는다.&lt;br /&gt;
&lt;br /&gt;
 - 단위(PDU) : 비트(Bit)&lt;br /&gt;
 - 주요 프로토콜 : [[X.21]], [[RS-232]] 등&lt;br /&gt;
 - 주요 장비 : [[허브]](HUB), [[리피터]](Repeater) [[네트워크 카드]](NIC : Network Interface Card) 등&lt;br /&gt;
&lt;br /&gt;
=== [[데이터 링크 계층|Layer 2: 데이터 링크 계층(Data link layer)]] ===&lt;br /&gt;
* 인접한 노드간의 신뢰성 있는 데이터(단위 : 프레임) 전송을 제어(&#039;&#039;&#039;Node-to-Node Delivery&#039;&#039;&#039;)&lt;br /&gt;
* 네트워크 카드의 [[MAC]](Media Access Control)주소를 통해 목적지를 찾아간다.&lt;br /&gt;
* 신뢰성 있는 전송을 위해 흐름제어(Flow Control), 오류제어(Error Control), 회선제어(Line Control)을 수행한다.&lt;br /&gt;
* 논리링크제어계층, 매체접근제어계층이라는 두 개의 부계층으로 나뉜다.&lt;br /&gt;
&lt;br /&gt;
 - 단위(PDU) : 프레임(Frame)&lt;br /&gt;
 - 주요 프로토콜 : [[HDLC]], [[X.25]], [[Ethernet]], [[TokenRing]], [[DFFI]], [[FrameRelay]] 등&lt;br /&gt;
 - 주요 장비 : [[브리지]](Bridge), [[L2 Switch]] 등&lt;br /&gt;
&lt;br /&gt;
=== Layer 3: 네트워크 계층(Network layer) ===&lt;br /&gt;
* 종단간 전송을 위한 경로 설정을 담당한다. (&#039;&#039;&#039;End-To-End&#039;&#039;&#039; 혹은 &#039;&#039;&#039;Host-To-Host Delivery&#039;&#039;&#039;)&lt;br /&gt;
* 호스트로 도달하기 위한 최적의 경로를 라우팅 알고리즘을 통해 선택하고 제어한다.&lt;br /&gt;
* 종단간 전송을 위한 주소로 IP주소를 사용한다.&lt;br /&gt;
* 최대크기1500바이트&lt;br /&gt;
&lt;br /&gt;
 - 단위(PDU) : 패킷(Packet)&lt;br /&gt;
 - 주요 프로토콜 - IP, ARP, ICMP, IGMP, RIP, RIP v2, OSPF, IGRP, EIGRP, BGP 등&lt;br /&gt;
 - 주요 장비 : [[라우터]](Router), [[L3 Switch]]&lt;br /&gt;
=== Layer 4: 전송 계층(Transport layer) ===&lt;br /&gt;
* 종단간 신뢰성 있는 데이터 전송을 담당한다. (&#039;&#039;&#039;End-To-End Reliable Delivery&#039;&#039;&#039;)&lt;br /&gt;
* 종단(Host)의 구체적인 목적지(Process)까지 데이터가 도달할 수 있도록 한다. (&#039;&#039;&#039;Process-To-Process Communication&#039;&#039;&#039;)&lt;br /&gt;
* Process를 특정하기 위한 주소로 Port Number를 이용한다.&lt;br /&gt;
* 신뢰성 있는 데이터 전송을 위해 분할과 재조합, 연결제어, 흐름제어, 오류제어, 혼잡제어를 수행한다.&lt;br /&gt;
&lt;br /&gt;
 - 단위(PDU) : 세그먼트(Segment)&lt;br /&gt;
 - 주요 프로토콜 : [[TCP]], [[UDP]]&lt;br /&gt;
 - 주요 장비 : L4 Switch&lt;br /&gt;
&lt;br /&gt;
=== Layer 5: 세션 계층(Session layer) ===&lt;br /&gt;
* 응용 프로그램간의 논리적인 연결(세션) 생성 및 제어를 담당한다.&lt;br /&gt;
* TCP/IP 통신 연결을 수립/ 유지/중단&lt;br /&gt;
&lt;br /&gt;
 - 단위(PDU) : 데이터(Data) 또는 메세지(Message)&lt;br /&gt;
 - 주요 프로토콜 : 해당사항 없음&lt;br /&gt;
 - 주요 장비 : 해당사항 없음&lt;br /&gt;
=== Layer 6: 표현 계층(Presentation layer) ===&lt;br /&gt;
* 데이터 표현방식, 상이한 부호체계 간의 변화에 대해 규정한다.&lt;br /&gt;
* 인코딩/디코딩, 압축/해제, 암호화/복호화 등의 역할을 수행한다.&lt;br /&gt;
&lt;br /&gt;
 - 단위(PDU) : 데이터(Data)&lt;br /&gt;
 - 주요 프로토콜 : 해당사항 없음&lt;br /&gt;
 - 주요 장비 : 해당사항 없음&lt;br /&gt;
=== Layer 7: 응용 계층(Application layer) ===&lt;br /&gt;
&lt;br /&gt;
* 응용서비스 HTTP, SMTP&lt;br /&gt;
&lt;br /&gt;
 - 단위(PDU) : 데이터(Data)&lt;br /&gt;
 - 주요 프로토콜 : TELNET, FTP, SMTP, HTTP 등&lt;br /&gt;
 - 주요 장비 : 해당사항 없음&lt;br /&gt;
&lt;br /&gt;
[[분류:네트워크]]&lt;br /&gt;
[[분류:정보처리기사]]&lt;br /&gt;
[[분류:정보보안기사]]&lt;/div&gt;</summary>
		<author><name>Lunalcni</name></author>
	</entry>
	<entry>
		<id>https://devhrxoobm.itwiki.kr/index.php?title=%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%A7%81%ED%81%AC_%EA%B3%84%EC%B8%B5&amp;diff=38666</id>
		<title>데이터링크 계층</title>
		<link rel="alternate" type="text/html" href="https://devhrxoobm.itwiki.kr/index.php?title=%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%A7%81%ED%81%AC_%EA%B3%84%EC%B8%B5&amp;diff=38666"/>
		<updated>2023-10-26T04:40:39Z</updated>

		<summary type="html">&lt;p&gt;Lunalcni: Lunalcni님이 데이터링크 계층 문서를 데이터 링크 계층 문서로 이동했습니다:  띄어쓰기 수정&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#넘겨주기 [[데이터 링크 계층]]&lt;/div&gt;</summary>
		<author><name>Lunalcni</name></author>
	</entry>
	<entry>
		<id>https://devhrxoobm.itwiki.kr/index.php?title=%EB%8D%B0%EC%9D%B4%ED%84%B0_%EB%A7%81%ED%81%AC_%EA%B3%84%EC%B8%B5&amp;diff=38665</id>
		<title>데이터 링크 계층</title>
		<link rel="alternate" type="text/html" href="https://devhrxoobm.itwiki.kr/index.php?title=%EB%8D%B0%EC%9D%B4%ED%84%B0_%EB%A7%81%ED%81%AC_%EA%B3%84%EC%B8%B5&amp;diff=38665"/>
		<updated>2023-10-26T04:40:38Z</updated>

		<summary type="html">&lt;p&gt;Lunalcni: Lunalcni님이 데이터링크 계층 문서를 데이터 링크 계층 문서로 이동했습니다:  띄어쓰기 수정&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[분류:네트워크]]&lt;br /&gt;
==개요==&lt;br /&gt;
* OSI 모델에서의 2번째 계층&lt;br /&gt;
* 데이터 패킷을 생성하고 전송하는 방법을 규정한다.&lt;br /&gt;
&lt;br /&gt;
==하위 계층 2개==&lt;br /&gt;
===[[MAC]]===&lt;br /&gt;
* Media Access Control&lt;br /&gt;
* 장비가 네트워크 매체에 대한 접근을 통제하는데 사용되는 절차&lt;br /&gt;
&lt;br /&gt;
===[[LLC]]===&lt;br /&gt;
* Logical Link Control&lt;br /&gt;
* 네트워크 노드 장비 간 논리적 연결 수립·제어 명세&lt;br /&gt;
&lt;br /&gt;
== 프로토콜 ==&lt;br /&gt;
* [[HDLC]]&lt;br /&gt;
* [[이더넷|이더넷(Ethernet)]]: 현재 가장 많이 쓰인다&lt;br /&gt;
* [[X.25]]: [[패킷 스위칭]] 2계층 기술로, 현재는 거의 사용되지 않는다.&lt;br /&gt;
* [[FrameRelay]]: [[패킷 스위칭]] 2계층 기술로, 현재는 거의 사용되지 않는다.&lt;br /&gt;
* [[ATM]]: [[패킷 스위칭]] 2계층 기술로, 현재는 거의 사용되지 않는다.&lt;br /&gt;
* [[토큰링|토큰링(Token Ring)]]&lt;br /&gt;
* [[DFFI]]&lt;br /&gt;
* [[L2TTP]]&lt;br /&gt;
* [[L2F]]&lt;br /&gt;
* [[PPP]]&lt;br /&gt;
* [[PPTP]]&lt;br /&gt;
* [[MPLS]]&lt;br /&gt;
&lt;br /&gt;
==3가지 기능==&lt;br /&gt;
===회선제어===&lt;br /&gt;
* 노드와 노드간의 통신 제어 규범(line discipline)&lt;br /&gt;
* 회선 분류 : 점대점 또는 멀티포인트 회선, 단방향 또는 반이중 또는 양방향&lt;br /&gt;
* 절차: 회선 연결 → 데이터 링크 확립 → 데이터 전송 → 데이터 링크 해제 → 회선 절단&lt;br /&gt;
&lt;br /&gt;
===흐름제어===&lt;br /&gt;
* 수신 장치의 용량 이상으로 데이터가 넘치지 않도록 송신 장치를 제어&lt;br /&gt;
* 제어방식 : [[정지-대기 기법]](Stop and Wait), [[슬라이딩 윈도우]](Sliding Window)&lt;br /&gt;
&lt;br /&gt;
===오류제어===&lt;br /&gt;
* 감쇠, 잡음, 주파수혼란 등으로 전송된 데이터상에 발생될 수 있는 오류의 해결을 위한 제어&lt;br /&gt;
* 오류 제어 기술로 [[순방향 오류 정정]](FEC)와 [[자동 재전송 요구]](ARQ)등이 있다.&lt;/div&gt;</summary>
		<author><name>Lunalcni</name></author>
	</entry>
	<entry>
		<id>https://devhrxoobm.itwiki.kr/index.php?title=%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4_%ED%82%A4&amp;diff=38664</id>
		<title>데이터베이스 키</title>
		<link rel="alternate" type="text/html" href="https://devhrxoobm.itwiki.kr/index.php?title=%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4_%ED%82%A4&amp;diff=38664"/>
		<updated>2023-10-23T01:24:20Z</updated>

		<summary type="html">&lt;p&gt;Lunalcni: 외부 키 성질에 대한 잘못된 서술 수정&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[분류:데이터베이스]][[분류:정보처리기사]]&lt;br /&gt;
;Database Key&lt;br /&gt;
;릴레이션의 튜플을 식별하기 위한 속성의 집합&lt;br /&gt;
&lt;br /&gt;
== 특징 ==&lt;br /&gt;
* 유일성: 유일한 값을 가져야 한다.&lt;br /&gt;
* 최소성: 최소한의 값으로 식별할 수 있어야 한다.&lt;br /&gt;
* 불변성: 변하는 값이어선 안된다.&lt;br /&gt;
* 존재성: 반드시 존재해야 한다. 누구한텐 있고 누구한테는 없어선 안된다.&lt;br /&gt;
&lt;br /&gt;
== 종류 ==&lt;br /&gt;
=== 슈퍼 키(Super Key) ===&lt;br /&gt;
* 어떤 릴레이션의 어떠한 튜플들도 같은 값을 가지지 않는 속성, 또는 속성들의 조합&lt;br /&gt;
* 유일성 O / 최소성&amp;lt;ref&amp;gt;최소성은 단순히 집합의 개수를 얘기하는 것이 아니라, 속성 집합에서 하나의 속성을 제거하는 경우 더 이상 해당 속성 집합이 릴레이션의 튜플을 식별할 수 없는 것을 말한다&amp;lt;/ref&amp;gt; X&lt;br /&gt;
&lt;br /&gt;
=== 후보 키(Candidate Key) ===&lt;br /&gt;
* Tuple을 유일하게 식별하기 위해 사용되는 속성들의 부분집합&lt;br /&gt;
* 유일성 O / 최소성 O&lt;br /&gt;
&lt;br /&gt;
=== [[데이터베이스 기본 키|기본 키(Primary Key)]] ===&lt;br /&gt;
* 후보키 중 선정된 Key &lt;br /&gt;
* 중복된 값 X / Not Null / 유일성 O / 최소성 O&lt;br /&gt;
&lt;br /&gt;
=== 대체 키(Alternate Key) ===&lt;br /&gt;
* 후보 키 중 선정된 기본 키를 뺀 나머지 키들&lt;br /&gt;
* 유일성 O / 최소성 O&lt;br /&gt;
&lt;br /&gt;
=== 외부 키(Foreign Key)===&lt;br /&gt;
* 다른 릴레이션의 Primary Key를 참조하는 속성&lt;br /&gt;
* 중복 여부에 따라&lt;br /&gt;
** 중복인 경우, 일대다 관계(One-to-Many Relationship)&lt;br /&gt;
** 중복이 아닌 경우, 일대일 관계(One-to-One relationship)&lt;br /&gt;
* Not Null 여부에 따라&lt;br /&gt;
** Not Null인 경우, 필수 관계(Mandatory Relationship)&lt;br /&gt;
** Nullable인 경우, 선택 관계(Optional Relationship)&lt;br /&gt;
&lt;br /&gt;
== 예시 ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!사번&lt;br /&gt;
!이름&lt;br /&gt;
!나이&lt;br /&gt;
!이메일&lt;br /&gt;
|-&lt;br /&gt;
|100&lt;br /&gt;
|김씨&lt;br /&gt;
|30&lt;br /&gt;
|kim1@gmail.com&lt;br /&gt;
|-&lt;br /&gt;
|200&lt;br /&gt;
|김씨&lt;br /&gt;
|41&lt;br /&gt;
|kim2@gmail.com&lt;br /&gt;
|-&lt;br /&gt;
|300&lt;br /&gt;
|이씨&lt;br /&gt;
|38&lt;br /&gt;
|lee@gmail.com&lt;br /&gt;
|-&lt;br /&gt;
|400&lt;br /&gt;
|박씨&lt;br /&gt;
|29&lt;br /&gt;
|park@gmail.com&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 슈퍼 키 목록 ===&lt;br /&gt;
릴레이션의 튜플을 식별할 수 있는 모든 속성 집합&lt;br /&gt;
&lt;br /&gt;
* (사번)&lt;br /&gt;
* (사번, 이름)&lt;br /&gt;
* (사번, 이름, 나이)&lt;br /&gt;
* (사번, 이름, 나이, 이메일)&lt;br /&gt;
* (이름, 나이)&lt;br /&gt;
* (이름, 나이, 이메일)&lt;br /&gt;
* (이메일)&lt;br /&gt;
&lt;br /&gt;
=== 후보 키 목록 ===&lt;br /&gt;
슈퍼 키 중 최소성을 만족하는 속성 집합&lt;br /&gt;
&lt;br /&gt;
* (사번)&lt;br /&gt;
* (이름, 나이)&lt;br /&gt;
* (이메일)&lt;br /&gt;
&lt;br /&gt;
=== 기본 키와 대체 키 ===&lt;br /&gt;
설계자의 판단에 따라 구분&lt;br /&gt;
&lt;br /&gt;
* 기본 키: (사번)&lt;br /&gt;
* 대체 키: (이름, 나이), (이메일)&lt;/div&gt;</summary>
		<author><name>Lunalcni</name></author>
	</entry>
	<entry>
		<id>https://devhrxoobm.itwiki.kr/index.php?title=%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4_%ED%82%A4&amp;diff=38663</id>
		<title>데이터베이스 키</title>
		<link rel="alternate" type="text/html" href="https://devhrxoobm.itwiki.kr/index.php?title=%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4_%ED%82%A4&amp;diff=38663"/>
		<updated>2023-10-23T01:14:17Z</updated>

		<summary type="html">&lt;p&gt;Lunalcni: 예시 추가 및 최소성에 대한 설명 추가&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[분류:데이터베이스]][[분류:정보처리기사]]&lt;br /&gt;
;Database Key&lt;br /&gt;
;릴레이션의 튜플을 식별하기 위한 속성의 집합&lt;br /&gt;
&lt;br /&gt;
== 특징 ==&lt;br /&gt;
* 유일성: 유일한 값을 가져야 한다.&lt;br /&gt;
* 최소성: 최소한의 값으로 식별할 수 있어야 한다.&lt;br /&gt;
* 불변성: 변하는 값이어선 안된다.&lt;br /&gt;
* 존재성: 반드시 존재해야 한다. 누구한텐 있고 누구한테는 없어선 안된다.&lt;br /&gt;
&lt;br /&gt;
== 종류 ==&lt;br /&gt;
=== 슈퍼 키(Super Key) ===&lt;br /&gt;
* 어떤 릴레이션의 어떠한 튜플들도 같은 값을 가지지 않는 속성, 또는 속성들의 조합&lt;br /&gt;
* 유일성 O / 최소성&amp;lt;ref&amp;gt;최소성은 단순히 집합의 개수를 얘기하는 것이 아니라, 속성 집합에서 하나의 속성을 제거하는 경우 더 이상 해당 속성 집합이 릴레이션의 튜플을 식별할 수 없는 것을 말한다&amp;lt;/ref&amp;gt; X&lt;br /&gt;
&lt;br /&gt;
=== 후보 키(Candidate Key) ===&lt;br /&gt;
* Tuple을 유일하게 식별하기 위해 사용되는 속성들의 부분집합&lt;br /&gt;
* 유일성 O / 최소성 O&lt;br /&gt;
&lt;br /&gt;
=== [[데이터베이스 기본 키|기본 키(Primary Key)]] ===&lt;br /&gt;
* 후보키 중 선정된 Key &lt;br /&gt;
* 중복된 값 X / Not Null / 유일성 O / 최소성 O&lt;br /&gt;
&lt;br /&gt;
=== 대체 키(Alternate Key) ===&lt;br /&gt;
* 후보 키 중 선정된 기본 키를 뺀 나머지 키들&lt;br /&gt;
* 유일성 O / 최소성 O&lt;br /&gt;
&lt;br /&gt;
=== 외부 키(Foreign Key)===&lt;br /&gt;
* 다른 릴레이션의 Primary Key를 참조하는 속성&lt;br /&gt;
* 중복된 값 X / Not Null / 유일성 O / 최소성 O&lt;br /&gt;
&lt;br /&gt;
== 예시 ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!사번&lt;br /&gt;
!이름&lt;br /&gt;
!나이&lt;br /&gt;
!이메일&lt;br /&gt;
|-&lt;br /&gt;
|100&lt;br /&gt;
|김씨&lt;br /&gt;
|30&lt;br /&gt;
|kim1@gmail.com&lt;br /&gt;
|-&lt;br /&gt;
|200&lt;br /&gt;
|김씨&lt;br /&gt;
|41&lt;br /&gt;
|kim2@gmail.com&lt;br /&gt;
|-&lt;br /&gt;
|300&lt;br /&gt;
|이씨&lt;br /&gt;
|38&lt;br /&gt;
|lee@gmail.com&lt;br /&gt;
|-&lt;br /&gt;
|400&lt;br /&gt;
|박씨&lt;br /&gt;
|29&lt;br /&gt;
|park@gmail.com&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 슈퍼 키 목록 ===&lt;br /&gt;
릴레이션의 튜플을 식별할 수 있는 모든 속성 집합&lt;br /&gt;
&lt;br /&gt;
* (사번)&lt;br /&gt;
* (사번, 이름)&lt;br /&gt;
* (사번, 이름, 나이)&lt;br /&gt;
* (사번, 이름, 나이, 이메일)&lt;br /&gt;
* (이름, 나이)&lt;br /&gt;
* (이름, 나이, 이메일)&lt;br /&gt;
* (이메일)&lt;br /&gt;
&lt;br /&gt;
=== 후보 키 목록 ===&lt;br /&gt;
슈퍼 키 중 최소성을 만족하는 속성 집합&lt;br /&gt;
&lt;br /&gt;
* (사번)&lt;br /&gt;
* (이름, 나이)&lt;br /&gt;
* (이메일)&lt;br /&gt;
&lt;br /&gt;
=== 기본 키와 대체 키 ===&lt;br /&gt;
설계자의 판단에 따라 구분&lt;br /&gt;
&lt;br /&gt;
* 기본 키: (사번)&lt;br /&gt;
* 대체 키: (이름, 나이), (이메일)&lt;/div&gt;</summary>
		<author><name>Lunalcni</name></author>
	</entry>
	<entry>
		<id>https://devhrxoobm.itwiki.kr/index.php?title=%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4_%EC%A0%95%EA%B7%9C%ED%99%94&amp;diff=38660</id>
		<title>데이터베이스 정규화</title>
		<link rel="alternate" type="text/html" href="https://devhrxoobm.itwiki.kr/index.php?title=%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4_%EC%A0%95%EA%B7%9C%ED%99%94&amp;diff=38660"/>
		<updated>2023-10-19T14:19:05Z</updated>

		<summary type="html">&lt;p&gt;Lunalcni: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[분류:데이터베이스]]&lt;br /&gt;
[[분류:정보처리기사]]&lt;br /&gt;
&lt;br /&gt;
;;Database Normalization&lt;br /&gt;
&lt;br /&gt;
==[[데이터베이스 이상 현상|이상(Anomaly) 현상]]==&lt;br /&gt;
&lt;br /&gt;
*정규화를 거치지 않은 데이터베이스에서 발생할 수 있는 현상&lt;br /&gt;
*데이터들이 불필요하게 중복되어 릴레이션 조작에 예기치 못한 문제 발생&lt;br /&gt;
*애트리뷰트들의 종속관계를 하나의 릴레이션에 표현하기 때문에 발생&lt;br /&gt;
&lt;br /&gt;
===이상 종류===&lt;br /&gt;
&lt;br /&gt;
;삽입할 때 잘못 삽입됨, 갱신할 때 잘못 갱신됨 등의 일반적인 내용이다. 아래 정규화과정에서 예시 참고&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;삽입 이상(Insertion Anomaly)&#039;&#039;&#039;&lt;br /&gt;
**데이터 삽입 시 의도와 다른 값들도 삽입됨&lt;br /&gt;
*&#039;&#039;&#039;삭제 이상(Delete Anomaly)&#039;&#039;&#039;&lt;br /&gt;
**데이터 삭제 시 의도와 다른 값들도 연쇄 삭제됨&lt;br /&gt;
*&#039;&#039;&#039;갱신 이상(Update Anomaly)&#039;&#039;&#039;&lt;br /&gt;
**속성값 갱신 시 일부 튜플만 갱신되어 모순 발생&lt;br /&gt;
&lt;br /&gt;
==정규화 목적==&lt;br /&gt;
&lt;br /&gt;
*중복을 배제하여 삽입, 삭제, 갱신 이상의 발생을 방지&lt;br /&gt;
*각 릴레이션에 중복된 종속성을 여러개의 릴레이션에 분할&lt;br /&gt;
*어떠한 릴레이션이라도 데이터베이스 내에서 표현 가능하게 함&lt;br /&gt;
*데이터 삽입 시 릴레이션을 재구성할 필요성 감소&lt;br /&gt;
*효과적인 검색 알고리즘 생성 가능&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==정규화 과정==&lt;br /&gt;
===1NF===&lt;br /&gt;
&lt;br /&gt;
;First Normal Form&lt;br /&gt;
&lt;br /&gt;
1NF를 만족하려면 &#039;&#039;&#039;도메인이 원자값&#039;&#039;&#039;이어야 한다.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;1NF를 만족하지 않는 릴레이션&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!수강과목&lt;br /&gt;
!수강자&lt;br /&gt;
|-&lt;br /&gt;
|수학&lt;br /&gt;
|홍길동&lt;br /&gt;
|-&lt;br /&gt;
|과학&lt;br /&gt;
|임꺽정, 신사임당&lt;br /&gt;
|-&lt;br /&gt;
|사회&lt;br /&gt;
|홍길동, 임꺽정&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!수강과목&lt;br /&gt;
!수강자1&lt;br /&gt;
!수강자2 &lt;br /&gt;
!수강자3&lt;br /&gt;
|-&lt;br /&gt;
|국어&lt;br /&gt;
|홍길동&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|수학&lt;br /&gt;
|신사임당&lt;br /&gt;
|홍길동&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|영어&lt;br /&gt;
|고길동&lt;br /&gt;
|신사임당&lt;br /&gt;
|홍길동&lt;br /&gt;
|}&lt;br /&gt;
:*수강자 속성이 원자값이 아니다.&lt;br /&gt;
:*유사한 속성이 중복, 반복되는 경우도 정규화의 대상이 된다&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;발생할 수 있는 이상(Anomaly)의 예&#039;&#039;&#039;&lt;br /&gt;
**&#039;&#039;&#039;갱신 이상&#039;&#039;&#039;: 홍길동이 사회과목을 &#039;역사&#039;로 바꾸었다. 그럼 임꺽정이 듣고 있는 사회 과목도 바뀌어버린다.&lt;br /&gt;
*** UPDATE 과목 SET 수강과목 = &#039;역사&#039; WHERE 수강과목 = &#039;사회&#039; AND 수강자 = &#039;홍길동&#039;&lt;br /&gt;
**&#039;&#039;&#039;삭제 이상&#039;&#039;&#039;: 임꺽정이 &#039;과학&#039; 과목을 수강취소했다. 그럼 신사임당의 수강 정보도 삭제된다.&lt;br /&gt;
***DELETE FROM 과목 WHERE 수강과목 = &#039;과학&#039; AND 수강자 = &#039;임꺽정&#039;&lt;br /&gt;
*&#039;&#039;&#039;1NF를 만족시키는 릴레이션&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!수강과목&lt;br /&gt;
!수강자&lt;br /&gt;
!일련번호 &lt;br /&gt;
|-&lt;br /&gt;
|수학&lt;br /&gt;
|홍길동&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|과학&lt;br /&gt;
|임꺽정&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|과학&lt;br /&gt;
|신사임당&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|사회 &lt;br /&gt;
|홍길동&lt;br /&gt;
|4&lt;br /&gt;
|-&lt;br /&gt;
|사회&lt;br /&gt;
|임꺽정&lt;br /&gt;
|5&lt;br /&gt;
|}&lt;br /&gt;
:* 가장 간단한 것은 원자값으로 분해해 튜플로 구분하고 다른 키를 추가하는 것이다.&lt;br /&gt;
:*실제로 복잡한 테이블은 이렇게 단순하게 분해해버리면 다른 중복 문제들이 많이 생겨 테이블 구조를 따져봐야한다.&lt;br /&gt;
&lt;br /&gt;
===2NF===&lt;br /&gt;
&lt;br /&gt;
;Second Normal Form&lt;br /&gt;
;2NF를 만족하려면 &#039;&#039;&#039;부분적 함수 종속&#039;&#039;&#039;을 제거해야 한다.&lt;br /&gt;
&lt;br /&gt;
*즉 완전 함수 종속이 되도록 해야 한다.&lt;br /&gt;
*&#039;&#039;&#039;2NF를 만족하지 않는 릴레이션&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!학번&lt;br /&gt;
!이름&lt;br /&gt;
!소속학과&lt;br /&gt;
!학과장&lt;br /&gt;
|-&lt;br /&gt;
|1901&lt;br /&gt;
|홍길동&lt;br /&gt;
|컴퓨터과&lt;br /&gt;
|김교수&lt;br /&gt;
|-&lt;br /&gt;
|1845&lt;br /&gt;
|임꺽정&lt;br /&gt;
|전자과&lt;br /&gt;
|박교수&lt;br /&gt;
|-&lt;br /&gt;
|1706&lt;br /&gt;
|신사임당&lt;br /&gt;
|기계과&lt;br /&gt;
|천교수&lt;br /&gt;
|-&lt;br /&gt;
| 1925&lt;br /&gt;
|장영실&lt;br /&gt;
|컴퓨터과&lt;br /&gt;
|김교수&lt;br /&gt;
|}&lt;br /&gt;
:*학번 &amp;lt;-&amp;gt; 이름+소속+학과장은 종속 관계가 있다.(한 학과내의 이름은 중복되지 않는다고 가정)&lt;br /&gt;
:*하지만 사실 학과장은 소속학과 하나만에도 종속(소속학과 &amp;lt;-&amp;gt; 학과장)되므로 이는 부분적인 종속관계가 포함되어 있다.&lt;br /&gt;
:*즉 학과장은 꼭 이 릴레이션에 있어야 할 필요도 없고, 이 릴레이션에 있는 순간 &#039;김교수&#039;와 같이 계속 중복적재 될것이다.&lt;br /&gt;
:* 지도교수 사무실도 학번에&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;발생할 수 있는 이상(Anomaly)의 예&#039;&#039;&#039;&lt;br /&gt;
**삽입 이상: 컴퓨터과, 전자과, 기계과 학생을 추가하고자 할 경우 더이상 불필요한 중복정보인 학과장 정보가 삽입되야 한다.&lt;br /&gt;
**갱신 이상: 컴퓨터과의 학과장이 변경되었다. 하나만 변경하면 모순이 발생하므로 다 찾아서 변경해야 한다.&lt;br /&gt;
**삭제 이상: 신사임당이 자퇴해서 삭제하고자 한다. 이 삭제로 인해 기계과 학과장의 정보가 사라져버린다.&lt;br /&gt;
*&#039;&#039;&#039;2NF를 만족시키는 릴레이션&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!학번&lt;br /&gt;
!이름&lt;br /&gt;
!소속학과&lt;br /&gt;
|-&lt;br /&gt;
|1901&lt;br /&gt;
|홍길동&lt;br /&gt;
|컴퓨터과&lt;br /&gt;
|-&lt;br /&gt;
|1845&lt;br /&gt;
|임꺽정 &lt;br /&gt;
|전자과&lt;br /&gt;
|-&lt;br /&gt;
|1706&lt;br /&gt;
| 신사임당&lt;br /&gt;
|기계과&lt;br /&gt;
|-&lt;br /&gt;
|1925&lt;br /&gt;
|장영실&lt;br /&gt;
|컴퓨터과 &lt;br /&gt;
|}&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!학과&lt;br /&gt;
! 학과장&lt;br /&gt;
|-&lt;br /&gt;
|컴퓨터과&lt;br /&gt;
|김교수&lt;br /&gt;
|-&lt;br /&gt;
|전자과&lt;br /&gt;
|박교수&lt;br /&gt;
|-&lt;br /&gt;
| 기계과 &lt;br /&gt;
|천교수&lt;br /&gt;
|}&lt;br /&gt;
:*이와 같이 릴레이션을 구분하는 것이 바람직하다.&lt;br /&gt;
&lt;br /&gt;
===3NF===&lt;br /&gt;
&lt;br /&gt;
;Third Normal Form&lt;br /&gt;
;3NF를 만족하려면 이행적 함수 종속을 제거해야 한다.&lt;br /&gt;
&lt;br /&gt;
*이행적 함수 종속: A→B 이고 B→C 일 때 A→C 인 관계&lt;br /&gt;
*3NF를 만족하지 않는 릴레이션&lt;br /&gt;
**소속학과는 특정 대학에 속한다. 즉 대학은 소속학과에 종속된다.&lt;br /&gt;
**홍길동 → 컴퓨터과이고 컴퓨터과→공대일 때, 홍길동→공대인 관계가 성립한다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 학번&lt;br /&gt;
!이름&lt;br /&gt;
!소속학과&lt;br /&gt;
!대학&lt;br /&gt;
|-&lt;br /&gt;
|1901&lt;br /&gt;
|홍길동 &lt;br /&gt;
|컴퓨터과 &lt;br /&gt;
|공대&lt;br /&gt;
|-&lt;br /&gt;
|1845&lt;br /&gt;
| 임꺽정&lt;br /&gt;
|전자과&lt;br /&gt;
|공대 &lt;br /&gt;
|-&lt;br /&gt;
|1706&lt;br /&gt;
|신사임당 &lt;br /&gt;
|경제&lt;br /&gt;
|경상 &lt;br /&gt;
|-&lt;br /&gt;
|1925&lt;br /&gt;
|장영실&lt;br /&gt;
|경영&lt;br /&gt;
|경상&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;발생할 수 있는 이상(Anomaly)의 예&#039;&#039;&#039;&lt;br /&gt;
**&#039;&#039;&#039;삽입 이상&#039;&#039;&#039;: 컴퓨터과, 전자과 학생을 추가하고자 할 경우 더이상 불필요한 중복정보인 대학 정보가 삽입되어야 한다.&lt;br /&gt;
**&#039;&#039;&#039;갱신 이상&#039;&#039;&#039;: 컴퓨터과의 소속 대학이 &#039;IT대학&#039;으로 변경되었다. 하나만 변경하면 모순이 발생하므로 다 찾아서 변경해야 한다.&lt;br /&gt;
**&#039;&#039;&#039;삭제 이상&#039;&#039;&#039;: 홍길동이 자퇴해서 삭제하고자 한다. 이 삭제로 인해 컴퓨터과의 대학 정보가 사라져 버린다.&lt;br /&gt;
*3NF를 만족시키는 릴레이션&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!학번&lt;br /&gt;
!이름&lt;br /&gt;
!소속학과&lt;br /&gt;
|-&lt;br /&gt;
|1901&lt;br /&gt;
|홍길동&lt;br /&gt;
|컴퓨터과&lt;br /&gt;
|-&lt;br /&gt;
|1845&lt;br /&gt;
|임꺽정&lt;br /&gt;
|전자과 &lt;br /&gt;
|-&lt;br /&gt;
|1706 &lt;br /&gt;
|신사임당&lt;br /&gt;
|경제&lt;br /&gt;
|-&lt;br /&gt;
|1925&lt;br /&gt;
|장영실&lt;br /&gt;
|경영&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!소속학과&lt;br /&gt;
!대학 &lt;br /&gt;
|-&lt;br /&gt;
|컴퓨터과&lt;br /&gt;
|공대&lt;br /&gt;
|-&lt;br /&gt;
| 전자과&lt;br /&gt;
|공대&lt;br /&gt;
|-&lt;br /&gt;
|경제&lt;br /&gt;
|경상&lt;br /&gt;
|-&lt;br /&gt;
|경영&lt;br /&gt;
|경상&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===BCNF===&lt;br /&gt;
&lt;br /&gt;
;Boyce and Codd Normal Form&lt;br /&gt;
;BCNF를 만족하려면 결정자이면서 후보 키가 아닌 속성을 제거해야 한다.&lt;br /&gt;
&lt;br /&gt;
*BCNF를 만족하지 않는 릴레이션&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
! 학번&lt;br /&gt;
!과목&lt;br /&gt;
!교수&lt;br /&gt;
|-&lt;br /&gt;
|100&lt;br /&gt;
|데이터베이스&lt;br /&gt;
|홍길동&lt;br /&gt;
|-&lt;br /&gt;
|100&lt;br /&gt;
|자료구조&lt;br /&gt;
|임꺽정&lt;br /&gt;
|-&lt;br /&gt;
|200&lt;br /&gt;
|네트워크 &lt;br /&gt;
|장영실&lt;br /&gt;
|-&lt;br /&gt;
|300&lt;br /&gt;
|네트워크 &lt;br /&gt;
|장영실 &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*제약사항&lt;br /&gt;
**한 학생은 동일한 과목에 대해 한 교수에게만 수강 가능&lt;br /&gt;
**각 교수는 하나의 과목만 담당&lt;br /&gt;
**한 과목은 여러 교수가 담당 가능&lt;br /&gt;
*후보 키: (학번, 과목)&lt;br /&gt;
*함수적 종속성&lt;br /&gt;
**(학번, 과목) → 교수&lt;br /&gt;
**교수 → 과목&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;발생할 수 있는 이상(Anomaly)의 예&#039;&#039;&#039;&lt;br /&gt;
**&#039;&#039;&#039;삽입 이상&#039;&#039;&#039;: 200 학생이 데이터베이스를 수강하고자 할 경우, 현재 불필요한 홍길동 교수 정보가 한번 더 삽입된다.&lt;br /&gt;
**&#039;&#039;&#039;갱신 이상&#039;&#039;&#039;: 장영실 교수의 담당 과목이 알고리즘으로 변경되면, 장영실 교수의 과목을 수강하는 모든 학생들의 튜플도 검색해서 수정해야 한다.&lt;br /&gt;
**&#039;&#039;&#039;삭제 이상&#039;&#039;&#039;: 300 학생이 자퇴해서 삭제하고자 한다. 이 삭제로 인해 인공지능 과목을 유관순 교수가 담당하고 있다는 정보가 사라진다.&lt;br /&gt;
*BCNF 분해 방법&lt;br /&gt;
**함수적 종속성 Z → X가 있으며 Z가 후보 키가 아닌 경우, (R - X)와 ZX로 릴레이션을 분리&lt;br /&gt;
**예시. 함수적 종속성 (교수 → 과목)이 있으며, 교수가 후보 키가 아니기 때문에, (학번, 교수), (교수, 과목)으로 분리&lt;br /&gt;
*BCNF 분해의 특징&lt;br /&gt;
**무손실 조인 분해&lt;br /&gt;
**종속성 유지가 불가능할 수 있음(예시의 경우 함수적 종속성 &amp;quot;(학번, 과목) → 교수&amp;quot;를 유지할 수 없음)&lt;br /&gt;
*BCNF를 만족시키는 릴레이션&lt;br /&gt;
**삽입 이상 해결: 200 학생이 데이터베이스를 수강하기 위해, 홍길동 교수의 정보가 삽입될 필요가 없어진다.&lt;br /&gt;
**갱신 이상 해결: 장영실 교수의 담당 과목을 변경하기 위해 다른 튜플들을 검색해서 수정할 필요가 없다.&lt;br /&gt;
**삭제 이상 해결: 300 학생이 자퇴하면, 300 학생의 수강 정보만 삭제하면 된다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!학번&lt;br /&gt;
!교수&lt;br /&gt;
|-&lt;br /&gt;
|100&lt;br /&gt;
|홍길동&lt;br /&gt;
|-&lt;br /&gt;
|100&lt;br /&gt;
|임꺽정&lt;br /&gt;
|-&lt;br /&gt;
|200&lt;br /&gt;
|장영실&lt;br /&gt;
|-&lt;br /&gt;
|300&lt;br /&gt;
|장영실&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!과목&lt;br /&gt;
! 교수&lt;br /&gt;
|-&lt;br /&gt;
|데이터베이스&lt;br /&gt;
|홍길동&lt;br /&gt;
|-&lt;br /&gt;
|자료구조&lt;br /&gt;
|임꺽정&lt;br /&gt;
|-&lt;br /&gt;
|네트워크&lt;br /&gt;
|장영실&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===4NF===&lt;br /&gt;
&lt;br /&gt;
;Fourth Normal Form&lt;br /&gt;
;4NF를 만족하려면 다치 종속성을 제거해야 한다.&lt;br /&gt;
&lt;br /&gt;
*4NF를 만족하지 않는 릴레이션&lt;br /&gt;
*&#039;&#039;&#039;발생할 수 있는 이상(Anomaly)의 예&#039;&#039;&#039;&lt;br /&gt;
* 4NF를 만족시키는 릴레이션&lt;br /&gt;
&lt;br /&gt;
===5NF===&lt;br /&gt;
&lt;br /&gt;
;Fifth Normal Form&lt;br /&gt;
;5NF를 만족하려면 조인 종속성 제거해야 한다.&lt;br /&gt;
&lt;br /&gt;
*5NF를 만족하지 않는 릴레이션&lt;br /&gt;
*&#039;&#039;&#039;발생할 수 있는 이상(Anomaly)의 예&#039;&#039;&#039;&lt;br /&gt;
*5NF를 만족시키는 릴레이션&lt;/div&gt;</summary>
		<author><name>Lunalcni</name></author>
	</entry>
</feed>