
여러분은 좋아하시는 연예인이 있나요? 저는 장원영이 최애에요. 너무 예쁘지 않나요? 이제부터 저는 본격적으로 덕질하기 위해서, 원영이 직캠을 수집하려고 해요. 그리고 원영이의 자료를 보관하고 싶은 팬들을 위한 데이터베이스를 만들고 싶습니다. 그래서 저는 "원영DB"를 만들기로 했습니다!!!
체계적이고 구조화된 데이터의 집합
데이터베이스(Database)는 체계적이고 구조화된 데이터의 모임입니다. 이를 통해 데이터를 효율적으로 저장, 관리, 검색, 수정할 수 있습니다. 데이터베이스는 다양한 애플리케이션에서 데이터를 조직화하고 접근하기 위해 사용됩니다. 데이터베이스 관리 시스템(DBMS)은 이러한 데이터베이스를 관리하는 소프트웨어로, 데이터를 정의하고 생성하며, 접근 및 조작할 수 있는 기능을 제공합니다.
데이터베이스는 크게 SQL과 NoSQL로 나눌 수 있습니다. 이 두 가지 유형은 데이터 저장 방식, 구조, 처리 방법 등에서 차이를 보입니다.
SQL (Structured Query Language) 데이터베이스는 테이블 형식으로 데이터를 저장하고 관리합니다. 각 테이블은 행과 열로 구성되며, 데이터 간의 관계는 외래 키(Foreign Key)를 통해 정의됩니다. SQL 데이터베이스는 데이터의 무결성과 일관성을 보장하는 데 강점을 가지고 있습니다.
NoSQL (Not Only SQL) 데이터베이스는 다양한 데이터 저장 방식과 구조를 제공합니다. 고정된 스키마가 없으며, 대규모 데이터와 높은 처리 성능을 필요로 하는 애플리케이션에 적합합니다. NoSQL 데이터베이스는 키-값, 문서, 그래프, 컬럼 패밀리 등 다양한 데이터 모델을 지원합니다.
먼저 데이터베이스의 요구사항을 분석해야 합니다. 원영 DB의 주요 요구사항은 다음과 같습니다:
1.원영 직캠 데이터를 관리하고 이용하는 팬들의 정보를 저장합니다.
2. 원영이의 직캠을 팬들끼리 공유합니다.
3. 각 장소에서 촬영된 직캠을 저장할 앨범 정보를 저장합니다.
4. 각 앨범에 속하는 직캠 정보를 저장합니다.
데이터베이스 모델에서 데이터를 저장하고 관리하기 위해 정의하는 개체 또는 객체
요구사항을 기반으로 필요한 엔티티를 정의합니다. 엔티티는 주로 관리할 데이터의 종류를 나타냅니다. 엔티티는 특정한 개념이나 실제 사물을 나타내며, 관련된 데이터를 하나로 묶어 관리합니다. 각 엔티티는 여러 개의 속성을 가지고 있으며, 데이터베이스 테이블로 구현됩니다.
직캠: 각 앨범에 속하는 직캠 정보
앨범: 각 무대별로 촬영된 직캠을 저장할 앨범 정보
유저: 원영 직캠 데이터를 관리하고 이용하는 팬들의 정보
공유: 원영 직캠을 팬들끼리 공유한 기록 정보
Primary Key (PK) 란?
Primary Key는 데이터베이스 테이블에서 각 레코드를 고유하게 식별하는 데 사용되는 속성입니다. Primary Key는 유일해야 하며, NULL 값을 가질 수 없습니다. 각 테이블은 하나의 Primary Key를 가질 수 있습니다.
Foreign Key (FK)란?
Foreign Key는 한 테이블에서 다른 테이블의 Primary Key를 참조하는 속성입니다. Foreign Key는 두 테이블 간의 관계를 정의하고, 참조 무결성을 유지하는 데 사용됩니다. 이를 통해 관련된 데이터를 연결하고, 일관성을 유지할 수 있습니다.
각 엔티티가 가져야 할 속성을 정의합니다. 주요 속성은 다음과 같습니다:
1. 유저 (User)
2. 앨범 (Album)
3. 직캠 (Fancam)
유저와 앨범
앨범과 직캠
직캠과 공유
정의한 엔티티와 관계를 시각적으로 표현하기 위해 ERD를 작성합니다.

ERD를 기반으로 SQL 스키마를 작성합니다. 각 테이블을 생성하고, 속성 및 관계를 반영합니다.
-- 새로운 데이터베이스 생성
CREATE DATABASE WonyoungDB;
-- 생성한 데이터베이스 사용
USE WonyoungDB;
-- User 테이블 생성
CREATE TABLE User (
user_id INT PRIMARY KEY,
username VARCHAR(100),
email VARCHAR(100),
password VARCHAR(100)
);
-- Album 테이블 생성
CREATE TABLE Album (
album_id INT PRIMARY KEY,
title VARCHAR(100),
location VARCHAR(100),
user_id INT,
FOREIGN KEY (user_id) REFERENCES User(user_id)
);
-- Fancam 테이블 생성
CREATE TABLE Fancam (
fancam_id INT PRIMARY KEY,
name VARCHAR(100),
music VARCHAR(100),
thumbnail VARCHAR(255),
date_taken DATE,
duration TIME,
album_id INT,
FOREIGN KEY (album_id) REFERENCES Album(album_id)
);
-- Share 테이블 생성
CREATE TABLE Share (
share_id INT PRIMARY KEY,
sender_user_id INT,
receiver_user_id INT,
fancam_id INT,
share_date DATE,
FOREIGN KEY (sender_user_id) REFERENCES User(user_id),
FOREIGN KEY (receiver_user_id) REFERENCES User(user_id),
FOREIGN KEY (fancam_id) REFERENCES Fancam(fancam_id)
);
이렇게 장원영 직캠을 공유하고 저장 할 수 있는 원영DB를 구축했습니다!!!
