DataBase

하요·2024년 7월 21일
0

DB 기초

목록 보기
1/1
post-thumbnail

체계적인 데이터 관리 시스템: Database

데이터베이스는 데이터를 체계적으로 저장하고 관리하는 시스템으로, 효율적인 데이터의 저장, 수정, 검색 및 삭제를 가능하게 합니다. 데이터베이스 관리 시스템(DBMS)을 통해 데이터베이스를 정의하고 관리할 수 있습니다.

주요 개념

데이터베이스란?

  • 데이터를 체계적으로 저장하고 관리하는 시스템.
  • 효율적인 저장, 수정, 검색 및 삭제를 가능하게 함.

데이터와 정보

  • 데이터: 현실 세계에서 수집된 단순한 사실과 값들의 모음.
  • 정보: 데이터를 특정 목적에 의해 해석하거나 가공한 형태.

데이터베이스의 필요성

  • 무결성: 데이터가 정확하고 일관된 형태로 유지됨.
  • 파일 처리 시스템의 한계: 데이터 종속, 데이터 중복, 데이터 무결성 문제 해결.

데이터베이스의 특징

  • 실시간 접근성: 사용자가 원할 때 언제든지 접근 가능.
  • 지속적인 변화: 데이터의 삽입, 삭제, 갱신을 통해 최신 데이터를 유지.
  • 동시 공유: 여러 사용자가 동시에 이용 가능.
  • 내용에 대한 참조: 데이터의 물리적 위치가 아닌 값을 가지고 검색.

데이터베이스 종류

관계형 데이터베이스 (RDB)

  • 데이터를 테이블 형식으로 저장.
  • 각 테이블은 행(row)과 열(column)로 구성.
  • SQL을 사용하여 데이터 관리.
    • : MySQL, PostgreSQL, MariaDB

비관계형 데이터베이스 (NoSQL)

  • 데이터 간의 관계를 정의하지 않음.
  • 유연한 데이터 모델 제공.
    • : MongoDB, Redis, Apache Cassandra

SQL (Structured Query Language)

데이터 정의어 (DDL)

데이터베이스 객체(테이블, 인덱스 등)를 정의하는 데 사용됩니다.

  • CREATE: 테이블을 생성합니다.
CREATE TABLE Member (
    ID VARCHAR(50) PRIMARY KEY,
    이름 VARCHAR(100),
    비밀번호 VARCHAR(100),
    전화번호 VARCHAR(20),
    생년월일 DATE
);
  • ALTER: 테이블 구조를 변경합니다.
ALTER TABLE Member ADD COLUMN 이메일 VARCHAR(100);
  • DROP: 테이블을 삭제합니다.
DROP TABLE Member;

데이터 조작어 (DML)

데이터베이스 내의 데이터를 조작하는 데 사용됩니다.

  • SELECT: 데이터를 조회합니다.
SELECT * FROM Member;
  • INSERT: 데이터를 삽입합니다.
INSERT INTO Member (ID, 이름, 비밀번호, 전화번호, 생년월일)
VALUES ('user123', '홍길동', 'password', '010-1234-5678', '1990-01-01');
  • UPDATE: 데이터를 수정합니다.
UPDATE Member
SET 전화번호 = '010-9876-5432'
WHERE ID = 'user123';
  • DELETE: 데이터를 삭제합니다.
DELETE FROM Member WHERE ID = 'user123';

데이터 제어어 (DCL)

데이터베이스에 대한 접근 권한을 제어하는 데 사용됩니다.

  • GRANT: 사용자에게 권한을 부여합니다.
GRANT SELECT ON Member TO 'username'@'localhost';
  • REVOKE: 사용자에게서 권한을 회수합니다.
REVOKE SELECT ON Member FROM 'username'@'localhost';

키 (Key)와 제약 조건

키 (Key)

  • 기본키 (Primary Key): 테이블 내에서 각 튜플을 유일하게 식별할 수 있는 속성입니다.
  • 외래키 (Foreign Key): 다른 테이블의 기본키를 참조하는 속성으로 테이블 간의 관계를 정의합니다.
  • 후보키 (Candidate Key): 기본키가 될 수 있는 모든 속성을 말합니다.
  • 대체키 (Alternate Key): 후보키 중 기본키가 아닌 속성입니다.
  • 슈퍼키 (Super Key): 한 테이블에서 튜플을 유일하게 식별할 수 있는 속성의 집합입니다.

