SQLD 파트 1
기본 개념
SQL 개발자 자격증 준비
데이터 모델
모델링
현실 세계를 대상으로 일종의 모델을 만드는 것.
즉 현실 세계의 사물 Or 개념을 약속된 방법을 통해 도식화.
모델링의 이유 : 명세화 -> 설계 개발 시스템 관리 등에 사용하기 위함
그렇다고 막 하는건 아니고, 추상화 해서.
따라서 데이터베이스를 설계하는 것도 하나의 모델링 하는 과정이라고 볼 수 있다.
모델링의 특징
시스템에 맞게 현실세계를 표현
-
추상화
대상의 주요 특징 추출 후 일정한 형식으로 표현. 대상을 범주화하여 클래스로 구분, 공통 특징을 기반으로 서술하는 객체지향에서의 추상화와 같은 의미가 될 수도 있음.
-
단순화
복잡한 현실을 그대로 표현하는 것이 아닌, 보다 단순하게 표현.
UML
(Unified Modeling Language) 혹은ERD
(Entity Relationship Diagram)과 같은 제한된 언어나 약속된 표기법으로 표현한다. -
명확화
서로 다르게 해석되지 않고 같은 대상을 명확하게 이해할 수 있도록 “모호함”이 없도록.
제 컴퓨터에서는 되는데요? 저는 잘 읽히는데요? <- 이러면 안된다.
즉 데이터 모델링이란.
“일정한 표기법” 을 사용, 대상을 추상화 단순화 명확하 하는 것
유의사항
- 중복 최소화 : 같은 정보 중복 저장 X
- 비유연성 최소화 : 데이터 또는 프로세스의 변화가 프로그램과 데이터베이스에 미치는 영향 최소화
- 비일관성 최소화 : 데이터간 연관관계 명확하게.
모델링의 관점
-
데이터 관점(대상, What)
업무를 구성하는 데이터에 집중하여 데이터가 서로 어떤 관계를 맺고 사용되는지 모델링. - 정적분석, 구조분석
-
프로세스 관점(처리, How)
업무의 흐름에 집중, 실제로 처리하는 일이 “어떻게” 처리되는지 모델링. - 동적분석, 도메인분석
-
데이터 & 프로세스 상관 (대상과 처리방법, Interaction)
데이터와 프로세스가 서로 어떻게 관계를 맺고 영향을 주고받는지 모델링. - CRUD 분석
세가지 단계
-
개념적 데이터 모델링
가장 높은 추상화 레벨을 가진 모델링. 업무와 개념 중심으로 포괄적 수준에서 모델링 수행
EA(Enterprise Architecture)수립에 많이 이용.
이 단계에서 엔터티(Entity), 속성(Attribute) 도출
-
논리적 데이터 모델링
데이터 모델에 대한 키(Key), 속성(Attribute), 관계(Relationship) 표현.
서로 다른 DBMS(Database Management System)에 적용이 가능한 수준에서 추상화 레벨을 지님.
정규화를 통한 중복 데이터의 최소화.
이 단계에서 식별자를 도출하고 관계를 정의함
-
물리적 데이터 모델링
특정 DBMS에 맞추어 구현이 가능한 수준으로 모델링 수행.
DBMS 성능이나 보안 가용성 등을 고려하여 설계.
가장 낮은 수준의 추상화 레벨.
성능향상을 위한 반정규화 수행, 인덱스 함수 테이블 생성.
정리
단계 | 개념 | 추상화 | 결과 및 작업 |
---|---|---|---|
개념 | 업무와 개념 중심 포괄적 모델링 | 상 | 엔터티, 속성 도출 |
논리 | 모델에 대한 키 속성 관계 표현 | 중 | 식별자 도출, 관계 정의 |
물리 | 특정 DBMS에 구현 가능 수준 모델링 | 하 | 반정규화 수행 , 테이블 인덱스 함수 생성 |
ANSI-SPARC의 3단계 스키마
-
외부 스키마
사용자 관점. 앱이 바라보는 데이터 베이스 스키마 정의
-
개념 스키마
설계자 관점. 사용자가 바라보는 데이터베이스 스키마를 통합하여.
전체 데이터베이스에 저장되는 데이터와 관계 정의. 통합된 뷰 제공
-
내부 스키마 개발자 관점. 디스크나 메모리 상의 물리적 실질적 저장구조 표현.
테이블, 칼럼, 인덱스 정의. 물리적 뷰 제공.
ERD
데이터베이스를 구성하는 데이터의 논리적 구성요소를 엔터티로 정의하고. 엔터티들 간의 관계를 특별한 표기법으로 나타내 스키마를 설계하는 방법을 제공하는 것.
1976년 - 피터 첸.
이외에도 많은 방법 있음.
작성 순서
- 엔터티 도출
- 엔터티 배치 (중요한건 왼쪽 위)
- 엔터티 관계 설정
- 관계 설정
- 관계명, 참여도 기술
- 관계의 필수/선택 여부 기술
엔터티
개념
데이터베이스 구성요소 중 독립적으로 식별 가능한 객체
권위자의 엔터티 정의
정의자 | 정의 |
---|---|
Peter Chen(1976) | 변별할 수 있는 사물 |
C.J Date(1986) | 데이터베이스 내에서 변별 가능한 객체 |
James Martin(1989) | 정보를 저장할 수 있는 어떤 것 |
Thomas Bruce(1992) | 정보가 저장될 수 있는 사람, 장소, 물건, 사건 그리고 개념 |
엔터티는 보다 상세히 자신을 표현하기 위해 속성(Attribute)라는 하위요소를 가짐.
특징
- 업무에서 필요로 하고, 관리하고자 하는 정보여야 한다.
- 식별이 가능하도록 유일한 식별자를 가져야 한다.
- 영속적으로 존재하는 인스턴스가 두 개 이상인 집합을 이루어야 한다.
- 하위요소로 반드시 속성을 가진다.
- 엔터티는 다른 엔터티와 한 개 이상의 관계를 가져야 한다. (통계성, 코드성의 경우 생략)
분류
발생 시점 / 상속 관계에 따른 분류
- 기본 엔터티 : 자신의 고유한 주 식별자를 가지는 독립 생성되는 엔터티
- 중심 엔터티 : 기본 엔터티로부터 주식별자를 상속받아 생성. 업무의 중심 역할
- 행위 엔터티 : 두 개 이상의 엔터티를 상속받아 생성. 내용이 자주 변하거나, 데이터의 양이 계속 증가함.(로그같은거)
물리적 형태의 존재 여부에 따른 분류
- 유형 엔터티 : 물리적 형태가 존재하는 엔터티
- 개념 엔터티 : 물리적 형태 없이 개념적으로 정의되는 엔터티
- 사건 엔터티 : 업무 수행하며 발생하는 행위나 이벤트
명명법
- 엔터티 생성 의미대로 이름을 부여. 간결 명확
- 가능하면 약어X, 이름이 너무 길땐 약어를 표준화 후
- 영문의 경우 대문자, 단수 명사
- 협업의 업무 용어 사용, 업무상 의미 명확하게.
- 모든 엔터티의 이름은 서로 구분이 가능하도록, 유일하게.
- 의미상 중복 X
속성
개념
엔터티에 대한 자세하고 구체적인 정보를 나타낸 것.
엔터티의 하위요소.
엔터티를 나타내는 특징 중 업무와 관계되어 필요한 것으로 정의함.
의미상으로 더 이상 분리되지 않는 최소의 데이터 단위.
-> 진짜 필요한것만.
속성값
속성은 속성값들의 집합임.
속성값이란, 속성이 가질 수 잇는 특정 값.
하나의 엔터티 인스턴스가 가진 속성의 구체적인 값.
하나의 엔터티 인스턴스의 각 속성은 한 개의 속성값만을 가져야 함.
만약 한 개 이상의 속성값을 가질 수 있다면 -> 1차 정규화 수행
엔터티, 인스턴스, 속성값
- 한 개의 엔터티는 두 개 이상의 인스턴스를 가진다. (엔터티는 인스턴스의 집합)
- 한 개의 엔터티는 두 개 이상의 속성을 가진다. (엔터티는 속성의 집합)
- 한 개의 속성은 한 개의 속성값만 가진다.
속성의 분류
속성의 특성에 따라
- 기본 속성 : 엔터티가 본래부터 가져야하는 속성
- 설계 속성 : 본래부터 가진건 아니지만, 설계시 필요하다고 판단된 것
- 파생 속성 : 다른 속성으로부터 파생 or 특정 규칙에 따라 변형되어 만들어진 것
속성의 구성방식에 따라
- PK(Primary Key, 기본키) : 해당 엔터티의 인스턴스를 유일하게 식별할 수 있는 속성
- FK(Foreign Key, 외래키) : 관계를 통해 다른 엔터티의 속성을 가져와 포함시킨 속성
- 일반 속성 : 이외의 나머지 속성
도메인
속성이 가질 수 있는 값의 범위의 정의.
일반적으로 데이터 타입, 크기, 제약사항 등을 묶어 별도의 이름으로 정의
이렇게 정의된 도메인은 각각의 속성에 지정할 수 있음 (인터페이스나 타입같은건가?)
도메인이 지정된 속성은 해당 도메인을 따름.
관계
개념
엔터티와 엔터티 간 맺고있는 연관성.
존재적 관계와 행위적 관계로 나눌 수 있으나, ERD에서는 이 둘을 구분하지 않고 동일하게 표현.
- 연관관계 : 존재 자체로 연관성을 가짐
- 의존관계 : 특정 행위에서만 연관성을 가짐
존재적 관계
일종의 소속 관계를 갖는 경우. 존재 자체로 서로 연관성을 가지는 관계
행위적 관계
한 엔터티가 특정 행위나 이벤트를 일으킬 경우에 연관성이 발생하는 관계.
표기법
관계명(Membership)
관계의 이름을 나타냄. 존재적 관계와 행위적 관계를 기술
관계차수(Cardinality)
1:1
, 1:M
, M:N
과 같이 관계를 맺는 엔터티 인스턴스의 차수 표현
관계선택사양(Optionality)
필수적 관계인지 선택적 관계인지 표현. (Null
가능여부)
필수적 관계는 Null
이 불가하며, 선택적 관계는 Null
값을 가질 수 있음.
까치발 기호에 O 붙여서 표시.
식별자
개념
엔터티 인스턴시 유일하게 구별할 수 있는 속성이 있어야 하는데, 이런 속성을 식별자(Identifier)라고 부름.
식별자는 해당 엔터티 인스턴스의 대표 속성이라 할 수 있음.
주식별자
해당 엔터티 인스턴스를 유일하게 구별해주는 식별자. PK
에 해당하는 속성.
다음의 네 가지 성질을 만족해야 한다.
성질 | 설명 |
---|---|
유일성 | 각 엔터티 인스턴스를 구별할 수 있어야 한다. |
최소성 | 유일성을 보장하면서도, 최소 개수의 속성이 되어야 한다. |
불변성 | 속성값이 최소 생성시 부여된 값에서 변경되지 않고 유지 |
존재성 | 반드시 값을 가짐. Null 불가. |
PK 제약조건
- Unique Key + Not Null 의 제약조건을 가짐.
식별자의 분류
대표성 여부
- 주식별자 (Primary Identifier) : 해당 엔터티 인스턴스를 유일하게 구분할 수 있는 식별자. 유일성,최소성,불변성,존재성 만족. 다른 엔터티와 참조 관계 연결 가능
- 보조식별자 (Alternate Identifier) : 유일하게 구분할 수 있는 식별자이긴 하지만, 대표성은 없다. 다른 엔터티와 참조 관계 연결 불가능.
스스로 생성 여부
- 내부식별자 (Internal Identifier) : 엔터티 내부에서 스스로 만들어지는 식별자.
- 외부식별자 (External Identifier) : 관계를 통해 다른 엔터티로부터 받아오는 식별자.
FK
라고도 한다.
속성의 수
- 단일식별자(Single Identifier) : 식별자를 구성하는 속성이 하나인 식별자
- 복합식별자(Composite Identifier) : 식별자를 구성하는 속성이 둘 이상인 식별자
대체 여부
- 본질식별자(Original Identifier) : 업무에 존재하는 본래의 식별자. 원조식별자 라고도 함.
- 인조식별자(Surrogate Identifier) : 업무에 존재하지 않으나 원조식별자가 너무 복잡하게 구성되어 있어 인위적으로 만든 식별자. 대리식별자 라고도 함.
식별자관계, 비식별자 관계
식별자 관계
엔터티간의 강한 연결 관계를 표현.
부모 엔터티의 식별자가 자식 엔터티의 주식별자 구성에 포함되며, ERD에서 실선으로 표시.
부모 엔터티 인스턴스와 자식 엔터티 인스턴스가 같은 생명주기를 가질 때, 식별자 관계로 표현하는게 적합.
비식별자 관계
엔터티간의 약한 연결 관계를 표현.
부모 엔터티의 식별자가 자식 엔터티의 일반 속성이 된다. ERD에서 점선으로 표현
자식 엔터티의 주식별자를 부모 엔터티와 별도로 생성하거나 부모 엔터티 인스턴스에 참조값이 없어도 자식 엔터티 인스턴스가 생성될 수 있을때, 비식별자 관계 고려.
여러 개별관계가 통합되는 경우에도 비식별자 관계를 우선적으로 고려하는 것이 좋음.
끝