제 1장 데이터 모델링의 이해
🎈데이터 모델링이란
1. 정보시스템을 구축하기 위한 데이터 관점의 업무분석 방법
2. 현실게계의 데이터(what)를 약속된 표기법으로 표현하는 과정
3. 데이터베이스를 구축하기 위한 분석 및 설계의 과정
🎈데이터 모델링의 목적
1. 업무정보를 구성하는 기초 정보들을 일정한 표기법으로 표현하여 정보시스템 구축의 대상이 되는 업무 내용을 정확하게 분석하는 것
2. 분석된 모델로 실제 데이터베이스를 생성하여 개발 및 데이터관리에 사용하기 위한 것
-> 단지 데이터베이스만을 구축하기 위한 것이 아니라 데이터모델링 자체로도 업무를 설명하고 분석하는 부분에서 중요한 의미
🎈데이터 모델링의 유의사항 ; 중복/ 비유연성/ 비일관성
1. 중복: duplication
데이터 모델은 같은 데이터를 사용하는 사람, 시간, 그리고 장소를 파악하는 데 도움을 주어 데이터베이스가 여러 장소에 같은 정보를 저장하는 잘못을 하지 않도록 한다
2. 비유연성: inflexibility
데이터 모델을 어떻게 설계했느냐에 따라 사소한 업무변화에도 데이터 모델이 수시로 변경되어 유지보수의 어려움을 가중시킬 수 있다. 데이터의 정의를 데이터의 사용 프로세스와 분리함으로써 데이터모델링은 데이터 혹은 프로세스의 작은 변화가 어플리케이션과 데이터베이스에 중대한 변화를 일으킬 수 있는 가능성을 줄인다
3. 비일관성: inconsistency
데이터 모델링을 할 때 데이터와 데이터간의 상호 연관 관계에 대해 명확하게 정의한다면 비일관성의 문제를 예방할 수 있다
사용자가 처리하는 프로세스 혹은 이와 관련된 프로그램과 테이블의 연계성을 높이는 데이터 모델이 업무 변경에 대해 취약하게 만드는 단점에 해당한다
예) 신용상태에 대한 갱신 없이 고객의 납부 이력 정보를 갱신하는 경우
데이터 모델링
1. 데이터 모델링 특징
- 현실세계를 일정한 형식에 맞추어 표현하는 추상화의 의미
- 시스템 구현을 포함한 업무분석 및 업무 형상화를 위한 작업으로 데이터베이스 구축을 위한 사전작업
- 복잡한 현실을 제한된 단어나 표기법으로 이해하기 쉽게 하는 단순화의 의미
- 애매모호함을 배제하고 누구나 이해가 가능하도록 전확하게 현상을 기술하는 정확화의 의미
2. 데이터 모델링의 설명
- 업무 정보를 구성하는 기초가 되는 정보들을 일정한 표기법으로 표현
- 분석된 모델로 데이터베이스를 생성하여 개발 및 데이터 관리에 사용하기 위한 것
- 데이터 모델링 자체로서 업무의 흐름을 설명하고 분석하는 부분에 의미를 가지고 있다
3. 모델링시 유의점
- 여러 장소의 데이터베이스에 같은 정보를 저장하지 않도록 하여 붕복성을 최소화 한다
- 데이터의 정의를 데이터의 사용 프로세스와 분리하여 유연성을 높인다
- 데이터간 상호 연계관계를 명확하게 정의하여 일관성있게 데이터가 유지되도록 한다
🎈스키마구조 3단계 : 각각 상호 독립
외부스키마: 사용자관점
개념스키마: 통합적인 관점, 데이터 모델링은 통합관점의 뷰를 가지고 있는 개념스키마를 만들어 가는 과정
내부스키마: 물리적관점
*외부스키마와 개념스키마 사이에 논리적 데이터 독립성 필요
*개념스키마와 내부시키마 사이에 물리적 데이터 독립성 필요
1. 개념스키마
- 모든 사용자 관점을 통합한 조직 전체 관점의 통합적 표현
- 모든 응용시스템들이나 사용자들이 필요로 하는 데이터를 통합된 조직 전체의 DB를 기술한 것으로 DB에 저장되는 데이터와 그들 간의 관계를 표현하는 스키마
2. 데이터 독립성의 구성요소
- 개념스키마 = 통합된 모든 사용자의 관점
- 내부스키마 = 물리적인 저장구조를 표현하는 스키마
- 외부스키마 = view단계는 여러 사용자의 관점으로 구성
- 외부/개념단계 = 논리적인 데이터 독립성을 고려하는 단계
3. 물리적 독립성 = 물리 스키마가 변경되어도 논리스키마에 영향을 주지 않는다. 물리적 독립성은 파일 저장구조의 변경이 논리스키마와 응용프로그램에 영향을 주지 않는다
🎈ERD(Entity Relationship model) 작성순서
엔터티를 그린다 > 엔터티를 적절하게 배치한다 > 엔터티 간 관계를 설정한다 > 관계명을 기술한다 > 관계의 참여도를 기술한다 > 관계의 필수여부를 기술한다
🎈엔터티 특징
1. 반드시 해당 업무에서 필요하고 관리하고자 하는 정보
2. 유일한 식별자에 의해 식별이 가능
3. 영속적으로 존재하는 인스턴스의 집합(한개가 아닌 두개 이상!)
4. 엔터티는 업무 프로세스에 의해 이용
5. 엔터티는 반드시 한개 이상의 속성
6. 엔터티는 다른 엔터티와 한개 이상의 관계(통계성, 코드성 예외)
🎈엔터티 종류
1. 독립엔터티 = 사람, 물건, 장소 등과 같이 현실세계에 존재하는 엔터티
2. 업무중심 엔터티 = 트랜젝션이 실행되면 발생하는 엔터티
3. 종속엔터티 = 주로 1차 정규화로 인해 관련 중심 엔터티로부터 분리된 엔터티
4. 교차엔터티 = M:M의 관계를 해소하려는 목적으로 만들어진 엔터티
🎈유형/무형에 따른 엔터티 종류
1. 유형엔터티 = 업무에서 도출되며 지속적으로 사용되는 엔터티
2. 개념엔터티 = 개념적으로 사용되는 엔터티,물리적 형태가 없다
3. 사건엔터티 = 비즈니스 프로세스를 실행하면 실현되는 엔터티
🎈발생시점에 따른 엔터티
1. 기본(키) 엔터티 = 다른 엔터티로부터 영향을 받지 않고 독립적으로 생성되는 엔터티
2. 중심 엔터티 = 기본 엔터티와 행위 엔터티간의 중간에 있는 엔터티
3. 행위 엔터티 = 2개 이상의 엔터티로부터 발생하는 엔터티
🎈엔터티의 이름 기준
1. 가능하면 현업에서 사용하는 용어 사용
2. 가능하면 약어를 사용하지 않는다
3. 단수명사
4. 모든 엔티티를 통틀어서 유일하게 이름을 부여
5. 엔터티는 생성의미대로 이름 부여
🎈엔터티, 인스턴스, 속성, 속성값의 관계
1. 한 개의 엔터티는 두개 이상의 인스턴스 집합이어야 한다
2. 한 개의 엔터티는 두개 이상의 속성을 갖는다
3. 한 개의 인스턴스는 한대의 속성값을 갖는다
🎈특성에 따른 속성분류
속성 = 업무에서 필요로 하는 인스턴스에서 관리하고자 하는 의미상 더이상 분리되지 않는 최소의 데이터 단위
1. 기본속성 = 업무분석을 통해 바로 정의한 속성(회원ID, 이름, 계좌번호 등)
2. 설계속성 = 원래 업무상 존재하지 않지만 설계를 하면서 도출해 내는 속성, 유일한 값(상품코드, 지점코드)
3. 파생속성 = 데이터를 조회할 때 성능을 빠르게 하기 위해 원래 속성의 값을 계산하여 저장할 수 있도록 만든 속성(합계, 평균)
🎈엔터티 구성 방식에 따른 속성 분류
1. PK속성 : 앤터티를 식별할 수 있는 속성
2. FK속성 : 다른 엔터티와의 관계에서 포함된 송석
3. 일반속성 : PK, FK에 포함되지 않은 속성
🎈도메인
도메인 = 각 속성이 가질 수 있는 값의 범위가 있는데 이를 그 속성의 도메인이라고 하며,
엔티티 내에서 속성에 대한 데이터 타입과 크기 그리고 제약사항을 지정하는 것
예) 주문이라는 엔터티가 있을 때 단가라는 속성값의 범위는 100에서 10000사이의 실수값이며 제품명이라는 속성의길이가 20자리 이내의 문자열로 정의할 수 있다
1. 부모/자식엔터티
부모엔터티에 데이터가 입력될 때 자식엔터티에 해당 값이 존재하는지의 여부와 상관없이 입력될 수 있기 때문에, (부모)고객 엔터티에 새로운 고객번호 데이터를 입력하는 것은 (자식)주문 엔터티에 해당 고객번호가 존재하는지와 상관없음
2. ERD 설명
- 1976년 피터첸에 의해 민들어진 표기법
- 엔터티 도출 > 엔터티 배치 > 관계설정 > 관게명 기술 순
- 관계의 명칭은 관계 표현에서 매우 중요한 부분에 해당
- 엔터티의 배치 위치는 필수사항은 아니지만 보통 가장 중요한 엔터티는 왼족 상단에 아래쪽 중앙에 배치하여 전체 엔터티와 선이 꼬이지 않게 배치한다
2-1. EDR그리기
엔터티를 그린다 -> 엔터티를 적절하게 배치한다 -> 엔터티간에 관계를 설명한다
-> 관계명을 기술한다 -> 관계의 참여도를 기술한다 -> 관계의 필수여부를 기술한다
3. 엔터티의 특징
- 다른 엔터티와 관계를 갖는다
- 유일한 식별자에 의해 식별이 가능하다
- 언터티는 업무 프로세스에 의해 이용
- 엔터티는 반드시 속성을 포함
4. 발생시점에 따른 엔터티 유형
- 행위엔터티 = 2개 이상의 엔터티로부터 발생하는 엔터티, 지속적으로 정보가 추가되고 변경되는 엔터티
- 중심엔터티 = 기본엔터티와 행위 엔터티간의 중간에 있는 엔터티, 기본 엔터티로부터 발생되고 행위 엔터티를 생성하는 엔터티
- 기본엔터티(key엔터티) = 다른 엔터티로부터 영향을 받지 않고 독립적으로 생성되는 엔터티
5. 엔터티에 이름을 부여하는 방법
- 현업의 업무 용어를 사용하여 업무상의 의미를 분명하게 한다
- 모든 엔터티에서 유일한 이름을 부여한다
- 엔터티가 생성되는 의미대로 자연스럽게 부여한다
- 가능하면 약어를 사용하지 않는다
- 서술식 용어는 사용하지 않는다
6. 속성에 대한 설명
- 속성 = 업무에서 필요로 하는 인스턴스에서 관리하고자 하는 의미상 더이상 분리되지 않는 최소의 데이터 단위
- 하나의 엔터티는 두개 이상의 속성을 갖는다
- 속성도 집합이다
- 엔터티에 대해 자세하고 구체적인 정보를 나타낸다
- 하나의 인스턴스에서 하나의 속성값을 갖는다
7. 데이터 모델링의 관계
- 관계는 존재에 의한 관계와 행위에 의한 관계로 구분될 수 있으나 ERD에서는 관계를 연결할 때 존재와 행위를 구분하지 않고 단일화된 표기법을 사용
- 관계는 존재적 관계와 행위에 의한 관계로 나누어짐
- 관계의 표기법은 관계명, 관계차수, 선택사양 3가지의 개념으로 표현
- UML(unified modeling language)에는 클래스다이어그램의 관계중 연관관계, 의존관계가 있고 이것은 실선과 점섬의 표기법으로 다르게 표현된다
- 연관관계 =항상 이용하는 관계로 존재적 관계에 해당, 소스코드에서 멤버변수로 선언하여 사용
- 의존관계 = 상대발 클래스의 행위에 의해 관계가 형성되는 행위적 관계에 해당, 오퍼레이션에서 파라미터등으로 이용
- -> 부서와 사원 엩어티 간의 '소속'관계는 존재적 관계
- -> 주문과 배송 엔터티간의 '배송근거'관계는 행위에 의한 관계
8. 두개의 엔터티 사이의 관계 도출
- 두 개의 엔터티 사이에 관심있는 연관규칙이 존재하는가?
- 두 개의 엔터티 사이에 정보의조합이 발생하는가
- 업무기술서, 장표에 관계연결에 대한 규칙이 서술되어 있는가?
- 업무기술서, 장표에 관계연결을 가을하게 하는 동사(verb)가 있는가
9. 관계와 조인
- 조인이란 식별자를 상속하고 상속된 속성을 매핑키로 활용하여 데이터를 결합하는 것
- 부모의 식별자를 자식의 실별자에 포함하면 식별관계, 부모의 식별자를 자식의 일반속성으로 상속하면 비식별관계
- 관계를 맺는다는 것은 식별자를 상속시키고 해당 식별자를 매핑키로 활용해 데이터를 결합해 보겠다는 것
🎈식별자의 종류
1. 대표성 여부
- 주식별자 = 엔터티 내에서 각 어커런스를 구분할 수 있는 구분자, 타 엔터티와 참조관계를 연결할 수 있음
- 보조식별자 = 엔터티 내에서 각 어커런스를 구분할 수 있는 구분자이나 대표성을 가지지 못해 참조관계를 연결하지 못함
2. 스스로 생성 여부
- 내부 식별자 = 언터티 내부에서 스스로 만들어짐
- 외부식별자 = 타 엔터티와의 관계를 통해 타 엔터티로부터 받아오는 식별자
3. 속성의 수
- 단일식별자 = 하나의 속성으로 구성
- 복합식별자 = 둘 이상의 속성으로 구성
4. 대체여부
- 본질식별자 = 언무에 의해 만들어짐
- 인조식별자 = 엄부적으로 만들어지지는 않지만 원조식별자가 목잡한 구성을 가지고 있기 때문에 인위적으로 만들어진 식별자
🎈주식별자의 특징
1. 유일성 = 주식별자에 의해 엔터티 내에 모든 인스턴스들을 유일하게 구분
2. 최소성 = 주식별자를 구성하는 속성의 수는 유일성을 만족하는 최소의 수
3. 불변성 = 주식별자가 한번 특정 엔터티에 지정되면 그 식별자의 값은 변하지 않아야 함
4. 존재성 = 주식별자가 지정되면 반드시 데이터값이 존재해야함(NULL불가)
🎈주식별자와 비식별자 비교
1. 목적
- 주식별자 = 강하 연결관계 표현
- 비식별자 = 약한 연결관계 표현
2. 자식 주식별자 영향
- 주식별자 = 자식 주식별자의 구성에 포함
- 비식별자 = 자식 일반속성에 포함
3. 표기법
- 주식별자 = 실선
- 비식별자 = 점선
4. 고려사항
- 주식별자 = 반드시 붐 엔티티에 종속 / 자식 주식별자 구성에 부모 주식별자 포함 필요 / 상속받은 주식별자 속성을 타 엔터티에 이전 필요
- 비식별자 = 약한 종속관계 / 자식 주식별자 구성을 독립적으로 구성 / 자식 주식별자구성에 부모 주식별자 부분 필요 / 상속박은 주식별자 속성을 타 엔터티에 차단 필요 / 부모쪽의 관계참여가 선택관계
1. 주식별자의 고려사항
- 주식별자에 의해 엔터티 내의 모든 인스턴스들이 유일하게 구분되어야 한다
- 주식별자를 구성하는 속성의 수는 유일성을 만족하는 최소의 수가 되어야 한다
- 지정된 주식별자의 값은 자주 변하지 않는 것이어야 한다
- 주식별자가 지정이 되면 반드시 값이 들어와야 한다
2. 주식별자의 특징
- 유일성 = 주식별자에 의해 엔터티 내의 모든 인스턴스들은 유일하게 구분
- 존재성 = 주식별자는 데이터 값이 없을 수 없다(NULL불가)
- 불변성 = 주식별자가 한번 특정 엔터티에 지정되면 그 식별자의 값은 변하지 않음
- 죄소성 = 주식별자를 구성하는 속성의 수는 유일성을 만족하는 최소의 수
3. 비식별자의 연결
- 엔터티와 엔터티가 1:M관계의 부모와 자식관계에서 데이터가 부모없이 자식쪽 엔터티의 인스턴스가 먼저생성될 수 있는 경우 비식별자 관계이다
- 부모엔터티의 인스턴스가 자식엔터티의 인스턴스보다 먼저 소멸하는 경우 비식별자 관계로 연결해야 한다
- SQL문의 조인관계를 최소화 하기 위해 식별자 관계로 연결한다
- 자식엔터티의 식별자가 부모 엔터티의 주식별자를 상속받아 생성하는 것보다 별도의 주식별자를 생성하는 것이 유리하다고 판단되는 경우 비식별자 관계로 연결해야 한다
4. 보조식별자와 인조식별자
- 인조식별자는 대체로 본질식별자가 복잡한 구성을 가질 때 사용
- 인저식별자를 사용하면 중복테이터를 막기 어려워진다
- 인조식별자를 사용하면 본질식별자를 사용할 때와 비교하여 추가적인 인덱스가 필요하다
- 인조식별자도 단점이 존재하므로 꼭 필요할 때만 사용한다
제 2장 데이터 모델과 SQL
🎈제 1차 정규형
모든 속성은 반드시 하나의 값을 가져야 한다
중복속성에 대한 분리가 1차 정규화의 대상이 되며, 로우단위의 중복도 1차 정규화 대상이지만 컬럼단위로 중복이 되는 경우도 1차 정규화 대상이다
🎈제 2차 정규형
1. 1차 정규형을 만족하고 모든 일반 컬럼은 기본키 전체에 종속되어야 한다
2. 기본키에 종속되지 않거나 기본키 일부 컬럼들에만 종속된 컬럼은 분리되어야 한다
🎈제 3정규형
엔터티의 일반속성 간에는 서로 정속적이지 않다
속성에 종속적인 속성이 있다면 분리해야 한다
🎈반정규화
DB의 성능 향상을 위해 데이터 중복을 허용하고 조인을 줄이는 것으로, 반정규화를 통해 조회 성능은 좋아지지만 데이터 모델의 유연성을 낮아지며 데이터 무결성이 깨질 위험이 있다
🎈성능 데이터 모델링의 고려사항
1) 정규화를 정확하게 수행
2) 데이터베이스 용량산정을 수행
3) 트랜잭션의 유형 파악
4) 반정규화
5) PK/FK 및 슈퍼타입/서브타입 조정
6) 데이터 모델 검증
1. 정규화 성능
- 정규성을 수행하면 중복 속성을 제거하여 용량을 최소하 시킬 수 있다
- 일반적으로 정규화 수행 시 데이터처리 성븡이 향상된다
- 반정규화가 조회 성능을 항상 향상시키는 것은 아니며, 때로는 정규화에 의해 성능이 향상될 수도 있다
- 정규화로 인해 조회성능이 저하될 수 있기 때문에 반정규화를 고려한다
2. 어떤 릴레이션 R이 제2정규형이고, 기본키에 속하지 않는 속성 모두가 기본키에 이행적 함수종속이 아닐 때 제 3정규형에 속한다
3. 모델링과 정규화
- 정규화는 논리 데티터 모델 상세와 과정의 대표적인 활동으로, 논리데이터 모델의 일관성을 중복 제거하여 속성들이 가장 적절한 엔터티에 배치되도록 하여 보다 신뢰성있는 데이터를 얻는것을 목적
- 제 1정규형은 모든 인스턴스가 반드시 하나의 값을 가져한다
- 제 3정규형은 만족하는 엔터티의 일반속성을 주식별자 전체에 종속적이다
- 반정규화는 성능을 위해 데이터 중복을 허용하는 것이지만 성능이 항상 보장되는 것은 아니다
🎈NULL
1. 널값은 아직 정의되지 않은 값으로 0(숫자)또는 공백(문자)과는 다르다
2. 테이블을 생성할 때 NOT NULL 또는 Primary key로 정의되지 않는 데이터 유형은 널값을 포함할 수 있다
널값을 포함하는 연산의 경우 결괏값도 널값이다.(사칙, 비교)
3. 결과값이 널이아닌 값을 가지고자 할때
- NVL('값','지정값') : 널이 아닌 경우 값을 출력하고 널일 경우 지정값을 출력
- ISNULL('표현식1','표현식2') : 표현식1이 널이면 표현식2
4. 널값의 대상이 숫자유형인 경우 주로 0, 문자일 경우 공백보다는 X와 같이 의미없는 문자로 바꾼다
1. null에 대한 설명
- 모르는 값
- 값의 부재
- 널과의 모든 비교는 널값 반환
- 공백문자 또는 숫자 0과 다름
# 순차적으로 수행되는 작업 A와 B가 반듯이 모두 수행되거나 모두 수행되지 않는 경우
- A와 B는 하나의 트랜잭션으로 묶여 처리된다
- A와 B를 모두 수행한 후 커밋한다
- A와 B에 주어진 조건은 트랜잭션의 원자성에 해당
- A까지만 수행되고 시스템 장애가 발생했다면 A를 undo 해야한다
'자격증 > SQLD' 카테고리의 다른 글
[오답노트] 1. 데이터 모델링의 이해2 (0) | 2024.03.09 |
---|---|
SQL 동일연산 (0) | 2024.03.04 |
[오답노트] 2-2. SQL 활용 (0) | 2024.03.04 |
[오답노트] 2-1. SQL 기본 (0) | 2024.03.03 |
[오답노트] 2-3. 관리구문 (0) | 2024.03.02 |