반응형

bitcamp-docs

db

# DB 모델링

        // 모델링 // 분석하고 구조화시켜 생각한 바를 글과 그림으로 표현한 것. 

        // 렌더링 // 명령어를 해석하여 화면에 출력하는 것. 

        // HTML 렌더링 // HTML 태그를 해석하여 그에 해당하는 UI를 출력하는 것.

        // DB 모델링 // 데이터를 분석하고 구조화시켜 데이터 속성과 관계를 글과 그림으로 표현한 것.

        // 데이터가 중복되지 않도록 테이블을 구조화 // 데이터의 안정성, 신뢰성을 높인다. // 무결성을 유지한다.

## 주요 용어

        // table(relation; entity; file) // intension(schema; header) 데이터 구조 설계도 

        // extension(instance; data) 데이터 // row(tuple; record) 데이터(여러 컬럼으로 이루어진) 한 개. ex) 학생

        // column(attribute; field) 데이터의 한 항목. ex) 이름, 학번, 전화번호

## 키(key) //
데이터를 구분할 때 사용할 식별자. // "수퍼 키(super key)"라고도 함.

        // 식별자 // 데이터를 구분할 때 사용하는 값. // 한 개 이상의 컬럼으로 구성된다.

        // 식별자를 key라고 부른다. // ex) 학생(학번, 이름, 전화, 이메일, 학과, 우편번호, 주소, 주민등록번호)

        // 학번(O) // 주민번호(O) // 이메일(O) // 전화(X) // (이름,전화)(O) // (이메일,이름)(O) // (이름,학과,학번)(O)

### 후보키(candidate key) 선정 // super key 들 중에서 선별된 최소키를 가리킨다.

        // 최소키 // 최소한의 컬럼 값 만으로 식별이 가능한 key

        // 수퍼 키 ex) // 학번(O) // 주민번호(O) // 이메일(O) //

        // (이름,전화)(O) // 이름과 전화 값을 묶은 것 보다 적은 개 수의 후보 키가 있다면 가능한 제외한다 

        // (이메일,이름)(X) // 이메일 만으로 식별 가능 // (이름,학과,학번)(X) // 학번 만으로 식별 가능

        // (이름,학과,전화)(X) // 이름과 학과, 전화 보다 더 적은 컬럼의 후보 키가 있기 때문에 가능한 제외한다

### 기본 키/주 키(primary key; PK) 선정 //후보키 중에서 데이터 식별자로 사용하기 위해 선정된 키.

        // 나머지 후보키는 대안키(alternate key)라 한다. // PK는 아니지만 PK처럼 데이터 식별자로 사용할 수 있기 때문

### 대리 키(surrogate key) / 인공 키(artificial key)

        // 주 키의 컬럼의 개수가 많거나 적절한 컬럼이 없는 경우, 임의의 컬럼을 추가하여 PK로 만든다.

        // ex) 게시물 첨부파일(파일명, 등록일) // 파일명이 중복될 수 있다.

        // 파일명과 등록일을 묶어서 PK로 사용하기에는 적절하지 않다.

        // 이런 경우 "첨부파일번호" 컬럼을 임의로 추가하여 PK로 설정한다.

### 대체 키(alternate key) // 후보 키(candidate key) 중에서 PK로 선정된 키를 제외한 나머지 후보 키를 가리킨다.
        // 대체 키 // ex) 학번(X) // 만약 학번이 PK로 선정되었다면 대체 키가 아니다.

        // 주민등록번호(O) // PK 대신 사용할 수 있는 키를 대체 키라 부른다.

        // 이메일(O) // PK 대신 사용할 수 있는 키를 대체 키라 부른다.

        // 대체 키는 테이블을 정의할 때 Unique 컬럼으로 지정된다.

        // PK는 아니지만 값이 중복되면 안되는 컬럼이기 때문에 중복되지 않도록 유니크 컬럼으로 지정한다.

