✅ 키의 정의
- 하나의 테이블에서 각 레코드를 고유하게 식별할 수 있는 컬럼 또는 컬럼의 조합
- 키의 조건은 NOT NULL, UNIQUE
- 테이블 디자인 시 키를 정하고 테이블을 데이터베이스에 만들 때 명시적으로 키를 선언함
- 키는 키에 대응하는 인덱스 테이블이 생성됨
- 인덱스 테이블은 키 값에 의해서 정렬되어 있음
✅ 후보키 (Candidate Identifier)
- 주 식별자가 될 가능성이 있는 식별자
- 모든 식별자는 주 식별자가 될 수 있는 후보이므로, 식별자와 후보 식별자는 사실상 동일어
- NULL을 허용할 수 있다는 것이 주식별자와 다른점
- 물리적으로 인스턴스의 유일성을 보장해주기 위해서 UNIQUE 인덱스를 생성하는 것이 바람직하다
| 주민번호 | 고객명 | 폰번호 | 이메일 | 고객번호 |
| 123456-7890123 | 홍길동 | 010-xxx | a@y.z | 1234 |
| 123456-7890123 | 김길동 | 010-xxx | b@y.z | 5678 |
✏️어떤 값을 PK로 잡을까?
다음과 같이 있을때 주민번호 폰번호 이메일 모두 후보키가 될수는 있지만 폰번호나 이메일은 없을수도있고 주민번호 같은 경우도 고객에게 얻어지는 정보는 100프로 확신을 할수 없다 그래서 회사에서 부여하는 고객번호를 PK로 잡는게 맞다.
- 결정자(Determinant) : 이 값을 알면 나머지 속성 값도 알 수 있는 속성
✅ Primary Key(PK)
- 테이블 컬럼에서 각 레코드를 유일하게 실별할 수 있는 컬럼 또는 컬럼들의 집합
- 후보 키들 중에 대표 키로 선정된 식별자
- 최소한의 속성 조합이 주 식별자가 되도록 해야 한다.
- 테이블 내의 각 레코드가 정확하게 식별되도록 보장한다.
- 다양한 종류의 무결성을 설정하고 강화하는 것을 도와준다.
- 테이블 관계를 설정하도록 해준다.
✅ 데이터 타입
1. 문자형 데이터 타입
Oracle
| 데이터 타입 | 설명 |
| CHAR(n) | 고정길이 문자 / 최대 2,000byte / 디폴트 값은 1byte |
| VARCHAR2(n) | 가변길이 문자 / 최대 4,000byte / 디폴트 값은 1byte |
| NCHAR(n) | 고정길이 유니코드 문자(다국어 입력가능) / 최대 2,000byte / 디폴트 값은 1byte |
| NVARCHAR(n) | 가변길이 유니코드 문자(다국어 입력가능) / 최대 2,000byte / 디폴트 값은 1byte |
| LONG | 최대 2GB 크기의 가변길이 문자형 |
| CLOB | 대용량 텍스트 데이터 타입(최대 4Gbyte) |
| NCLOB | 대용량 텍스트 유니코드 데이터 타입(최대 4Gbyte) |
MySQL
| 데이터 타입 | 설명 |
| CHAR(n) | 고정 길이 문자 / n은 1 ~ 255( 2^8-1)byte |
| VARCHAR(n) | 가변길이 문자 / N은 1 ~ 65,535(2^16-1)byte |
| TINYTEXT(n) | 문자열 데이터 / 최대 255(2^8-1)byte |
| TEXT(n) | 문자열 데이터 / 최대 65,535(2^16-1)byte |
| MEDIUMTEXT(n) | 문자열 데이터 / 최대 16,777,215(2^32-1)byte |
| LONGTEXT(n) | 문자열 데이터 / 최대 4,294,967,295(2^32-1) |
| ENUM('vaue1', 'vaue2'...) | 열거형 / 정해진 몇가지의 값들 중 하나만 저장 / 최대 65,535개의 개별갑을 가질 수 있고, 내부적으로 정수 값으로 표현됩니다. |
| SET('value1', 'value2'...) | 집합형 / 정해진 몇가지의 값들 중 여러 개를 저장, 최대 64개의 요소로 구성될 수 잇고, 내부적으로 정수 값으로 표현됩니다. |
2. 숫자형 데이터 타입
Oracle
| 데이터 타입 | 설명 |
| NUMBER(P, S) | 가변숫자 / P (1 ~ 38, default : 38) / S (-84 ~ 127, default : 0) / 최대 22byte |
| FLOAT(P) | NUMBER의 하위 타입 / P (1 ~ 128, default : 128) / 이진수 기준 / 최대 22byte |
| BINARY_FLOAT | 32bit 부동소수점 수 / 최대 4byte |
| BINARY_DOUBLE | 64bit 부동소수점 수 / 최대 8byte |
MySQL
| 데이터 타입 | 설명 |
| BIT(n) | 비트 값 유형 / n은 값 당 bit 수를 나타내며 1~64 사이의 값을 나타냅니다. |
| BOOL, BOOLEAN | 해당 유형은 TINYINT(1)의 동의어 입니다 / 0은 false, 0이 아닌 값은 true로 간주 합니다. |
| TINYINT(n) | 정수형 데이터 타입(1byte) / -128 ~ +127 또는 0 ~ 255수 표현 가능 |
| SMALLINT(n) | 정수형 데이터 타입(2byte) / -32,768 ~ 32,767 또는 0 ~ 65,536수 표현 가능 |
| MEDIUMINT(n) | 정수형 데이터 타입(3byte) / -8,388,608 ~ +8,388,607 또는 0 ~ 16,777,215수 표현 가능 |
| INT(n) | 정수형 데이터 타입(4byte) / -2,147,483,648 ~ +2,147,483,647 또는 0 ~ 4,294,967,295수 표현 가능 |
| BIGINT(n) | 정수형 데이터 타입(8byte) / 무제한 수 표현 가능 |
| FLOAT(n,d) | 부동 소수형 데이터 타입(4byte) / 고정 소수점 사용 형태 |
| DOUBLE(n,d) | DOUBLE PRECISION(n,d) REAL(n,d) 부동 소수형 데이터 타입고정(8byte) / DOUBLE을 문자열로 저장 |
| FLOAT(p) | 부동 소수점 숫자 / p는 비트 정밀도를 가리키지만, MySQL은 결과 데이터 타입으로 FLOAT 또는 DOUBLE을 사용할 지를 결정할 때에만 이 값을 사용 |
| DECIMAL(n,d) | 묶음 고정 소수점 숫자 / n은 전체 자릿수(Precision : 정밀도), d는 소수점 뒷자리수(Scale : 배율) - DECIMAL(5)의 경우 : -99,999 ~ 99,999 - DECIMAL(5,1)의 경우 : -9,999.9 ~ 9,999.9 - DECIMAL(5,2)의 경우 : -999.99 ~ 999.99 최대 65자리까지 지원 |
| DEC(n,d) NUMERIC(n,d) FIXED(n,d) |
DECIMAL과 동의어 / FIXED(n,d)는 다른 데이ㅓㅌ베이스 시스템과의 호환을 위해서 사용 |
3. 날짜형 데이터 타입
Oracle
| 데이터 타입 | 설명 |
| DATE | BC 4712년 1월 1일부터 9999년 12월 31일, 연, 월, 일, 시, 분, 초 까지 입력 가능 |
| TIMESTAMP | 연도, 월, 일, 시, 분, 초 + 밀리초까지 입력가능 |
MySQL
| 데이터 타입 | 설명 |
| DATE | 날짜(년도, 월, 일) 형태의 기간 표현 데이터 타입(3byte) |
| TIME | 시간(시, 분, 초) 형태의 기간 표현 데이터 타입(3byte) |
| DATETIME | 날짜와 시간 형태의 기간 표현 데이터 타입(8byte) |
| TIMESTAMP | 날짜와 시간 형태의 기간 표현 데이터 타입(4byte) / 시스템 변경 시 자동으로 그날짜와 시간이 저장 |
| YEAR | 년도 표현 데이터 타입(1byte) |
✏️공부한 내용
- 모든 데이터타입을 외울순 없지만 필요할때 찾아 볼수있게 정리해뒀고 자주쓰는 데이터 타입의 차이를 알수 있었다.
- PK에 대해서 더 자세히 알수 있었다
- 키에 대응하는 인덱스 테이블이 생성된다는것도 새로 배우게되었다
'Database > DB Modeling' 카테고리의 다른 글
| [DB Modeling] 데이터 베이스 중급 - Primary Key 설계 (0) | 2024.11.22 |
|---|---|
| [DB Modeling] 데이터 베이스 중급 - 관계형 데이터베이스 소개 (1) | 2024.11.22 |