본문 바로가기

컴퓨터/데이터베이스

[데이터 베이스] 데이터 생성

데이터 타입

CHAR

고정 길이 문자열을 저장하는 것으로 CHAR(n)은 n만큼의 문자열의 길이를 지정하고, 저장된 문자열이 n보다 짧을 경우 나머지 공간은 공백으로 채운다.

그리고 n보다 긴 문자열을 입력하면 데이터가 잘려서 입력이 된다.

 

VARCHAR

가변 길이 문자열을 저장하는 것으로 VARCHAR(n)은 최대 n길이의 문자열을 저장할 수 있고, 실제 문자열 길이에 따라 저장 공간을 사용한다.

이때 n보다 긴 문자열을 입력하면 오류가 발생하여 저장이 거부된다.

 

TEXT

길이 제한 없이 큰 문자열을 저장할 수 있어 실제로 사용되는 저장 공간은 문자열의 길이에 따라 달라진다.

일반적으로 매우 큰 텍스트 데이터를 저장하는 데 사용된다.

 

FLOAT4 & FLOAT8

FLOAT4는 4바이트 부동 소수점 수를 저장고, FLOAT8은 8바이트 부동 소수점 수를 저장한다.

FLOAT4는 일반적으로 32비트, FLOAT8는 64비트 부동 소수점 표준을 따른다.

만약 표현할 수 있는 범위를 초과하는 값을 저장하려고 하면 오버플로우가 발생하게 된다.

 

DECIMAL

DECIMAL(p, s)와 같은 형태로 사용이 되고 p는 전체 자리수를 나타내고 s는 소수점 이하 자리수를 의미한다.

그리고 지정된 범위를 초과하는 값을 입력하면 오류가 발생하여 저장이 거부된다.

 

ARRAY

같은 데이터 타입의 여러 값을 순서대로 저장하는 데 사용된다.

만약 CHAR타입이 저장되는 ARRAY의 경우 CHAR(n) []과 같은 형태로 사용하면 된다.

배열의 크기나 차원은 데이터베이스 시스템에 따라 다를 수 있고, 배열의 길이를 초과하는 요소를 추가하려고 하면 오류가 발생한다.

UUID(Universally Unique Identifier)

고유한 식별자를 생성하기 위한 128비트의 숫자로 데이터베이스, 시스템, 네트워크 상에서 객체나 정보를 고유하게 식별하기위해 사용된다.

이는 고유성을 보장하기 위해 충분히 큰 공간을 가지고 있다.

 

PostgreSQL에서 UUID값을 생성하는 데 사용되는 함수 중 하나로 uuid_generate_v4()이 사용되는데, 먼저 uuid-ossp 확장 기능이 데이터베이스에 설치되어 있어야 한다.

확장 기능을 설치하기 위해서는 다음과 같이 SQL구문을 사용하면 된다.

 

CREATE EXTENSION IF NOT EXISTS "uuid-ossp";

 

이는 확장이 이미 설치되었는지 확인하고 설치가 안된 경우에만 설치를 진행한다.

 

그리고 데이터는 아래와 같이 데이터 베이스에 생성할 수 있다.

CREATE TABLE example_table (
    id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
    fixed_char CHAR(5), -- 고정 길이 문자열
    variable_char VARCHAR(100), -- 가변 길이 문자열
    description TEXT, -- 긴 텍스트
    amount FLOAT, -- 부동 소수점 숫자
    precise_amount DECIMAL(10, 2), -- 정밀한 숫자 10자리 정수 및 2자리 소수점
    tags TEXT[] -- 문자열 배열
)

INSERT INTO example_table VALUES(
    'ABCDE',
    'Hello, world!',
    'This is a long text that can be stored in a TEXT column.',
    123.456,
    12345.67,
    ARRAY['tag1', 'tag2', 'tag3']
);

칼럼 제약 조건(Column Constraints)

테이블의 특정 컬럼에 저장될 수 있는 데이터의 종류를 제한하고, 데이터 무결성을 유지하는 데 사용된다.

 

NOT NULL

해당하는 컬럼에 NULL 값이 저장되는 것을 방지한다.

이는 데이터가 반드시 입력되어야 하는 필드에 사용되어 데이터의 무결성을 보장한다.

 

PRIMARY KEY

테이블 내에서 각 행을 고유하게 식별하는 데 사용된다.

PRIMARY KEY로 지정된 컬럼은 NOT NULL과 UNIQUE 제약 조건을 동시에 가지며 테이블 내에서 단 하나만 정의될 수 있다.

 

UNIQUE

컬럼 내에서 모든 값이 유일하다는 것을 보장한다.

NULL 값은 유일성의 제약을 받지 않고 여러 개의 NULL 값이 존재할 수 있습니다.

하나의 테이블에 여러 UNIQUE 제약 조건이 있을 수 있다.

 

CHECK

컬럼에 저장될 수 있는 데이터 값의 범위를 제한한다.

예를 들어 어떤 숫자 컬럼이 특정 범위의 값만을 가질 수 있도록 하거나 문자열 컬럼이 특정 패턴을 만족해야 할 때 사용된다.

 

REFERENCES (외래 키)

