
물리적관계(Physical) : 물리적관계는 실체가 있는 것
논리적관계(Logical) : 논리적관계는 물리적관계를 만들기 전 설계단계
: 데이터베이스는 파일이다. 잘 저장하기 위해서 데이터베이스를 사용하고, 데이터를 효율적으로 관리하기 위해서 데이터들 사이에서 관계를 맺어둔 파일이다.
Database의 특징
자료추상 : 자료를 추상적으로 저장한다. 즉,공통적인것, 비슷한 것만 저장한다.
ex) 이름: 심준보, 나이: ? , 성별: 남, 키: 176, 몸무게: 65kg, 손톱길이: 0.3cm, 안경착용 : 유
한 사람의 정보를 저장하고, 다른 사람들의 정보를 저장하려고 한다. 이럴때 이런 디테일한 정보들을 저장하기 어렵다. 공통적인 성질들만 뽑아서 대충 저장하자 라고 하는 것이 데이터베이스의 특징인 자료추상이다.
NoSql은 저런 디테일한 정보까지 저장하자!
자료독립 : 데이터와 프로그램의 독립성을 유지. 데이터와 데이터를 사용하는 프로그램이 독립적이다. 데이터의 형태가 아무리바껴도 프로그램이 바뀔필요가 없다. 프로그램이 바뀌어도 데이터의 형태가 바뀔필요가 없다.
ex) 데이터와 프로그램의 독립성이 유지되지 않는다면?
자료를 pdf로 다 뿌렸는데 자료를 pptx로 바꾼다면? 자료를 보기위해 프로그램을 새로 깔던가 방법을 바꾸어야한다.
자기정의 : 자료의 구성과 내용을 DB자신이 저장 및 관리. 데이터는 엑셀처럼 표로 저장하는데, 자기자신을 구성하는 정보나 형식같은 것들도 자기자신이 정의를 하고있다.

파일시스템 : 파일은 HDD에 저장된다. 파일을 효율적으로 쓸수있게 해주는것이 파일시스템
계층형 : 폴더형태가 계층형이다. 리눅스의
관계형 : 가장 많이 사용하고 있다.
파일시스템 안에다가 데이터베이스 파일을 만들어서 관리하는데 관계형으로 관리를 한다.
데이터베이스 파일을 열어서 볼 수 있는, 또는 관리하는 프로그램을 DBMS라고 한다. 데이터베이스 서버이다. 데이터베이스 서비스를 제공하는 프로그램인 것.


클라이언트에서 SQL문으로 DBMS라고 불리는 소프트웨어에 요청을 보내고 DBMS에서 데이터를 찾아 결과를 다시 클라이언트에 보내준다.
사람정보를 어떻게 데이터베이스에 저장하지? 공통적특징을 어떻게 뽑아서 저장하지 했을때, 현실세계의 데이터 구조를 데이터 구조로 저장시키는 중간과정.
현실세계의 데이터 구조를 데이터구조로 기술한다 -> 객체지향과 비슷한 개념.


DataBase : "건축물"
Data Model :
"건출물"을 짓기 위한 "설계도면".
현실세계를 database로 구축할 수 있도록 "추상화"한것
추상화: 어떤 것을 뽑아서 단순화 시킨 것
- 복잡한 현실세계(기업의 비지니스)를 약속된 표기법에 의해 단순화시켜 표현함
- database에 저장하기 위해 애매모호함을 제거하고 명확화하여 기술
Data Modeling :
현실세계를 약속된 표기법에 의해 표현하는 과정
database를 구축하기 위한 분석/설계의 과정분석 :
비지니스를 분석하는 것
1. 데이터베이스가 없는 새로운 시스템을 만드는 경우
2. 데이터베이스가 있고, 기존 데이터베이스를 분석해서 새로 넘어가는 경우(어느정도 규모가 있는 회사의 경우, database는 존재하고 있다 기존의 database를 분석해서 새로운 database로 바꾸는 경우(AS-IS : 기존database/To-BE : 새로만들 database / As-Is DB를 먼저 분석해서 기존의 database의 구조를 파악하고 추가적 비지니스구조를 파악해서 To-Be DB 설계 단계로 넘어간다.)
: Data Modeling 과정에 참여하는 사람들

데이터모델러 : 데이터모델링의 전문지식을 가지고 직접 설계하는 사람(외부 컨설팅 또는 기업내부)
실무담당자 : 비지니스를 가장 잘 알고 있는 사람. 데이터모델러에게 잘 설명해줄 수 있는 사람
애플리케이션 개발자 : 데이터모델기반으로 데이터베이스가 만들어지면 그것을 사용해서 IT시스템을 만드는 사람(SQL을 가장 많이 사용하는 사람)
DBA(DB관리자) : 데이터모델기반으로 데이터베이스가 만들어지면 DB를 전문적으로 관리해주는 사람

요구분석 : 이커머스를 예로 들면 상품저장, 회원기능, 회원구매내역, 등 어떤것이 필요한지를 분석. 정답이 없고, 고객이 요구하면 미팅을 통해서 요구를 분석한다.
요구분석의 결과물 : 요구사항명세서(글)
개념적 설계 : 데이터를 구조화, 정형화 시키기 위해 추상적인 개념으로 표현하는 과정. 비지니스에서 가장 중요한 핵심 비지니스만 뽑아서 간단하게 표현하는 것. 추상화 수준이 높은 단계인데 추상화 수준이 높다는 말은 간략화를 많이 시킨다는 의미. 주문을 저장할때 어떤걸 넣어야 좋은지 설계하고 주문은 관계, 사용자, 고객은 NTT 등 그림으로 만들어서 다이어그램으로 표현함.
개념적설계의 결과물 : ER다이어그램(글을 그림으로 표현)



1.Entity
2.관계(Relationship)
3.속성(Attribute)
동질성 : 개체들이 가지고 있는 공통적 특징들 / 범위를 어디까지 한정할 것 인지에 따라 달라질 수 있다.
ex) '고객' = '상품구매이력이 있는 개인이나 법인'으로 정의한다면
잠재고객, 단체 등은 고객이 될 수 없다.
집합 : 원소들의 모임
ex) 우리의 재화나 서비스를 사용하는 고객, 판매하는 상품

