[PHOBUM] 데이터베이스 설계
ERD란?
ERD(Entity-Relationship Diagram)는 엔터티-관계 다이어그램으로, 데이터 베이스 설계에서 엔터티 즉, 개체간의 관계를 시각적으로 표현한 것이라고 정의할 수 있습니다.
주로 DB 구조 설계시에 사용되는데, 테이블과 그들 간의 연결관계를 명확하게 보여줍니다.
ERD의 구성요소
-
엔터티(Entity)
데이터베이스에서 객체를 의미합니다.
보통
사각형
으로 표시합니다. -
속성(Attribute)
각 엔터티가 가지는 특징을 나타냅니다.
타원형
으로 표시합니다. -
관계(Relatonship)
엔터티들 간의 연결을 나타냅니다.
마름모
로 표시합니다. -
카디널리티(Cardimality)
관계에 참여하는 각 엔터티의 수량적 제약을 나타내는데,
1:N
,1:1
,N:M
과 같이 나타냅니다. -
키(Key)
DB에서 엔터티 간의 관계를 정의하고 데이터의 유일성을 보장하는 중요한 요소입니ㅏㄷ.
주키(Primary Key)와 외래키(Foreign Key)그리고 후보키(Candidate Key)같은 형태로 분류됩니다.
키(Key)
-
주키(Primary Key)
테이블 내에서 각 행(레코드)를 유일하게 식별하는 속성입니다.
고유하게 식별될 수 있도록 보장하는 속성
Null 값을 가질 수 없습니다.
-
외래키(Foreign Key)
외래키는 다른 테이블의 주키를 참조하는 속성입니다.
외래키는 테이블 간의 관계를 설정하고, 두 테이블 간의 참조 무결성을 보장합니다. 즉, 외래키는 부모 테이블의 주키 값을 참조하여 자식 테이블과의 관계를 맺습니다.
외래키 값은 반드시 부모 테이블에 존재하는 주키 값이 여야합니다.
외래키는 Null 값을 가질 수 있습니다.(참조하는 데이터가 없을 때)
-
후보키(Candidate Key)
주키로 선택될 수 있는 모든 속성을 의미하는데 각각의 후보키는 테이블에서 고유하게 레코드를 식별할 수 있는 잠재적인 속성입니다.
후보키는 여러 개 일 수 있으며, 그 중 하나를 주키로 선택합니다.
주키와 마찬가지로 고유하며, Null을 허용하지 않습니다.
데이터베이스란?
데이터 베이스란 조직적으로 데이터를 저장하고 관리하는 시스템을 의미합니다.
➡️ 정보를 저장하고, 검색하며, 수정하고 삭제할 수 있는 체계적인 시스템
PHOBUM의 데이터 베이스
요구 사항 분석
우선 어떤 데이터를 저장할지, 어떤 기능을 제공할지에 대한 요구 사항을 명확하게 파악해야합니다.
-
PHOBUM
은 소셜로그인과 일반 로그인을 지원합니다.➡️ 사용자 객체
-
이미지 업로드 및 게시글 작성, 수정, 삭제 기능을 제공합니다.
➡️
Photo Card
객체 -
내가 작성한 포토카드를 확인 할 수 있습니다.
엔터티 정의
저장할 데이터의 종류를 파악하고 엔터티를 정의합니다.
PHOBUM
의 엔터티는
- User
- PhotoCard
이 두가지로 구성되어 있습니다.
속성 정의
일반 로그인은 ID, Password로 로그인하고 소셜로그인은 카카오로 인증한 후에 해당 계정에 대한 정보를 관리하는 방식으로 진행합니다.
-
User
user_iD(PK)
,id
,nick_name
,email
,phone_number
,password
,created_at
-
user_id (PK)
INT
또는BIGINT
(자동 증가 또는 UUID)고객의 고유 식별자 (Primary Key) 기본 키입니다.
AUTO_INCREMENT
또는UUID
를 사용하여 자동으로 생성합니다. -
id
일반 로그인 시 사용되는 ID (이메일이 아닌 다른 고유 값)
VARCHAR(255)
NOT NULL
,UNIQUE
- 중복이 불가능한 고유 값이어야 하며 반드시 입력되어야 합니다. -
nickname
VARCHAR(255)
사이트에서 사용할 닉네임(중복검사 필요)
NOT NULL
,UNIQUE
- 닉네임은 반드시 입력되어야 하며 중복된 값을 허용하지 않습니다. -
phone_number
VARCHAR(15)
고객의 전화번호입니다. Not Null로 지정합니다.
(후에 프론트에서 유효성검사를 적용해보고 싶기 때문에 )
-
password
VARCHAR(255)
일반 로그인 시 사용자가 설정한 비밀번호 (소셜 로그인 시
NULL
) -
email
VARCHAR(255)
카카오 소셜 로그인에서 사용되는 이메일 (소셜 로그인만 사용되며, 일반 로그인 시
NULL
) -
created_at
DATETIME
또는TIMESTAMP
타입이고NOT NULL, DEFAULT CURRENT_TIMESTAMP 속성을 가집니다.
기본값으로 현재 시간이 자동 입력되도록 설정하여 사용자가 가입하는 즉시 계정 생성 시간을 기록할 수 있습니다.
CREATE TABLE user ( user_id INT AUTO_INCREMENT PRIMARY KEY, -- 사용자 고유 ID (Primary Key, 자동 증가) id VARCHAR(255) NOT NULL UNIQUE, -- 일반 로그인 시 사용되는 고유 ID nick_name VARCHAR(255) NOT NULL UNIQUE, -- 사이트에서 사용할 닉네임 phone_number VARCHAR(15), -- 전화번호 (NULL 가능) password VARCHAR(255), -- 일반 로그인 비밀번호 (소셜 로그인 시 NULL) email VARCHAR(255), -- 소셜 로그인 이메일 (일반 로그인 시 NULL) created_at DATETIME DEFAULT CURRENT_TIMESTAMP -- 계정 생성 시간 (기본값: 현재 시간) );
컬럼명 타입 제약 조건 설명 user_id
INT
/BIGINT
PRIMARY KEY
,AUTO_INCREMENT
사용자 고유 ID (Primary Key, 자동 증가) id
VARCHAR(255)
NOT NULL
,UNIQUE
일반 로그인 시 사용되는 고유 ID nick_name
VARCHAR(255)
NOT NULL
,UNIQUE
사용자 닉네임 (중복검사 필요) phone_number
VARCHAR(15)
NULL
사용자 전화번호 (선택 사항) password
VARCHAR(255)
NULL
일반 로그인 비밀번호 (소셜 로그인 시 NULL) email
VARCHAR(255)
NULL
카카오 소셜 로그인 이메일 (일반 로그인 시 NULL) created_at
DATETIME
/TIMESTAMP
DEFAULT CURRENT_TIMESTAMP
계정 생성 시간 (기본값: 현재 시간) -
-
PhotoCard
photocard_id(PK)
,user_id(FK)
,title
,description
,image_url
,create_at
,update_at
-
photocard_id (PK)
INT
또는BIGINT
(자동 증가 또는 UUID)Primary Key (PK), 자동 증가 (자동으로 고유한 값을 생성)
포토카드를 고유하게 식별할 수 있는 기본 키
AUTO_INCREMENT
또는UUID
를 사용하여 자동으로 값을 생성합니다. -
user_id(FK)
INT
또는BIGINT
Foreign Key (FK),
users
테이블의user_id
를 참조포토카드를 생성한 사용자의 ID를 저장합니다.
-
title
VARCHAR(255)
, Not Null로 설정하여 반드시 입력되도록 설정합니다.포토카드의 제목입니다.
-
description
Text
타입을 사용합니다. 또한 Not Null로 설정하여 포토카드에 대한 설명을 작성하도록 합니다.포토 카드의 상세 설명을 의미합니다.
-
image_url
VARCHAR(255)
, Not Null설정포토카드에 첨부할 이미지 URL로 이미지 파일이 서버나 클라우드 저장소에 저장됐을 때, 그 파일의 경로를 저장합니다.
-
created_at
DATETIME
또는TIMESTAMP
, Not Null포토카드가 처음 생성된 날짜와 시간으로 저장될 때 자동으로 현재 시간이 저장되도록 합니다.
-
updated_at
DATETIME
또는TIMESTAMP
, Null 가능포토카드가 마지막으로 수정된 날짜와 시간을 의미합니다. 수정할 때 마다 이 컬럼을 갱신해서 최신 수정 시간을 기록합니다.
CREATE TABLE photocard ( photocard_id INT AUTO_INCREMENT PRIMARY KEY, -- 포토카드 ID (Primary Key, 자동 증가) user_id INT, -- 사용자 ID (Foreign Key) title VARCHAR(255) NOT NULL, -- 포토카드 제목 description TEXT, -- 포토카드 설명 image_url VARCHAR(255) NOT NULL, -- 이미지 URL created_at DATETIME DEFAULT CURRENT_TIMESTAMP, -- 생성 날짜 및 시간 updated_at DATETIME DEFAULT NULL, -- 수정 날짜 및 시간 FOREIGN KEY (user_id) REFERENCES users(user_id) -- 외래키 제약 조건 );
컬럼명 타입 제약 조건 설명 photocard_id
INT
/BIGINT
PRIMARY KEY
,AUTO_INCREMENT
포토카드를 고유하게 식별하는 기본 키 user_id
INT
/BIGINT
FOREIGN KEY (user_id)
포토카드를 만든 사용자의 ID ( users
테이블 참조)title
VARCHAR(255)
NOT NULL
포토카드의 제목 description
TEXT
NULL
포토카드의 상세 설명 image_url
VARCHAR(255)
NOT NULL
포토카드 이미지 파일의 URL created_at
DATETIME
/TIMESTAMP
DEFAULT CURRENT_TIMESTAMP
포토카드 생성 날짜와 시간 updated_at
DATETIME
/TIMESTAMP
DEFAULT NULL
포토카드 수정 날짜와 시간 (수정 시 업데이트됨) -
DB는 MY SQL을 사용합니다!
댓글남기기