### 외래 키(foreign key) //
 다른 릴레이션(테이블)의 PK 값을 저장하는 컬럼.

       // FK가 있는 테이블을 자식 테이블(릴레이션)이라 부르고,

       // FK가 가리키는 PK컬럼이 있는 테이블을 부모 테이블(릴레이션)이라 부른다.

       // 부모-자식 관계를 맺을 때, 자식 테이블 쪽에 부모 테이블의 데이터를 가리키기 위해 외부키 컬럼을 둔다.
  
### 논리모델 // 특정 DBMS를 고려하지 않고 수행하는 개념적인 모델링

### 엔티티 식별 및 속성 식별 // 특정 값들의 집합 시스템에서 다루는 데이터를 식별한다.

       // 테이블을 구성하는 값 // 속성(attribute) // 컬럼(column)

### 주 키 선정(Primary Key; PK) // 데이터를 구분할 때 사용할 식별자를 지정한다.

        // PK로 지정할 적절한 컬럼이 없는 경우 surrogate key(대리 키=인공 키) 사용을 고려한다.

### 제1정규화

        // 정규화 // 데이터 중복을 찾아내어 별도의 테이블로 데이터를 분리시키는 것.

        // 중복 데이터 또는 중복 컬럼을 별도의 테이블로 분리하여 부모-자식 관계를 맺는다.

        // 데이터를 참조 하는 테이블이 자식테이블이고, 데이터를 갖고 있는 테이블이 부모 테이블이다.

        // 자식 테이블에서는 부모 테이블의 데이터를 가리키기 위해 그 데이터의 pk값을 보관해야 한다.

        // 부모 테이블의 데이터에 대해 PK값을 저장하는 컬럼을 외부키(FK)라 부른다.

### 제2정규화 
        // PK가 여러 컬럼으로 이루어진 경우에 수행 // 모든 일반 컬럼은 반드시 PK 컬럼에 종속되어야 한다.

        // 그렇지 않은 일반 컬럼이 있다면 별도의 테이블로 분리하여 부모-자식 관계를 맺는다.

### 제3정규화

        // 어떤 컬럼이 PK가 아닌 다른 일반 컬럼에 종속되는 경우가 있다면,

        // 별도 테이블로 분리하여 부모-자식 관계를 맺는다.
  
### 다 대 다 관계의 해소

        //  테이블과 테이블 사이에 다 대 다 관계를 형성한다면, 일 대 다의 관계로 변경해야 한다.

        // DBMS는 물리적으로 다 대 다 관계의 데이터를 저장할 수 없다.

        // 해결책 // 관계 테이블 // 두 테이블의 관계를 저장할 테이블을 만든다.

        // 관계 테이블은 각 테이블과 일 대 다의 관계를 맺는다.  

### 포함 관계 및 배타적 관계 추가

        // 여러 테이블에 공통으로 포함되는 컬럼이 있는 경우, 별도의 테이블로 정의 //

        // 기본 데이터를 저장하고 있는 테이블 쪽을 부모 테이블로 한다.

        // 포함 관계 // 여러 테이블에서 동시에 포함할 수 있는 관계이다.

        // 배타적 관계 // 여러 테이블 중에서 오직 한 개의 테이블만 포함할 수 있는 관계다.  

### 관계의 차수 지정 // 데이터 끼리 상호 관계의 개수를 지정한다.

        // ex) 1:*(0이상) FK 컬럼이 not null 이다.  // 1:1..*(1이상) FK 컬럼이 not null 이다.

        // ex) 0..1:*(0이상) FK 컬럼이 null 허용이다. // 0..1:1..*(1이상) FK 컬럼이 null 허용이다.  

### 유니크(Unique) 컬럼 지정 // PK는 아니지만 PK처럼 중복되어서는 안되는 컬럼이다.

        // 대체 키(alternate key) 컬럼이 유니크 컬럼이 된다.

        // PK로 선정되지 않은 나머지 후보 키는 유니크 컬럼으로 지정하여 데이터가 중복되지 않도록 한다.

### null 허용 여부 지정
// 필수 입력 컬럼인지 선택 입력 컬럼인지 지정한다. 

