테이블의 구성: 필드와 레코드
RDBMS 내의 레코드들은 테이블의 형태를 이룬다.
- 필드 타입: 필드로 사용 가능한 데이터 유형
- 키: 테이블 내의 특정 레코드를 식별할 수 있는 필드의 집합
키는 레코드의 식별뿐만 아니라 테이블 간의 참조에도 사용된다!
필드 타입
유형 | 타입 | 설명 |
숫자형 | TINYINT | 1바이트의 정수( -128 ~ 127) |
SMALLINT | 2바이트의 정수(-32768 ~ 32767) | |
MEDIUMINT | 3바이트의 정수(-8388608 ~ 8388607 ) | |
INT | 4바이트의 정수(-2147483648 ~ 2147483647 | |
BIGINT | 8바이트의 정수(-9223372036854775808 ~ 9223372036854775807) | |
FLOAT | 4바이트의 부동 소수점 실수 | |
DOUBLE | 8바이트의 부동 소수점 실수 | |
DECIMAL | DECIMAL (전체 자릿수. 소수점 자리수) 형식의 고정 소수점 실수 예) DECIMAL(3.2)는 소수점 이하 2자리인 총 3자릿수의 소수 |
|
문자형 | CHAR | 고정 길이 문자열 |
VARCHAR | 가변 길이 문자열 | |
BLOB | 이미지, 파일과 같은 대량 바이너리 데이터 | |
TEXT | 대량 가변 길이 문자열 | |
날짜/시간형 | DATE | YYYY-MM-DD 형식의 날짜 |
TIME | HH:MM:SS 형식의 시간 | |
DATETIME | 8바이트 YYYY-MM-DD YYYY-MM-DD 형식의 날짜와 시간 | |
TIMESTAMP | 4바이트 YYYY-MM-DD YYYY-MM-DD 형식의 날짜와 시간 | |
기타 | ENUM | 정해진 값 중 하나 (예: 남, 여) |
GEOMETRY | 지리 정보(예: 좌표 데이터) | |
XML | XML 데이터 | |
JSON | JSON 데이터 |
키
테이블의 레코드를 식별할 수 있는 하나 이상의 필드
키는 테이블의 각 레코드를 식별하는 용도로 사용되지만 테이블 간의 참조를 위해 사용되기도 하고 테이블의 접근 속도를 높이기 위해 사용되기도 한다.
- 후보키
- 복합키
- 슈퍼키
- 기본키
- 대체키
- 외래키
핵심은 후보,기본,외래키다.!!!!!!!!
- 후보키: 테이블의 한 레코드를 식별하기 위한 필드의 최소 집합
특정 레코드를 유일하게 식별한다는 점에서 유일성을 갖추었다고 표현한다.
후보키는 하나 이상의 필드로 구성될 수 있으며, 후보키에 포함된 필드 중 하나라도 생략하면 레코드를 고유하게 식별할 수 없다.
불필요한 필드가 키에 포함되어 있지 않고, 최소한의 정보로 레코드를 식별한다는 점에서 최소성을 갖추었다고도 표현한다.
즉 후보키는 유일성과 최소성을 모두 만족하는 키다!
학번, 이메일, 전화번호가 고유한 값이라면 각각이 후보키로 간주 될 수 있다.
- 복합키: 두 필드 이상으로 구성된 후보키
성적이라는 테이블이 있다고 가정했을때 후보키는 학번, 과목 코드가 된다.
최소 이 두개의 필드로 레코드를 식별할 수 있기 때문.
- 기본키(primary key): 한 레코드를 식별하도록 선정되어 테이블당 하나만 존재할 수 있는 키. 여러 후보 키 중에서 테이블의 레코드를 대표하도록 선택된 키
기본키는 후보키의 일부이기 때문에 유일성과 최소성을 모두 만족하며, 여러 필드로 구성된 기본 키도 존재할 수 있다.
기본키는 중복된 값이 없어야하고 반드시 값이 존재해야하며, 레코드를 구분하기 위한 최소한의 정보만으로 이루어져있어야한다.
기본키는 NULL 값을 가질 수 없음.
학생 테이블에선 학번을 기본키로 삼을 수 있음
* 기본키가 아닌 후보키는 대체키라고한다. 기본키 선정하고 남은 후보키들임
- 외래키(foreign key): 다른 테이블의 기본 키를 참조하는 필드로 테이블간의 참조 관계를 형성할 때 사용하는 키
테이블의 관계
일대일 대응관계, 일대다 대응 관계, 다대다 대응관계로 나눌 수 읶ㅆ다.
일대일 대응 관계
하나의 레코드가 다른 테이블의 레코드 하나에만 대응되는 경우
users테이블
id | name |
1 | 정국 |
2 | 원빈 |
user_profiles 테이블
id | user_id | bio |
1 | 1 | ㅎㅇㅎㅇ |
2 | 2 | 안녕하세요 |
여기서 user_profiles.user_id는 users.id를 참조하는 외래키다.
그리고 user 1명당 프로필 1개만 가진다.
일대다 대응관계
하나의 레코드가 다른 테이블의 여러 레코드와 대응
예) 선생님 1명이 여러 학생을 가르칠 수 있지만, 학생은 담임 선생님 1명만 있는거랑 비슷함
users테이블
id | name |
1 | 정국 |
2 | 원빈 |
posts
id | user_id | content |
1 | 1 | 날 닮은 너 |
2 | 1 | 너 누구야! |
3 | 2 | 사건은 다가와 |
정국이는 글 2개 썻음 1:N 관계
각 글(post)은 오직 하나의 유저(user_id)만 참조한다.
다대다(N:M) 관계
한 테이블의 여러 레코드가 다른 테이블의 여러 레코드와 대응되는 경우
예) 학생은 여러 수업을 듣고, 수업엔 여러 학생이 들어올 수 있음
students
id | name |
1 | 정국 |
2 | 원빈 |
courses
id | name |
1 | 수학 |
2 | 과학 |
중간 테이블을 만들어서 연결해주어야함.
student_courses (중간 테이블)
student_id | course_id |
1 | 1 |
1 | 2 |
2 | 1 |
정국이는 수학 + 과학을 듣고
원빈이는 수학만 들음
중간 테이블이 없으면 이 관계를 표현할 수가 없음!
관계 | 예시 | 특징 |
1:1 | 유저 <-> 프로필 | 서로 딱 1개씩만 연결 |
1:N | 유저 <-> 글 | 한 명이 글 여러개 쓸 수 있음 |
N:M | 학생 <-> 수업 | 서로 여러 개랑 연결됨 |
무결성 제약 조건
- 무결성: 일관되며 유효한 데이터의 상태
- 무결성 제약 조건: 데이터베이스에 저장된 데이터의 일관성과 유효성을 유지하기 위해 마땅히 지켜야하는 조건
도메인 제약 조건
테이블이 가질 수 있는 필드 타입과 범위에 대한 규칙
- 필드 데이터는 *원자 값을 가져야하고
- 지정된 필드 타입을 준수해야하며
- 값의 범위나 기본값이 지정되었을 경우 그를 따라야한다.
- 또한 NULL이 허용되지 않았다면 NULL이 저장되어선 안된다.
원자값이 뭔겨
더 이상 쪼갤 수 없는 단일한 값을 말한다.
테이블의 각 필드 데이터는 더 이상 쪼갤 수 없는 단일한 값이어야함
키 제약 조건
레코드를 고유하게 식별할 수 있는 키로 지정된 필드에 중복된 값이 존재해서는 안된다는 제약 조건
엔티티 무결성 제약 조건
기본키로 지정한 필드는 고유한 값이어야하며 NULL이 되어서는 안된다는 규칙
키본키와 관련한 제약 조건이므로 기본키 제약 조건이라고도 부른다.
참조 무결성 제약 조건
외래키를 통해 다른 테이블을 참조할 때 데이터의 일관성을 지키기 위한 제약 조건
참조하는 테이블의 기본키와 같은 값을 갖거나 NULL값을 가져야한다는 규칙
외래키와 관련한 제약 조건으로 외래 키 제약 조건이라고도 부른다.
'cs' 카테고리의 다른 글
01. 디자인 패턴 (0) | 2025.04.22 |
---|---|
03. SQL (0) | 2025.04.04 |
01. 데이터베이스 (0) | 2025.04.04 |
04. 전송계층 - TCP와 UDP (0) | 2025.03.19 |
03. 네트워크 계층 - IP (0) | 2025.03.19 |