데이터베이스는 사용자 데이터, 제품 정보 및 거래 기록과 같은 다양한 유형의 데이터를 저장할 수 있습니다. 개발자는 MySQL, PostgreSQL, MongoDB 및 Oracle을 비롯한 다양한 데이터베이스 관리 시스템(DBMS)을 사용하여 데이터를 관리합니다.
DBMS(데이터베이스 관리 시스템)는 사용자가 데이터베이스에서 데이터를 생성, 저장, 구성 및 관리할 수 있도록 하는 소프트웨어 시스템입니다. DBMS의 주요 기능은 사용자가 데이터 추가, 수정, 삭제 및 쿼리를 포함하여 데이터베이스의 데이터와 상호 작용할 수 있는 방법을 제공하는 것입니다.
사용 가능한 다양한 유형의 DBMS가 있으며 각각 고유한 강점과 약점이 있습니다.
널리 사용되는 DBMS의 예로는 MySQL, Oracle 및 Microsoft SQL Server와 같은 RDBMS(관계형 데이터베이스 관리 시스템)와 MongoDB 및 Cassandra와 같은 NoSQL 데이터베이스가 있습니다.
관계형 데이터베이스는 데이터를 하나 이상의 테이블로 구성하는 데이터베이스 유형이며 각 테이블에는 기본 키(key) 라는 고유 식별자가 있습니다. 테이블 간의 관계는 한 테이블을 다른 테이블에 연결하는 외래 키(key)라는 공통 필드를 통해 설정됩니다.
관계형 데이터베이스를 사용하면 다음과 같은 이점이 있습니다.
SQL은 Structured Query Language의 약자이며 관계형 데이터베이스를 관리하는 데 사용되는 프로그래밍 언어입니다. SQL은 데이터베이스에서 데이터를 생성, 수정 및 검색하는 데 사용되며 관계형 데이터베이스와 상호 작용하는 데 가장 널리 사용되는 언어입니다.
열 이름 및 데이터 유형: 테이블의 각 열에는 해당 열에 저장할 수 있는 데이터 유형을 정의하는 이름과 데이터 유형이 있어야 합니다. 일반적인 데이터 유형에는 VARCHAR(가변 길이 문자열), INTEGER(정수) 및 DATE(날짜)가 포함됩니다.
기본 키(Primary key): 기본 키는 테이블의 각 행을 고유하게 식별하는 열 또는 열 집합입니다. 이 키는 데이터 무결성을 적용하고 테이블의 각 행이 고유한지 확인하는 데 사용됩니다.
제약 조건: 제약 조건은 열 또는 열 집합에 저장할 수 있는 값을 제한하는 규칙입니다. 일반적인 제약 조건에는 NOT NULL(값을 입력해야 함), UNIQUE(열의 각 값이 고유해야 함) 및 FOREIGN KEY(두 테이블 간의 관계를 설정함)가 포함됩니다.
인덱스(Indexes): 인덱스는 특정 열 또는 열 집합에 대한 빠른 조회 메커니즘을 제공하여 데이터 검색 속도를 향상시키는 데이터 구조입니다. 테이블에 있는 하나 이상의 열에 인덱스를 만들 수 있습니다.
기본값: 기본값은 테이블에 행을 삽입할 때 값을 제공하지 않으면 자동으로 컬럼에 할당되는 값입니다.
테이블 옵션: 테이블 옵션은 테이블을 생성할 때 지정할 수 있는 추가 설정입니다. 일반적인 옵션에는 ENGINE(테이블 저장에 사용되는 스토리지 엔진 지정), CHARACTER SET(텍스트 데이터 저장에 사용되는 문자 집합 지정) 및 COLLATE(텍스트 데이터 정렬에 사용되는 데이터 정렬 지정)가 포함됩니다.
SELECT 문:
SELECT column1, column2, ...
FROM table_name
WHERE condition;
INSERT 문:
INSERT INTO table_name (column1, column2, ...)
VALUES (value1, value2, ...);
업데이트 문:
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;
DELETE 문:
DELETE FROM table_name
WHERE condition;
CREATE TABLE 문:
CREATE TABLE table_name (
column1 datatype,
column2 datatype,
...
);
ALTER TABLE 문:
ALTER TABLE table_name
ADD column_name datatype;
DROP TABLE 문:
DROP TABLE table_name;
관계형 데이터베이스에서 테이블은 행과 열로 구성된 관련 데이터 모음입니다. 각 열은 데이터의 특정 속성을 나타내고 각 행은 데이터의 고유한 인스턴스를 나타냅니다.
• 테이블(table)의 이름은 단수형을 사용한다.
• 이름을 붙일 때는 snake case를 사용한다: student, retired_employee
• 테이블의 key는 {테이블 이름의 단수형}_id 형태를 쓴다: student_id (O) 혹은 단순히 id (O)
외래 키는 다른 테이블의 기본 키를 참조하는 테이블의 열 또는 열 집합입니다. 관계형 데이터베이스에서 두 테이블 간의 관계를 설정합니다. 외래 키 제약 조건은 유효하지 않은 데이터가 테이블에 입력되는 것을 방지하여 데이터베이스의 참조 무결성을 보장합니다.
외래 키는 관계형 데이터베이스의 무결성과 일관성을 유지하는 데 중요한 역할을 하여 데이터가 올바르게 입력되고 검색되도록 합니다. 이를 통해 테이블을 서로 연결하여 보다 유연하고 강력한 데이터베이스 디자인을 만들 수 있습니다.
정규화는 데이터 중복을 제거하고 데이터 무결성을 향상시키기 위해 관계형 데이터베이스에서 데이터를 구성하는 프로세스입니다. 여기에는 테이블을 더 작고 관리하기 쉬운 테이블로 나누고 기본 키와 외래 키를 사용하여 테이블 간의 관계를 설정하는 작업이 포함됩니다.
여러 수준의 정규화가 있으며 각 수준에는 고유한 규칙과 지침이 있습니다. 가장 일반적인 정규화 수준은 1NF(1차 정규형), 2NF(2차 정규형) 및 3NF(3차 정규형)입니다.
"관계형 모델에 준수하기 위한 전제 조건으로, 테이블은 각 행을 고유하게 식별하는 기본 키(primary key)를 가져야 합니다. 두 개의 책은 동일한 제목을 가질 수 있지만, ISBN은 책을 고유하게 식별할 수 있으므로 기본 키로 사용될 수 있습니다."
주제가 추출된 행의 기본 키를 참조하는 주제 테이블 에 외래 키 열이 추가됩니다 . 따라서 동일한 정보가 표시되지만 단순하지 않은 도메인을 사용하지 않습니다.
정규화되지 않은 형식 의 하나의 테이블 대신 이제 1NF를 준수하는 두 개의 테이블이 있습니다.
후보 키의 일부가 아닌 모든 속성은 Title 에 의존 하지만 Price 만 Format 에도 의존합니다 . 2NF를 준수 하고 중복을 제거하려면 후보 키가 아닌 모든 속성이 후보 키의 일부가 아니라 전체 후보 키에 의존해야 합니다.
이 테이블을 정규화하려면 {Title} 을 (단순) 후보 키(기본 키)로 만들어 후보 키가 아닌 모든 속성이 전체 후보 키에 의존하도록 하고 Price를 별도의 테이블로 제거하여 Format 에 대한 종속성 이 보존하다:
데이터베이스의 트랜잭션은 단일 작업 단위로 수행되는 하나 이상의 작업 시퀀스입니다. 이러한 작업에는 데이터베이스의 하나 이상의 테이블에서 데이터 삽입, 업데이트 또는 삭제가 포함될 수 있습니다.
데이터베이스 트랜잭션에서 커밋은 데이터베이스에 대한 모든 변경 사항을 영구적으로 만드는 작업이며, 롤백은 마지막 커밋 또는 저장 지점 이후의 모든 변경 사항을 취소합니다.
트랜잭션이 시작되면 데이터베이스에 대한 모든 변경 사항이 즉시 저장되거나 커밋되지 않습니다. 대신 트랜잭션 로그라는 임시 영역에 보관됩니다. 이를 통해 오류가 발생하거나 사용자가 트랜잭션을 취소하기로 결정한 경우 트랜잭션을 롤백할 수 있습니다.
트랜잭션이 성공적으로 완료되고 모든 변경 사항이 유효한 경우 커밋이 실행되고 변경 사항이 데이터베이스에 영구적으로 저장됩니다. 즉, 동일한 데이터에 액세스하는 다른 사용자가 트랜잭션에서 변경한 내용을 볼 수 있습니다.
반면 트랜잭션 중 오류가 발생하거나 사용자가 취소를 결정하면 롤백이 실행됩니다. 이렇게 하면 트랜잭션의 모든 변경 사항이 실행 취소되고 데이터베이스가 트랜잭션이 시작되기 전 상태로 돌아갑니다. 트랜잭션의 변경 사항은 삭제되고 데이터베이스는 변경되지 않은 상태로 유지됩니다.
트랜잭션의 상태는 활성, 부분 커밋, 실패, 중단 또는 커밋과 같은 여러 가능한 상태 중 하나가 될 수 있는 현재 상태를 나타냅니다.
서로 다른 트랜잭션 상태를 이해하는 것은 트랜잭션을 적절하게 관리하고 데이터베이스 데이터의 일관성과 신뢰성을 보장하는 데 중요합니다. 트랜잭션 진행 상황 모니터링, 오류 진단 및 장애 복구에 도움이 될 수 있습니다.
공부할 게 많아서 너무 행복하네요! 😃