### 인덱스 컬럼 지정 // 데이터를 찾을 때 검색 조건으로 사용할 컬럼을 지정한다.

        // 조회 컬럼으로 지정하면 그 컬럼의 값으로 색인표가 자동으로 생성되어 데이터를 찾는 속도가 빨라진다.
- 장점: select 속도가 빨라진다.
  단점: insert,update,delete 할 때 마다 색인표를 갱신해야하므로 속도가 느리다. 
  
## [물리모델] p.345 ~
- 특정 DBMS에 맞춘 물리적인 모델링

### 21. DBMS에 맞춰서 테이블명과 컬럼명을 설정한다.
- DBMS에서 테이블명과 컬럼명을 작성할 때 보통 다음의 규칙에 따라 작성한다.
  ex) first name(FST_NM), regist date(REG_DT), teacher assignment(TCH_ASN)
- 단어는 알파벳 3자 또는 4자로 축약해서 표현한다.
- 단어와 단어 사이는 밑 줄( _ )로 표현한다.

### 22. 도메인(domain) 정의 및 적용 p.353 ~
- 비슷한 종류의 컬럼들을 묶어 새 타입으로 정의한다.
- 이점: 타입을 변경할 때 한 번에 여러 컬럼을 변경할 수 있어서 유지보수에 좋다.
  
### 23. 번호가 자동 증가하는 컬럼을 지정
- 테이블의 PK 중에서 자동으로 증가해야 하는 컬럼을 지정한다.

### 24. 기본 값 및 제약 조건 설정
- 일부 컬럼에 대해 기본 값을 설정한다.
- 일부 컬럼의 값의 범위를 지정한다.

### 포워드 엔지니어링(forward engineering)
- 모델 ----> 코드
- 참고: 리버스 엔지니어링(reverse engineering)
  코드 ----> 모델   

### 정규화
- 데이터가 중복되지 않도록 구조화시키는 것.
- 참고: 역정규화 (실행 속도를 높이기 위해 데이터 중복을 허용하는 것)
  
## 관계: 부모 테이블과 자식 테이블
### 부모 테이블
- 자식 테이블이 참조하는 데이터를 갖고 있는 테이블

### 자식 테이블
- 부모 테이블의 데이터를 참조하기 위해 그 데이터의 PK 값을 갖고 있는 테이블
- 이렇게 부모 테이블의 PK를 저장하는 컬럼을 FK(Foreign Key)라 부른다.

### 외부키(Foreign Key; FK)
- 자식 테이블에서 부모 테이블의 특정 데이터를 가리키는 컬럼이다.
- 반드시 부모 테이블의 PK 컬럼 값을 저장해야 한다.
  다른 일반 컬럼의 값은 사용할 수 없다.

## 식별 관계와 비식별 관계 p.329, 347~352
### 비식별 관계(non-identifying)
- 자식 테이블의 외부키(FK)가 그 테이블에서 일반 컬럼으로 사용될 때
- 즉 관계를 표현하는 외부키가 그 테이블에서 식별자로 사용되지 않는 것을 말한다.
- FK != PK

### 식별 관계(identifying)
- 자식 테이블의 외부키(FK)가 그 테이블에서 PK 컬럼으로 사용될 때  
- 즉 관계를 표현하는 외부키가 그 테이블에서 식별자로 사용되는 것을 말한다.  
- FK == PK

   
        // http://en.exerd.com/ 접속 // dounload // eXERD v3.X // eXERD 3.x Update Site URL // 팝업창 URL 복사

        // eclipse // help // Install new software // add // name : eXERD Location : URL 복사 붙혀넣기 // add

        // Contact all update sites during install to find required software 체크 해체 // 다운 받는데 엄청 오래걸린다.

        // 설치 진행 // 설치 진행과정은 show view 들어가서 Progress를 키면 다운 과정을 볼 수 있다. // restart

        // New // Ohter // eXERD File // eXERD 대상 DBMS : MySQL 5.1 ~ 5.8 // DBMS에 맞게 데이터가 입력됨

        // 테이블 생성 //

반응형

+ Recent posts