백엔드 지식 3 _ RDBMS, PK, FK,ERD,다이어그램,개념적모델링,논리적모델링, 물리적모델링
대부분은 콘솔로그 pdf를 참고했지만 다른 블로그들도 다수 참고해서 정리함 !!
RDBMS
: relational database management system . 관계형 데이터베이스 관리 시스템
저번에 배웠던 DBMS의 한 유형 중 하다가 RDBMS이다.
key를 통해서 연관된 정보들을 테이블에서 조회하는데 특화되어있다.
특징이라면
- 2차원 구조 모델 ( 열 : 속성 , 행 : 튜플, 데이터 )을 기반으로 한 수평적 구조를 사용. 테이블 형식으로 데이터를 저장
- ACID(원자성, 일관성 , 독립성, 지속성)트랜잭션을 보장하는 기능을 가진다
- SQL을 사용해서 데이터를 접근하고 CRUD조작을 허용한다
- 여러 OS에서 사용할 수 있다
- ACIDConsistency : 일관성. 작업이 완료되면 언제나 일관된 DB상태를 유지한다Durability : 지속성. 한 번 성공한 작업은 영원히 반영되어야 한다
- Isolation : 독립성 . 다른 작업의 연산이 끼어들지 못하도록 한다.
- Atomicity : 원자성 . 작업들이 부분적으로 실행되고 종료되는 것이 아니라 하나의 원자 단위로 수행되는 것. 처음부터 끝까지 실행된다
언어
: 오라클 , MySQL , MS-SQL, PostgreSQL , Maria DB 등등..
관계
: one to one
one to many
many to one
many to many
관계를 알기위해선 pk와 fk의 개념을 알아야 한다
PK
: Primary Key. table의 고유한 id이다.
FK
: Foriegn key. 외래 키 이다. 자기 테이블에선 PK이던 것이 외부 table에선 FK로 작용한다
다른 테이블의 행을 식별할 수 있다.
One to One
: table A 의 행과 table B의 행이 정확히 일대일 매칭이 되는관계
One to Many
: table A의 행이 테이블 B의 여러 행과 연결이 되는 관계
손님 하나가 여러개의 구매물건에 해당
Many to One
: Table A의 여러개의 행이 table B의 하나의 행과 연결이 되는 관계
여러개의 물건이 장바구니 하나에 담김
Many to Many
: table A의 여러 로우가 table B의 여러 행과 연결이 되는 관계
한 명의 저자가 여러 책을 출판하기도 하지만 한 권의 책은 여러명의 저자가 있기도 함
다이어 그램 그리기
- 데이터 요구사항에 대한 분석 ( 결과 : 요구사항 명세서 )
- ⇒ 어떤 DB를 원하는가
- 개념적 데이터 모델 설계 ( 결과 : ERD )
- ⇒ ERD라는 것을 만들자
- 논리적 데이터 모델 설계 ( 결과 : relation schema의 table 명세서 )
- ⇒ ERD를 RDBMS에 적용하기 편하게 바꾸자
- 물리적 데이터 모델 설계( 결과 : DB 스키마 생성 SQL문 )
- ⇒ RDBMS로 만들자
개념적 데이터 모델링
: ERD를 만들자 라는 것
ERD는 entity Relationship Diagram으로 ,핵심 엔티티와 그들간의 관계를 발견하고 그것들을 표현하기 위해서 엔티티-관계다이어그램 (ERD)를 생성한다.
간단하게 도형으로 표현하는 모델링이라고 이해하면 편하다 !
네모 > entity = table
동그라미 > attribute > column
다이아 > relation > pk fk
논리적 데이터 모델링
: ERD를 RDBMS에 적용하기 편하게 바꾸자라는 것.
이 단계에서 업무에 대한 key , 속성, 관계 등을 표시하며 정규화 활동을 수행한다
예를 들어 회원 정보의 아이디, 비밀번호에 각 데이터 타입을 명시해 주고 각 데이터간의 관계를 정밀하게 맺어주며 테이블의 키( key )를 지정해준다.
물리적 데이터 모델링
: RDBMS로 만드는 작업.
실제 테이블을 만든다. SQL코딩을 통해 시각적으로 표현된 구조를 완성하는 것.
ERD 그리기
: Entity > 정의 가능한 사물 또는 개념 > 테이블이 엔티티로 정의될 수 이따
entity Attribute > 필드 ( 컬럼) 명을 쓰면 된다. 예를들어 사람이라는 엔티티가 있으면 나이 이름 생년월일 등을 포함할 수 있다. 데이터 타입을 같이 명시해줘야 한다.
엔티티 분류
:
- 유형 엔티티 ( 물리적인 형태가 있다 . ex 고객, 상품, 거래처, 학생, 교수 등)
- 무형 엔티티 ( 물리적인 형태가 없고 개념적으로 존재. ex 인터넷 장바구니, 부서조직 등)
- 문서 엔티티 ( 업무 절차상에서 사용되는 문서나 장부, 전표에 대한 엔티티 ex 거래명세서, 주문서 등)
- 이력 엔티티 ( 업무상 반복적으로 이루어지는 행위나 사건의 내용을 일자별, 시간별로 저장하기 위한 엔티티 )
- 코드 엔티티 (무형 엔티티의 일종으로 각종 코드를 관리하기 위한 엔티티 . ex 국가코드 )
pk
: 중복이 없고 NULL 값이 없는 유일한 값에 저장하는 키.
열쇠로 보통 나타낸다
NOT NULL X
: NULL을 비허용 한다면 N을 적고, Null을 허용하면 N을 적지 않는다
FK
: 선을 사용한다 보통 외래키 이름을 테이블명_필드명 이런식으로 구성한다
선긋기
: 두 관계 중 부모의 키를 PK로 받는지 안받는지에 따라서 점선, 실선 표기가 다르게 된다
예를들어 부모 : address, 자식 : store일 때
실선 : 식별관계 > 부모 자식 관계에서 자식이 부모의 키를 외래키로 참조해서 자신의 키로 설정
점선 : 비식별관계 > 부모 자식 관계에서 자식이 부모의 키를 일반 속성으로 참조
이거를 예제로 만들어보자
선은 못만들것다 ㅠㅠ