Integrity Constaint
무결성 제약조건(integrity constraint)은 데이터베이스의 일관성과 정확성을 유지하기 위해 특정한 조건을 설정하는 규칙입니다. 무결성 제약조건은 데이터베이스 내 데이터의 유효성을 보장하고, 잘못된 데이터가 저장되는 것을 방지합니다. 대표적인 무결성 제약조건은 다음과 같습니다:
- 키 무결성 (Key Integrity Constraint):
- 기본 키 (Primary Key): 테이블 내에서 각 행을 고유하게 식별하는 하나 이상의 속성을 설정합니다. 기본 키는 NULL 값을 가질 수 없으며, 모든 행이 고유해야 합니다.
- 유니크 키 (Unique Key): 기본 키처럼 고유하지만 NULL 값을 허용할 수 있는 키입니다. 여러 열이 유니크 키로 지정될 수 있습니다.
- 참조 무결성 (Referential Integrity Constraint):
- 외래 키 (Foreign Key): 한 테이블의 열이 다른 테이블의 기본 키를 참조하는 경우 설정합니다. 참조 무결성 제약조건은 외래 키가 참조하는 값이 반드시 존재하도록 보장합니다. 예를 들어, 주문 테이블의 고객 ID가 고객 테이블에 실제로 존재해야 하는 상황에서 참조 무결성이 필요합니다.
- 엔티티 무결성 (Entity Integrity):
- 테이블의 기본 키 속성에는 NULL 값이 허용되지 않으며, 각 행이 고유하게 식별될 수 있어야 함을 보장합니다.
- 도메인 무결성 (Domain Integrity):
- 속성에 설정된 데이터 유형이나 값의 범위를 준수하도록 제한하는 제약조건입니다. 예를 들어, 나이 속성에 음수가 들어갈 수 없도록 제한하는 것이 도메인 무결성입니다.
- 조건 무결성 (Conditional Integrity):
- CHECK 제약조건을 사용하여 특정 열의 값이 특정 조건을 만족해야 한다는 제한을 설정합니다. 예를 들어, 직원 테이블에서 급여가 0보다 커야 한다는 조건을 설정할 수 있습니다.
DDL vs DML
1. 데이터 정의 언어 (Data Definition Language, DDL):
- 데이터베이스와 테이블을 정의하기 위한 명령어 세트입니다. DDL을 통해 테이블, 스키마를 생성하거나 수정, 삭제할 수 있습니다.
- 주요 명령어:
- CREATE: 새 스키마 또는 테이블을 생성합니다.
- ALTER: 기존 스키마 또는 테이블의 구조를 수정합니다.
- DROP: 스키마 또는 테이블을 삭제합니다.
2. 데이터 조작 언어 (Data Manipulation Language, DML):
- 테이블 내의 데이터를 검색하고 조작하기 위한 명령어입니다. DML을 통해 데이터를 삽입, 수정, 삭제할 수 있습니다.
- 주요 명령어:
- SELECT: 데이터베이스에서 특정 데이터를 검색합니다.
- INSERT: 새로운 데이터를 테이블에 추가합니다.
- DELETE: 특정 데이터를 테이블에서 삭제합니다.
- UPDATE: 기존 데이터를 수정합니다.
Creating a Schema in SQL
키마는 데이터베이스의 전체적인 구조를 정의하는 역할을 하며, 특정 사용자(또는 그룹)의 권한을 통해 소유됩니다.
스키마 생성에는 CREATE SCHEMA 문을 사용하며, 주로 다음과 같은 요소를 포함합니다:
- 스키마 이름 지정
- 권한 부여자(Authorization Identifier) 설정
Creating a Table in SQL
데이터베이스에 데이터를 저장할 수 있는 구조를 정의하는 작업으로, CREATE TABLE 문을 사용합니다. 테이블은 여러 속성(열)으로 구성되며, 각 속성에는 데이터 타입과 제약조건을 지정할 수 있습니다.
- 테이블 이름 지정:
- 테이블의 이름을 정의합니다. 스키마 이름과 함께 사용하면 더 구체적으로 정의할 수 있습니다. 예를 들어 schema_name.table_name과 같이 명시할 수 있습니다.
- 속성 정의:
- 테이블 내에서 사용할 속성(열)의 이름과 데이터 타입을 정의합니다. 각 속성은 고유한 이름과 특정 데이터 타입(예: INTEGER, VARCHAR, DATE 등)을 가집니다.
- 초기 제약조건 설정:
- 각 속성에 대해 NOT NULL, DEFAULT, CHECK와 같은 제약조건을 설정할 수 있습니다. 이러한 제약조건은 데이터의 무결성을 유지하는 데 사용됩니다.
- 키 설정:
- 기본 키(PRIMARY KEY)와 외래 키(FOREIGN KEY) 제약조건을 설정하여 테이블의 관계와 데이터 무결성을 관리할 수 있습니다. 기본 키는 테이블 내의 각 행을 고유하게 식별하는 속성으로 설정됩니다.
Attribute Data Types in SQL
- 숫자(Numeric) 데이터 유형:
- INT: 정수(integer) 값을 저장합니다. 크기에 따라 다양한 정수 타입(INT, SMALLINT 등)이 있을 수 있습니다.
- FLOAT: 부동 소수점 숫자를 저장하며, 소수점 이하의 값을 포함할 수 있습니다.
- DECIMAL(p, s): 고정 소수점 숫자를 저장하며, p는 전체 자리 수, s는 소수점 이하 자리 수를 지정합니다. 금융 계산 등에서 정확한 소수점 처리가 필요한 경우에 사용됩니다.
Age INT, Salary DECIMAL(10, 2) - 문자열(Character String) 데이터 유형:
- CHAR(n): 고정 길이의 문자열을 저장합니다. n은 저장할 문자 수를 의미하며, 지정된 길이보다 짧은 문자열이 입력되면 빈 공간으로 채워집니다.
- VARCHAR(n): 가변 길이의 문자열을 저장합니다. n은 저장할 최대 문자 수를 의미하며, 실제 문자열 길이에 따라 공간을 차지합니다.
FirstName CHAR(50), LastName VARCHAR(50) - 비트 문자열(Bit String) 데이터 유형:
- BIT(n): 고정 길이의 비트열을 저장합니다. n은 비트 수를 의미합니다.
- VARBIT(n): 가변 길이의 비트열을 저장합니다. 비트 수의 최대 길이는 n으로 제한됩니다.
sql코드 복사Flags BIT(4), Permissions VARBIT(8) - 불리언(Boolean) 데이터 유형:
- BOOLEAN: TRUE, FALSE, 또는 NULL 값을 저장할 수 있습니다. 논리적 조건을 다룰 때 사용됩니다.
IsActive BOOLEAN - 날짜(Date)와 시간(Time) 데이터 유형:
- DATE: YYYY-MM-DD 형식으로 날짜를 저장합니다.
- TIME: HH:MM:SS 형식으로 시간을 저장합니다.
- TIMESTAMP: 날짜와 시간을 함께 저장하며, 소수점 이하 초 단위까지도 저장할 수 있습니다. YYYY-MM-DD HH:MM:SS.ffffff 형식을 사용합니다.
BirthDate DATE, MeetingTime TIME, EventTimestamp TIMESTAMP
Specifying Attribute Constraints (속성 제약조건)
- NOT NULL 제약조건:
- 특정 속성 값이 NULL이 될 수 없도록 설정합니다. 즉, 해당 열에는 반드시 값이 있어야 하며, 비워둘 수 없습니다. 이는 기본 키와 같은 중요 속성에 주로 적용됩니다.
- 예:
FirstName VARCHAR(50) NOT NULL
- DEFAULT 제약조건:
- 속성에 기본값을 설정하여 새로운 데이터가 삽입될 때 해당 속성에 값을 제공하지 않으면 기본값이 자동으로 입력되도록 합니다.
- 예:
Salary DECIMAL(10, 2) DEFAULT 5000
- 위 예에서 Salary 속성에 값이 제공되지 않으면 자동으로 5000이 입력됩니다.
- CHECK 제약조건:
- 속성 값이 특정 조건을 만족하도록 제한합니다. 예를 들어, 특정 열의 값이 특정 범위 내에 있도록 제약을 둘 수 있습니다.
- 예:
Age INT CHECK (Age >= 18)
- 위 예제에서는 Age 속성이 18 이상이어야 함을 규정합니다.
Specifying Integrity Constraints (무결성 제약조건)
1. 기본 키 제약조건 (Primary Key Constraint):
- 테이블 내의 각 행을 고유하게 식별하는 속성 또는 속성 조합에 적용됩니다.
- 기본 키로 설정된 속성에는 NULL 값을 가질 수 없으며, 중복된 값이 허용되지 않습니다. 즉, 테이블 내에서 각 행을 유일하게 식별하는 역할을 합니다.
- 예:
EmpID INT PRIMARY KEY
- 위 예에서는 EmpID가 Primary Key로 지정되어, 각 행에서 유일한 값이어야 합니다.
2. 유니크 제약조건 (Unique Constraint):
- 기본 키와 유사하게 각 행의 속성이 고유한 값을 갖도록 보장하지만, NULL 값을 허용할 수 있습니다.
- 예:
Email VARCHAR(255) UNIQUE
- Email 속성에 대해 유니크 제약조건을 설정하면, 동일한 이메일 주소가 중복으로 입력되는 것을 방지할 수 있습니다.
3. 외래 키 제약조건 (Foreign Key Constraint):
- 다른 테이블의 기본 키를 참조하여, 두 테이블 간의 관계를 정의합니다.
- 외래 키는 참조 무결성을 보장하여, 참조된 테이블의 값이 삭제되거나 변경될 때 데이터의 일관성을 유지합니다.
DepartmentID INT, FOREIGN KEY (DepartmentID) REFERENCES Department(DeptID)
- DepartmentID가 Department 테이블의 DeptID를 참조하는 외래 키로 설정되어 있어, DeptID에 존재하지 않는 값은 DepartmentID에 입력될 수 없습니다.
4. 참조 트리거 액션 (Referential Triggered Actions):
- 외래 키 제약조건에서 참조된 행이 삭제되거나 수정될 때의 동작을 정의합니다.
- 일반적으로 ON DELETE 또는 ON UPDATE 트리거와 함께 사용되며, 동작 옵션에는 다음이 있습니다:
- SET NULL: 참조된 행이 삭제되거나 수정되면 해당 외래 키 속성을 NULL로 설정합니다.
- CASCADE: 참조된 행이 삭제되거나 수정되면, 해당 변경이 모든 참조된 행에도 적용됩니다.
- SET DEFAULT: 참조된 행이 삭제되거나 수정되면 해당 외래 키 속성을 기본값으로 설정합니다.
- 예:
FOREIGN KEY (ManagerID) REFERENCES Employee(EmpID) ON DELETE SET NULL
- 위 예에서는 ManagerID가 참조하는 직원이 삭제될 경우, ManagerID의 값이 자동으로 NULL로 설정됩니다.
'Data Enginnering > Database' 카테고리의 다른 글
[NoSQL] K-V / Document / Column / Graph Databases (0) | 2024.11.19 |
---|---|
[SQL] Nested Query, Join, Aggregate, Group, Order (1) | 2024.11.15 |
[SQL] Data Retrieval in SQL / JOIN vs WHERE / Table as Sets (1) | 2024.11.08 |
[Data] DuckDB, Data Warehouse 종류, Data 관리를 위한 필수요소 (1) | 2024.11.06 |
[SQL] select, group by, count 사용하기 (3) | 2024.10.31 |