제약 조건

제약 조건은 테이블에 저장되는 데이터의 정확성과 일관성을 유지하기 위해 사용됩니다.

  • NOT NULL: 컬럼에 NULL 값을 허용하지 않습니다.
CREATE TABLE Member (
    ID VARCHAR(50) PRIMARY KEY,
    이름 VARCHAR(100) NOT NULL,
    비밀번호 VARCHAR(100) NOT NULL,
    전화번호 VARCHAR(20),
    생년월일 DATE
);
  • UNIQUE: 컬럼의 모든 값이 고유하도록 보장합니다.
CREATE TABLE Member (
    ID VARCHAR(50) PRIMARY KEY,
    이메일 VARCHAR(100) UNIQUE,
    이름 VARCHAR(100) NOT NULL,
    비밀번호 VARCHAR(100) NOT NULL,
    전화번호 VARCHAR(20),
    생년월일 DATE
);
  • DEFAULT: 컬럼의 기본값을 지정합니다.
CREATE TABLE Member (
    ID VARCHAR(50) PRIMARY KEY,
    이름 VARCHAR(100) NOT NULL,
    비밀번호 VARCHAR(100) NOT NULL,
    전화번호 VARCHAR(20) DEFAULT '010-0000-0000',
    생년월일 DATE
);
  • CHECK: 컬럼에 저장될 값의 조건을 지정합니다.
CREATE TABLE Member (
    ID VARCHAR(50) PRIMARY KEY,
    이름 VARCHAR(100) NOT NULL,
    비밀번호 VARCHAR(100) NOT NULL,
    전화번호 VARCHAR(20),
    생년월일 DATE,
    CHECK (연식 > 2000)
);
  • FOREIGN KEY: 외래키를 설정하여 다른 테이블의 기본키와 연결합니다.
CREATE TABLE Rental (
    대여ID INT PRIMARY KEY AUTO_INCREMENT,
    회원ID VARCHAR(50),
    킥보드ID VARCHAR(50),
    대여 시간 DATETIME,
    대여 위치 VARCHAR(100),
    FOREIGN KEY (회원ID) REFERENCES Member(ID),
    FOREIGN KEY (킥보드ID) REFERENCES Scooter(킥보드ID)
);

코드 예제

테이블 생성

CREATE TABLE Scooter (
    킥보드ID VARCHAR(50) PRIMARY KEY,
    브랜드 VARCHAR(100),
    연식 INT CHECK (연식 > 2000),
    기본료 DECIMAL(10, 2) DEFAULT 100.00
);

데이터 삽입

INSERT INTO Scooter (킥보드ID, 브랜드, 연식, 기본료)
VALUES ('scooter001', 'Xiaomi', 2020, 100.00);

데이터 조회

SELECT * FROM Scooter WHERE 브랜드 = 'Xiaomi';

데이터 수정

UPDATE Scooter
SET 기본료 = 120.00
WHERE 킥보드ID = 'scooter001';

데이터 삭제

DELETE FROM Scooter WHERE 킥보드ID = 'scooter001';

주요 활용도

테이블 생성 및 관리

데이터베이스 내에서 테이블을 생성하고, 데이터를 삽입, 수정, 삭제하는 작업을 통해 데이터를 체계적으로 관리할 수 있습니다. 예를 들어, 회원 정보를 저장하는 Member 테이블을 생성하고 관리할 수 있습니다.

데이터 조작 및 조회

SQL을 사용하여 데이터를 삽입, 수정, 삭제하며, 필요할 때 데이터를 조회할 수 있습니다. 이는 데이터의 일관성과 무결성을 유지하는 데 중요합니다.

접근 권한 관리

데이터 제어어를 사용하여 사용자에게 접근 권한을 부여하거나 회수할 수 있습니다. 이는 데이터베이스의 보안을 유지하는 데 중요합니다.

추가 참고 리소스

profile
flutter 개발자(진)

0개의 댓글