데이터베이스란?
-
웹 사이트 혹은 앱을 개발할 때는 데이터베이스를 사용하는 경우가 많다.
-
커뮤니티 사이트를 개발한다고 하면 회원(User)정보
, 게시글(Board) 정보
등을 저장할 공간이 필요하다.
-
커뮤니티 사이트 웹 서버에서는 데이터베이스에 데이터 조회, 추가, 수정, 삭제 등을 통해 데이터 베이스 안에 있는 회원 정보, 게시글 정보 등을 요청할 수 있다.
DBMS
- 데이터베이스 관리 시스템(DBMS)는 다수의 사용자가 데이터베이스에 존재하는 데이터에 접근할 수 있도록 해주는 소프트웨어이다.
- Java 기반의 서버 프로그램에서는 JDBC를 이용해 MySQL에 접근 가능하다.
관계형 데이터베이스
- 관계형 데이터베이스에서는 전체 데이터를 행(row)과 열(column)이 존재하는 하나 이상의 테이블(관계, relation)로 정의한다.
- 여러 레코드(record)가 담긴 테이블을 관계(relation)으로 정의한다.
- 관계(relation) = 테이블 : 같은 속성을 지닌 튜플(tuple) 모임
- 관계형 데이터베이스 관리 시스템(RDBMS)의 예시 : Oracle, MySQL, MSSQL 등
- 관계형 데이터베이스에서는 테이블에 따라서 데이터가 분리되어, 중복이 적다.
- 관계형 데이터베이스에서는 두 테이블에 대해 특정 키(Key)를 기준으로 데이터를 조회할 수 있다.
- 테이블을 분리하지 않고, 하나의 테이블만 이용한다면 데이터 중복이 발생할 수 있다.
ex. 주문(Order) 정보와 고객(Customer) 정보를 하나의 테이블에 넣은 예시
|고객 번호(customer_id)|고객 이름(customer_name)|고객 주소(customer_address)|주문 날짜(order_date)|상품 번호(product_id)|
|:--:|:---:|:---:|:---:|:---:|
|1|홍길동|서울|2012-12-25|235|
|2|나동빈|경기|2012-05-05|751|
|3|이순신|포항| | |
|1|홍길동|서울|2012-01-01|551| *데이터 중복 발생
- 관계형 데이터 베이스는
여러 개의 테이블로 구성
된다.
- 두 테이블에 대해 특정 키(key)를 기준으로 데이터를 조회할 수 있다.
테이블(Table)
- 하나의 데이터베이스는
여러 개의 테이블
을 가진다.
- 하나의 테이블은
엑셀 시트와 유사한 형태
를 보인다.
- 테이블 내 각 데이터는 행(row)과 열(column)이 만나는 지점에 데이터가 들어간다.
- 행(row) = 레코드(record) = 튜플(tuple)
- 열(column) = 필드(field) = 속성(attribute)
테이블 및 컬럼 컨벤션
테이블(table)의 이름은 단수형을 사용
한다.
- 이름을 붙일 때는 snake case를 사용한다. student, retired_employee
- 테이블의 key는 {테이블 이름의 단수형}_id 형태를 쓴다 : student_id 혹은 단순히 id
- 예시
[student 테이블] // 이름은 단수형
- 속성 1 : student_id
- 속성 2 : name
- 속성 3 : age
- 속성 4 : grade // 정보들을 테이블에 넣어서 관리
테이블 생성
- 테이블을 정의할 때는 CREATE 명령어를 사용한다.
CREATE TABLE '테이블 이름'
(
{컬럼명 1} {자료형 1},
{컬럼명 2} {자료형 2},
{컬럼명 3} {자료형 3},
...
);
테이블 제약 조건(Constraint) - 기본
- NOT NULL : NULL 값 비허용, 중복 허용
- UNIQUE : NULL 값 허용, 중복 비허용
- PRIMARY KEY : NULL 비허용, 중복 비허용, 테이블당 하나씩
- DEFAULT : 해당 컬럼의 기본 값을 설정
CREATE TABLE student
(
student_id INT PRIMARY KEY, // PRIMARY는 기본 키
student_phone VARCHAR(20) UNIQUE,
student_name VARCHAR(20) NOT NULL,
student_address VARCHAR(20) DEFAULT 'seoul'
);
테이블 제약 조건(Constraint) - 외래키
- 테이블마다 기능을 분리하는 경우가 많다.
- 특정한 학생(student)이 다른 강의(lecture)를 등록하는 상황을 고려해야 한다.
- 이때 등록(registration) 테이블은 "학생 번호"와 "강의 번호"를 참조해야 한다.
- 이러한 기능을 위해 외래키(foreign key) 가 제공된다.
- 만약 [학생 테이블]에 없는 학생을 추가하려는 경우 오류가 발생한다.
- 외래키는 하나의 테이블이 다른 테이블을 참조할 때 사용한다.
- 학생(student) <- 등록(registration) -> 강의(lecture)
CREATE TABLE registration
(
student_id INT,
lecture_id INT,
date DATETIME,
FOREIGN KEY (student_id) REFERENCES student(student_id),
FOREIGN KEY (student_id) REFERENCES lecture(lecture_id)
);