4 분 소요

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)

  1. 주키(Primary Key)

    테이블 내에서 각 행(레코드)를 유일하게 식별하는 속성입니다.

    고유하게 식별될 수 있도록 보장하는 속성

    Null 값을 가질 수 없습니다.

  2. 외래키(Foreign Key)

    외래키는 다른 테이블의 주키를 참조하는 속성입니다.

    외래키는 테이블 간의 관계를 설정하고, 두 테이블 간의 참조 무결성을 보장합니다. 즉, 외래키는 부모 테이블의 주키 값을 참조하여 자식 테이블과의 관계를 맺습니다.

    외래키 값은 반드시 부모 테이블에 존재하는 주키 값이 여야합니다.

    외래키는 Null 값을 가질 수 있습니다.(참조하는 데이터가 없을 때)

  3. 후보키(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을 사용합니다!

카테고리:

업데이트:

댓글남기기