본 시리즈에서는 데이터베이스의 개념을 정리하고 필요시 실습을 진행합니다.
Ubuntu-24.04
)10.11.8-MariaDB
)2024.2.2
)correto-21
)Ultimate Edition
)world database
생성
, 삭제
, 검색
, 수정
등을 처리합니다. 데이터의 중복
, 데이터 일관성 문제
, 다중 사용자 환경에서의 접근 제어 문제
를 갖고 있으며, 이를 해결하는 데 한계가 있습니다.이러한 한계를 극복하기 위해 개발된 것이 데이터베이스 시스템(Database System)이며, 데이터베이스는 다량의 데이터를 구조화하여 관리할 수 있는 환경을 제공합니다.
데이터의 중복을 최소화
하고, 데이터 일관성 및 무결성을 보장
할 수 있는 기능을 갖추고 있습니다.데이터베이스(Database)는 데이터를 효율적으로 저장하고 관리하기 위한 시스템입니다.
데이터베이스는 데이터를 효과적으로 활용할 수 있도록 스키마(Schema)라는 구조를 가지고 있으며, 사용자는 이러한 스키마를 통해 데이터의 유형과 관계를 정의할 수 있습니다.
DBMS(DataBase Management System)는 데이터베이스를 체계적으로 관리하기 위한 시스템으로, 데이터의 생성, 저장, 검색, 수정, 삭제 등을 효과적으로 처리하는 시스템 소프트웨어입니다.
DBMS는 데이터의 관리에 특화된 프로그램으로, 대규모 데이터 처리 환경에서 필수적이며, 다양한 유형이 존재합니다.
DBMS는 여러 구조적 방식에 따라 구분되며, 주요 유형은 다음과 같습니다:
조직 구조
나 파일 시스템
과 같은 계층적 데이터에 사용됩니다.MySQL/MariaDB
, Oracle
, PostgreSQL
PostgreSQL
PostgreSQL
또한 데이터의 형태에 따라 정형화된 데이터를 관리하는 RDBMS와, 비정형 데이터를 관리하는 NoSQL로 구분할 수 있습니다.
MongoDB
, Cassandra
, DynamoDB
등이 있습니다.접근
, 저장
, 보안
등을 담당합니다.본 시리즈에서는 이러한 DBMS 중에서 RDMBS(MariaDB)로 실습을 진행합니다.
인스턴스(Instance)는 DBMS 소프트웨어가 실행되어 데이터베이스를 관리하는 구체적인 프로세스를 의미합니다.
사용자(Host)는 DBMS와 데이터베이스에 접근할 수 있는 권한을 가진 개별 계정입니다.
root
라는 이름의 관리자 계정입니다.)RDBMS 환경에서는 각 사용자 계정에 대해 접근 권한과 역할을 지정하여 데이터 보안을 강화합니다.
데이터베이스와 테이블, 컬럼 등의 객체에 이름을 부여할 때는 일관된 명명 규칙을 설정하는 것이 중요합니다.
일반적인 명명 규칙은 다음과 같습니다:
스네이크 표기법 사용: 객체 이름을 작성할 때, 단어 사이를 밑줄(_
)로 구분하는 스네이크 표기법(snake_case)을 사용합니다.
user_info
와 같이 표기하여 객체의 의미를 직관적으로 전달합니다.SQL 예약어는 대문자로 표기: SQL 구문에서 예약어(SELECT, INSERT, UPDATE 등)는 주로 대문자로 작성하여 SQL 코드의 가독성을 높이는 것이 관례입니다.
영문 소문자 사용: 일반적으로 데이터베이스 객체 이름은 모두 소문자로 작성합니다.
알파벳, 숫자, 밑줄(_)만 사용: 공백
이나 특수 문자
는 피하고, 단어 간 구분이 필요한 경우 밑줄(_
)을 사용합니다.
product_id
와 같이 표기합니다.명확하고 직관적인 이름: 객체의 의미를 잘 표현할 수 있는 이름을 사용합니다.
user_info
는 사용자 정보를 저장하는 테이블임을 쉽게 이해할 수 있습니다.약어와 접두사 사용 시 일관성 유지: 약어
나 접두사
를 사용할 때는 프로젝트 전반에 걸쳐 일관성을 유지해야 합니다.
tbl_
을 붙이기로 했다면, 이를 일관되게 사용합니다.단수형 사용 권장: 일반적으로 테이블 이름에는 단수형을 사용하는 것이 권장됩니다.
user
와 같은 이름을 사용하여 한 행이 한 사용자를 나타내도록 합니다.이러한 명명 규칙을 적용하여 작성하면 데이터베이스의 구조가 일관성 있게 유지되며, 코드 가독성과 유지보수성을 높일 수 있습니다.
분류 | 용어 | 설명 |
---|---|---|
데이터 요소 | 데이터 (Data) | 각 항목에 저장되는 값 |
데이터 요소 | 테이블 (Table) | 사전에 정의된 행과 열의 구조화 데이터 |
데이터 요소 | 필드 (Field, Attribute) | 열 (Column) |
데이터 요소 | 레코드 (Record, Tuple) | 한 행(Row)의 저장 정보 |
키 | 기본키 (Primary Key) | 각 테이블의 레코드 하나를 가리키는 고유한 값 |
키 | 외래키 (Foreign Key) | 다른 테이블의 기본키를 참조하기 위한 값 |
엔티티 | 엔티티 (Entities) | 고유 정보의 단위 각각의 테이블이라고 보면 됨 |
엔티티 | 필드 (Fields) | 각 엔티티에 해당하는 특성 엔티티의 컬럼으로 볼 수 있음 |
엔티티 | 레코드 (Records) | 테이블에 저장된 항목 엔티티의 행으로 볼 수 있음 |
관계 종류 | 설명 |
---|---|
1:1 관계 | 테이블 레코드 하나당 다른 테이블 하나와 연결. 일반적으로 테이블을 합치는 것이 보편적이므로 흔하지 않음 |
1:N 관계 | 테이블 레코드 하나가 여러 개의 레코드와 연결. 가장 흔한 관계이며, N쪽에 1의 고유 정보를 포함시켜 관리함 |
N:N 관계 | 여러 레코드가 서로 다수의 레코드를 가지는 관계. 주로 조인 테이블을 만들어 1:N 혹은 N:1 형식으로 관리함 |
Self-referencing | 테이블 내에서 자기 자신과 관계가 성립. 예: 추천인-유저 관계 |
스키마 종류 | 설명 |
---|---|
외부 스키마 | 사용자 입장에서의 스키마 |
개념 스키마 | 설계자 입장에서의 스키마 |
내부 스키마 | 개발자 입장에서의 스키마 |
테이블(Table)은 관계형 데이터베이스(RDBMS)에서 데이터를 행(Row)과 열(Column)의 2차원 구조로 저장하는 데이터의 집합체입니다.
테이블은 데이터베이스의 가장 기본적인 저장 단위로, 특정 주제나 엔티티에 대한 정보를 저장하는 역할을 합니다.
users
테이블은 사용자 정보(이름, 이메일, 비밀번호 등)를 저장할 수 있으며, orders
테이블은 주문 정보를 관리할 수 있습니다.열(Column): 테이블의 열은 각 필드 또는 속성을 의미하며, 테이블에 저장된 데이터의 특성을 정의합니다.
users
테이블의 열에는 user_id
, name
, email
등이 있을 수 있습니다.행(Row): 테이블의 행은 하나의 레코드(Record) 또는 튜플(Tuple)을 의미하며, 각 행은 테이블의 특정 열에 해당하는 데이터를 가지고 있습니다.
users
테이블의 한 행은 특정 사용자의 정보를 나타냅니다.테이블은 키(Key)를 통해 다른 테이블과 연결될 수 있으며, 이를 통해 관계형 데이터베이스가 구조화된 데이터를 효율적으로 관리할 수 있습니다. (SQL 파트에서 다세히 다룹니다)
MySQL
과 MariaDB
에서는 데이터를 효율적으로 저장하고 관리하기 위해 다양한 데이터 타입(Data Type)을 제공합니다.
Oracle
, SQL Server
, PosetgreSQL
등에서는 다루는 데이터 타입의 종류는 거의 비슷하지만, 세부적인 변수의 종류나 이름에 있어서 차이가 다소 있습니다.MySQL/MariaDB
에서의 Data 자료형을 정리해보고자 합니다. 자료형 분류 | 자료형 | 설명 |
---|---|---|
비트형 | BIT | 비트 값을 저장하며, 1에서 64비트까지 설정 가능 (예: BIT(1)은 1비트의 논리값) |
논리형 | BOOLEAN | 참(True) 또는 거짓(False)을 나타내는 논리형. 실제로는 TINYINT(1)로 저장 (1 = True, 0 = False) |
숫자형 | TINYINT | 1바이트 크기의 정수 (-128 ~ 127 범위) |
SMALLINT | 2바이트 크기의 정수 (-32,768 ~ 32,767 범위) | |
MEDIUMINT | 3바이트 크기의 정수 (-8,388,608 ~ 8,388,607 범위) | |
INT | 4바이트 크기의 정수 (-2,147,483,648 ~ 2,147,483,647 범위) | |
BIGINT | 8바이트 크기의 정수 | |
FLOAT, DOUBLE | 실수형 데이터, 소수점을 포함한 값을 저장 | |
DECIMAL | 고정 소수점 숫자 정확한 계산이 필요한 금융 데이터에 적합 | |
문자열형 | CHAR(n) | 고정 길이 문자열 (최대 255문자) |
VARCHAR(n) | 가변 길이 문자열 (최대 65,535바이트) | |
TEXT | 큰 문자열 데이터 저장 (최대 65,535바이트) | |
MEDIUMTEXT | 매우 큰 텍스트 데이터 저장 (최대 16MB) | |
LONGTEXT | 매우 큰 텍스트 데이터 저장 (최대 4GB) | |
날짜 및 시간형 | DATE | 날짜 저장 (YYYY-MM-DD 형식) |
TIME | 시간 저장 (HH:MM:SS 형식) | |
DATETIME | 날짜와 시간 저장 (YYYY-MM-DD HH:MM:SS 형식) | |
TIMESTAMP | UNIX 타임스탬프 형식으로 날짜와 시간 저장 자동 업데이트 지원 | |
YEAR | 연도 저장 (YYYY 형식, 1901~2155 범위) | |
기타 자료형 | ENUM | 선택 가능한 값 목록을 정의하여, 특정 값만 허용 |
SET | 하나 이상의 값을 선택할 수 있는 목록을 정의하여 여러 값 허용 | |
BLOB | 이진 데이터(Binary Large Object) 저장 이미지, 동영상 등 이진 데이터 저장 가능 |
각 자료형을 적절히 선택하여 테이블을 설계하면 저장 공간을 절약하고 데이터 무결성을 유지할 수 있습니다.
이번 포스팅에서는 DataBase의 기본적인 개념과 RDBMS(관계형 DBMS)에서의 Instance, Host, Table, Data 자료형, 등에 대해 다루어보았습니다.
다음 포스팅부터는 이러한 RDBMS를 다루기 위한 특수한 언어인 SQL(Structured Query Language)에 대해 다루어 보도록 하겠습니다.