- spring boot 2.3.2

- mysql 8.0.21 for osx10.15 on x86_64 (Homebrew)

- 데이터 저장 계층 jpa, hibernate

- 빌드 gradle

 

구현해 볼 기능을 쭉 정리해보면 크게 4가지이다.

  • 회원은 글/댓글/강의평가/시간표를 생성할 수 있다.
  • 글과 댓글에는 여러 종류의 사진을 선택하여 넣을 수 있다.
  • 시간표에는 여러 강의를 선택하여 넣을 수 있다.

연관 관계를 알아보면,

  • 회원-글/시간표/강평/댓글: 일대 다 관계
  • 글-댓글: 일대 다 관계
  • 글/댓글-사진: 일대 다 관계
  • 강의-강의평가: 일대 다 관계
  • 시간표-강의:다대 다 관계
    • 시간표에 다른 강의 여러개 넣을 수 있고
    • 같은 강의가 여러 시간표에 들어갈 수 있다
    • --> 다대 다 관계는 관계형 데이터베이스 뿐만 아니라 엔티티에서도 거의 사용하지 않는다고 함
    • --> 따라서 연결 엔티티 강의시간표를 추가해서 일대다 관계+다대일 관계로 만들도록 한다.
    • 강의 시간표에는 담은 강의의 학점 합도 포함하도록 한다.
  • 추가) 즐겨찾기의 경우도 다대다 관계이므로 관계를 쪼개도록 한다.

위 관계를 기반으로 엔티티의 관계를 그려보면

  • 회원 기능
    • 회원 등록
  • 게시판 기능
    • 글 등록
    • 글 조회
    • 댓글 등록
    • 공감/비공감
    • 즐겨찾기
  • 시간표 기능
    • 시간표 만들기
    • 시간표 조회
  • 강의평가 기능
    • 강의평가 등록
    • 강의평가 조회
    • 강의평가 검색

 

DB에 저장해야 할 정보 목록

  • User(회원)
    • id
    • user_id
    • user_pwd
    • email
    • name
    • nickname
    • is_verified
    • level
    • files
  • Board(글)
    • id
    • time
    • views
    • title
    • contents
    • user_id
    • upvote
    • downvote
  • Favorite(즐겨찾기)
    • user_id
    • board_id
  • Comments(댓글)
    • id
    • user_id
    • board_id
    • contents
    • upvote
    • downvote
  • Lecture(강의)
    • id
    • professor
    • lecture_name
    • lecture_numbers
    • semester
    • department
    • credit
  • Lecture_Evaluation(강의 평가)
    • id
    • lecture_id
    • professor
    • content
    • evaluate
    • evaluate_credit
    • evaluate_assignment
    • evaluate_teamproject
    • evaluate_attendance
    • evaluate_testlevel
    • evaluate_testcategory
  • Schedule(시간표)
    • id
    • user_id
    • lecture_id
    • credits

 

 

정규화 후 DB Schema

 

데이터베이스 정규화는 어디까지 진행해야하는지 잘 모르겠다...

정규화/반정규화는 모든 기본화면에 해당 항목이 함께 조회되어야 하느냐 아니냐에 따라 결정하면 된다고 하는데,

일단 사용자가 필요로 하는지, 그냥 시스템적으로만 필요한 것인지 나눠서 생각해보고

테이블 조인을 할지 아니면 한 테이블에 모두 저장을 할지 결정해야 할 것 같다.

 

일단은 아래와 같이 정규화 해 보았다. 하다가 바뀔수도 있음...

 

ER-Diagram

 

 

CREATE DATABASE ewhaianDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE ewhaianDB;

CREATE TABLE IF NOT EXISTS Users (
    id varchar(40) primary key,
    u_id varchar(40) not null,
    u_password varchar(40) not null,
    email varchar(40) not null,
    name varchar(20) not null,
    nickname varchar(20) not null,
    is_verified binary not null,
    level integer not null
) CHARSET=utf8;

CREATE TABLE IF NOT EXISTS UploadedFiles (
    id varchar(40) primary key,
    user_id varchar(40) not null,
    image_file blob not null,
    time datetime not null,
    foreign key(user_id) references Users(id)
) CHARSET=utf8;

CREATE TABLE IF NOT EXISTS Board (
    id integer primary key,
    user_id varchar(40) not null,
    views integer default 0,
    title varchar(100) not null,
    content text not null,
    upvote integer default 0,
    downvote integer default 0,
    file_id varchar(40),      
    time DateTime not null,              
    foreign key(user_id) references Users(id),
    foreign key(file_id) references UploadedFiles(id)
) CHARSET=utf8;

CREATE TABLE IF NOT EXISTS Comments (
    id integer primary key,
    user_id varchar(40) not null,
    board_id integer not null,
    depth integer default 0,
    contents text not null,
    upvote integer default 0,
    downvote integer default 0,
    file_id varchar(40),
    time datetime not null,
    foreign key(user_id) references Users(id),
    foreign key(board_id) references Board(id),
    foreign key(file_id) references UploadedFiles(id)
) CHARSET=utf8;

CREATE TABLE IF NOT EXISTS Schedule_Time (
    id varchar(40) primary key,
    time varchar(20) not null
) CHARSET=utf8;

CREATE TABLE IF NOT EXISTS Professors (
    id varchar(40) primary key,
    name varchar(30) not null
) CHARSET=utf8;

CREATE TABLE IF NOT EXISTS Departments (
    id varchar(40) primary key,
    name varchar(30) not null
) CHARSET=utf8;

CREATE TABLE IF NOT EXISTS Lectures (
    id varchar(40) primary key,
    department_id varchar(40) not null,
    name varchar(30) not null,
    credit float4 not null,
    lecture_code varchar(10),
    foreign key(department_id) references Departments(id)
) CHARSET=utf8;

CREATE TABLE IF NOT EXISTS Lecture_Held (
    id varchar(40) primary key,
    lecture_id varchar(40) not null,
    lecture_division integer default 1,
    professor_id varchar(40) not null,
    semester varchar(10) not null,
    lecture_place varchar(40),
    lecture_time varchar(40),
    foreign key(lecture_id) references Lectures(id),
    foreign key(professor_id) references Professors(id),
    foreign key(lecture_time) references Schedule_Time(id)
) CHARSET=utf8;

CREATE TABLE IF NOT EXISTS Schedule (
    id varchar(40) primary key,
    user_id varchar(40) not null,
    lecture_id varchar(40) not null,
    priority integer default 0,
    foreign key(user_id) references Users(id),
    foreign key(lecture_id) references Lecture_Held(id)
) CHARSET=utf8;

CREATE TABLE IF NOT EXISTS Lecture_Evaluation (
    id varchar(40) primary key,
    lecture_id varchar(40) not null,
    user_id varchar(40) not null,
    contents text not null,
    evaluate integer not null,
    evaluate_credit integer,
    evaluate_assignment integer,
    evaluate_teamproject integer,
    evaluate_attendance integer,
    evaluate_testlevel integer,
    evaluate_tests integer,
    time datetime not null,
    foreign key(lecture_id) references Lecture_Held(id),
    foreign key(user_id) references Users(id)
) CHARSET=utf8;

 

https://github.com/sypark9646/ewhaian-clone-project

 

sypark9646/ewhaian-clone-project

Contribute to sypark9646/ewhaian-clone-project development by creating an account on GitHub.

github.com

 

'프로젝트' 카테고리의 다른 글

항공 규정 번역 시스템  (0) 2020.07.11
Emotion Analyze Speaker  (0) 2020.07.10

+ Recent posts