해당 컬럼의 값이 참조하는 테이블의 컬럼 값과 일치해야 함을 나타낸다.

이는 두 테이블 간의 관계를 정의하여 참조 무결성을 유지하는 데 사용된다.

 

이는 아래와 같이 사용될 수 있다.

CREATE TABLE employees (
    employee_id INT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    age INT CHECK (age >= 18),
    email VARCHAR(255) UNIQUE,
    department_id INT REFERENCES departments(department_id)
);

테이블 제약 조건 (Table Constraint)

테이블 레벨에서 데이터의 무결성을 보장하기 위해 설정되는 규칙이나 조건이다.

컬럼 제약 조건은 특정 컬럼에 대한 제약을 하지만 테이블 제약 조건은 테이블 전체에 걸쳐 적용되어 하나 이상의 컬럼을 포함할 수 있다.

테이블 제약 조건을 사용하면 데이터베이스의 무결성을 유지하고, 관계를 정의하여 데이터 입력 규칙을 강제할 수 있다.

 

PRIMARY KEY

테이블에서 각 행을 고유하게 식별하는 하나 이상의 컬럼의 집합으로 각 테이블에는 하나의 PRIMARY KEY 제약 조건만 있을 수 있다.

 

FOREIGN KEY

다른 테이블의 키를 참조하는 하나 이상의 컬럼으로 두 테이블 간의 관계를 정의하고 참조 무결성을 유지하는 데 사용된다.

 

UNIQUE

테이블 내에서 지정된 컬럼의 모든 값이 고유해야 함을 나타낸다.

 

CHECK

어떤 컬럼의 값이 특정 범위 내에 있어야 한다는 조건등 테이블 내의 데이터가 특정 조건을 만족해야 함을 지정한다.

 

CREATE TABLE employees (
    employee_id INT,
    name VARCHAR(100),
    department_id INT,
    PRIMARY KEY (employee_id),
    FOREIGN KEY (department_id) REFERENCES departments(department_id),
    UNIQUE (name),
    CHECK (employee_id > 0)
);

사용자 정의 타입

기본적인 데이터 타입으로 표현하기 힘든 복잡한 데이터 구조의 경우 사용자 정의 타입을 생성하여 해결할 수 있다.

 

CREATE TYPE address AS (
    street VARCHAR(100),
    city VARCHAR(50),
    postal_code VARCHAR(10)
);

 

이처럼 CREATE TYPE 명령어를 사용하여 사용자 정의 타입을 생성할 수 있다.

 

사용자 정의 타입은 데이터베이스 설계를 더 유연하고 의미 있게 만들 수 있지만 복잡성을 증가시킬 수 있다.

그리고 데이터베이스 마이그레이션 또는 호환성 문제가 발생할 수 있어 사용하기 전에 확인을 해야한다.

테이블 간의 관계

데이터베이스의 관계형 모델에서 하나의 데이터가 다른 테이블의 데이터에 속할 수 있는 관계는 외래 키와 관계의 종류를 명시함으로써 일대다, 일대일 관계로 표현된다.

 

일대다(One-to-Many) 관계

하나의 데이터가 다른 테이블의 0개 이상의 데이터와 관련될 수 있다.

예를 들어 한 명의 고객이 여러 주문을 할 수 있는 경우(고객:주문 = 1:N) 주문 테이블에서 고객 테이블을 참조하는 외래 키를 사용하여 이 관계를 표현한다.

이 때 외래 키 컬럼은 NULL 값을 허용하도록 설정함으로써 어떤 고객은 주문을 하지 않았을 수도 있다는 것을 표현할 수 있다.

 

일대일(One-to-One) 관계

하나의 데이터가 다른 테이블의 0개 또는 1개의 데이터와만 관련될 수 있다.

이 경우, 외래 키 컬럼을 사용하여 두 테이블 사이의 관계를 표현하고, 외래 키 컬럼은 NULL 값을 허용할 수 있다.

이를 통해, 어떤 데이터는 관련된 데이터를 가지지 않을 수 있음을 나타낼 수 있다.

 

CREATE TABLE Customers (
    customer_id INT PRIMARY KEY,
    name VARCHAR(100)
);

CREATE TABLE Orders (
    order_id INT PRIMARY KEY,
    order_date DATE,
    customer_id INT,
    FOREIGN KEY (customer_id) REFERENCES Customers(customer_id)
);

이처럼 테이블이 주어지면 Orders 테이블의 customer_id 외래 키는 Customers 테이블의 customer_id를 참조한다.

이때 customer_id에 NULL을 허용함으로써 주문이 어떤 고객에도 속하지 않을 수 있음을 표현할 수 있다.

 

이러한 것을 새발 표기법(ERD)로 나타내면 아래와 같이 표현할 수 있다.

'컴퓨터 > 데이터베이스' 카테고리의 다른 글

[데이터 베이스] Subquery  (2) 2024.02.13
[데이터 베이스] INDEX  (0) 2024.02.13
[데이터 베이스] VIEW  (0) 2024.02.12
[데이터 베이스] 조건부 함수  (0) 2024.02.12
[데이터 베이스] WINDOW 함수  (0) 2024.02.11