- Supertypes Entity : 개체들이 일반화 과정에서 생성되는 상위집합
- SUbtypes Entity : 특정 기준에 따라 상세화된 개체들의 부분집합(Supertypes의 모든 공통속성을 상속 / 개별속성을 가질 수 있음)

Entity와 Entity 간의 논리적인 상호연관성(양쪽에서 연관성이 있어야한다). 실제로는 Entity(여러개가 모여있는 집합)내에 있는 개체간의 논리적인 연관성이라고 할 수 있다.

ex) 고객과 상품간의 관계가 있다라고 본다면, 구매하다 라는 관계가 있는것. 빈정욱고객이 버거, 튀김, 콜라를 다 구매하고, 황진영고객이 핫도그, 사이다를 구매하는 등의 개체간의 연관성이 있지만, 설계단계에서는 '고객이 상품을 구매한다.' 라는 큰 묶음으로 보는 것.
관계라는 요소를 나타날때는 크게 두가지로 나뉜다.
- 관계차수(Cardinality) : 두 Entity간의 관계에서 참여자(개체)의 수를 표현한것
ex) 1:1, 1:n, n:n- 선택성(Optionality) : 두 Entity간의 관계에서 개체들의 필수/선택 참여 여부를 표현한 것.
ex) 필수참여, 선택참여


식별자의 특징
식별자의 분류


ERD가 데이터모델과 같은말이다.


exclusive - 부분집합들 사이에 겹치는 부분이 없다 배타적이다 라는 뜻
inclusive - 부분집합들 사이에 겹치는 부분이 존재할 수 있다는 뜻

관계종류(식별관계)

관계읽기 (I/E표기법)


정규화 : 데이터의 중복최소화, 이상현상(데이터가 이상하게 변질되는 현상)이 발생하지 않도록 함수종속을 기반으로 연관성있는 속성들로만 Entity를 구성하는 과정.
이상현상 : 데이터가 이상하게 변질되는 현상. 불필요한 데이터중복으로 인해 데이터의 삽입/갱신/삭제 시 발생하는 이상현상.
함수종속 : 한 Entity내에서 특정속성의 값을 알게되면 다른속성들의 값이 저절로 결정될때, 기준이 되는 속성을 결정자속성(== 식별자속성), 결정자에 의해 정해지는 속성을 종속자 속성.
ex) 고객번호, 고객명, 성별, 생년월일
정규화 - 정규화를 하는 과정
정규형 - 정규화를 하는 과정을 통한 결과
비정규형 - 정규화가 전혀 되어있지 않은 것
잘못된사례1

-> 업무가 많은 사람인데 업무가 추가되었다고 치면, 테이블의 구조를 계속 확장시켜야한다. 한번설계가 끝난 후 구조를 변경시킨다는 것은 쉽지 않은 일이다. 즉, 유연성이 떨어지는 사례
잘못된 사례2

-> 데이터가 아래로 추가되는 것은 정상적인 일. 그렇지만 정보가 하나였던 것이 중복이 되어 3개로 늘어남. 데이터를 수정해야하는 일이 생겼을때 하나만 수정하고 나머지는 수정하지 않는 문제가 생길 수 있다.
그렇다면 올바른 사례는 무엇일까?

2차정규화의 결과
주식별자가 아닌 모든 속성이 주식별자 속성에 완전 함수 종속된다.
-> 사원구분코드와 사원번호 두개가 다 같이 있어야만 나머지 모든 속성을 결정할 수 있다.

위의 문제에서 사원구분코드와 사원구분명을 따로 테이블을 만들어준 다음 중복을 제거해버린다. 중복되는 데이터가 1개로 합쳐진다. 사원구분코드당 사원구분명 하나인 데이터로 관리가 가능해진다.
여기도 문제점을 발견할 수 있는데 부서번호를 보면 부서번호가 부서명과 부서위치를 결정하는 주식별자이다. 어떻게 하면 좋을까?
일반 속성들 간에 함수종족이 존재하지 않는다.
주식별자가 아닌 일반 속성들 간에 종속관계가 존재하면 안된다. 그런데 부서번호가 부서명과 부서위치를 종속시키므로 부서번호, 부서명, 부서위치를 부서테이블로따로 만들어 빼주고 기본 테이블에 부서번호를 남기고 연결고리를 만들어준다. 일반속성들간에 종속관계가 존재해 이를 따로 정규화시키는 것을 제 3 정규화라고 하고 그 결과가 제3정규형이다.


-> 4개로 데이터를 쪼개서 관리하는 것. 제가 필요한 정보가 나뉘어져있다면 SQL로 조회해서 데이터를 가져오는것.
Entity가 정규화된 정도. 정규화를 통해 해당 단계의 조건을 만족하는 상태
- 제1정규형 : 모든 속성의 값이 원자값(Atomic value)으로만 구성되어있다. 즉, 모든 속성에 다중속성값이 존재하지 않는다.
- 제2정규형 : 주식별자가 아닌 모든 속성이 주식별자 속성에 완전 함수종속된다. 즉, 부분적 함수종속이 존재하지 않는다.(식별자 일부에만 종속하지 않는다.)
- 제3정규형 : 일반속성들 간에 함수종속이 존재하지 않는다. 즉, 이행적 함수종속이 존재하지 않는다.(식별자가 종속시키고, 일반속성이 다른속성을 종속시키지 않는상태)
그렇다면 제3차정규화까지 거쳐 제3정규형을 만들어놓고 반정규화를 하는 것일까?
정규화된 Entity, 속성, 관계에 대해 시스템의 성능향상과 개발과 운영의 단순화를 위해 중복, 통합, 분리등을 수행하는 데이터 모델링의 기법 -> 특정한 상황에서만 사용하는 것.
- Entity(테이블) 반정규화, 속성(칼럼) 반정규화(일반적인 반정규화과정), 관계 반정규화

-> 주문수량과 상품단가를 곱하면 주문총금액을 구할 수 있지만, 주문테이블에 따로 속성으로 넣은 이유는 속도때문이다. 성능향상 때문에 반정규화를 하는 경우가 많다.
반정규화를 남용하게되면 시스템 전반적으로 데이터 무경성이 깨질 위험이 있으므로, 꼭 필요한 경우에만 적용해야하며 데이터 정합성을 지키기 위한 별도의 방안을 마련해야한다.

Entity 도출
1. 학적
2. 학부생, 대학원생, 졸업생
3. 자료(학술자료 및 미디어자료)
4. 관련키워드
5. 자료관리대장


- 속성도출
초록색 - 속성
파란색 - Entity
- 관계 및 식별자 도출
빨간색 - 식별자
노란색 - 관계
중간에 관계를 관리해줄수 있는 자료관리대장테이블이 추가되어야한다.
M:M관계 일때 1:M 그리고 1:M 으로 나누어서 표현할 수 있다.
-슈퍼타입 / 서브타입으로 표현한다면
데이터 모델링의 결과물인 ERD를 기반으로 관계형 database가 구축된다.
데이터를 저장하기 위한 2차원 구조의 객체. Column과 Row로 이루어짐. 엑셀을 생각하자!
- Entity가 물리적으로 구현된 것. 관계형 database의 가장 기본적 구성요소
- Column (열): 속성이 물리적으로 구현된것. 테이블의 세로구조
- Row (행) : 테이블에 저장된 개별데이터. 테이블의 가로구조 데이터 조회 및 조작의 대상

특정조건을 위반하는 데이터가 입력되지 않도록 제한하는 DBMS의 기능
- PK(Primary Key) : 동일한 값 or NULL값이 입력되지 X
- FK(Foreign Key) : 부모테이블에 없는 데이터는 자식테이블에도 데이터가 없도록 하겠다 라는 의미. 두 테이블이 있고, 1:N관계라고 했을때, 1이 부모테이블 N이 자식테이블이라고 가정하자. 1이라는 의미는 데이터가 1개만 존재한다는 뜻이고, N쪽은 연관된 데이터가 여러개 존재한다는 의미이다. 그러므로 오른쪽테이블이 부모테이블, 왼쪽테이블이 자식테이블이다.

- 관계형데이터베이스의 표준언어
- 구조적, 집합적, 선언적 : 원하는 결과집합을 구조에 맞춰 질의. 구체적프로세싱과정을 프로그래밍할 필요가 없다.
- SQL문의 종류
기업에는 Server에 DBMS가 설치되어있고, Database도 Server에 존재한다.

