Skip to content

Database ERD

hyelie edited this page Oct 28, 2022 · 2 revisions

mermaid js 코드

해당 문서는 mermaid.js를 이용해 작성되었습니다.

공식 문서에서 mermaid.js 문법을 확인할 수 있으며, Live Editor 또는 VS Code의 extension를 이용해 VS Code에서 렌더링을 할 수도 있습니다.

작성 시에는 우선 순위가 높은 relation을 위쪽으로 올려 주시기 바랍니다.

erDiagram  
    User ||--o{ UsersOnChatrooms : "joins"
    UsersOnChatrooms }o--|| Chatroom : "has"
    
    Chatroom ||--o| ChatroomCommanders : "has"
    Chatroom ||--|| ChatroomKey : "has"
    Chatroom ||--o{ Message : "has"

    AllClear ||--o{ AllClearResponse : "has"
    AllClear |o--|| Message : "has"
    AllClearResponse }o--|| User : "replies"

    User }o--o{ Friend : "has"
    User ||--|| PublicKey : "has"
    User ||--o{ Message : "sends"
    AllClear{
        int allClearId PK
        int messageId FK "이상무 보고가 있는 메시지 ID"
    }
    AllClearResponse{
        int allClearResponseId PK
        enum type "이상무 보고 응답 종류 enum(CLEAR/PROBLEM)"
        string content "이상무 보고 내용"
        int allClearId FK "해당 이상무 보고가 속해있는 이상무 보고 응답 ID"
        int userId FK "이상무 보고에 응답한 사용자 ID"
    }
    Chatroom{
        int chatroomId PK
        string name "채팅방 이름 nullable"
        enum type "채팅방 종류(enum SINGLE/MULTI) default SINGLE"
        datetime createDate "채팅방 생성 날짜 default NOW()"
        datetime updateDate "채팅방 수정 날짜 nullable"
        datetime lastMessageDate "마지막 메시지 발송 날짜 default NOW()"
        int msgExpTime "메시지 삭제 시간 default 2592000"
        bool removeAfterRead "읽은 후 메시지 삭제 default true"
        enum removeType "메시지 삭제 종류(enum FROMSERVER/FROMEARTH)"
        datetime create_date "채팅방 생성 날짜 default now"
        datetime update_date "채팅방 수정 날짜 nullable"
    }
    ChatroomCommanders{
        int commanderId PK
        int chatroomId "채팅방 ID"
        int userId "해당 채팅방의 지휘관 사용자 ID"
    }
    ChatroomKey{
        int forUserId "CK 사용자 ID"
        int forChatroomId "CK 채팅방 ID"
        string entryptedKey "암호화된 공유키"
    }
    Friend{
        int followerId FK "사용자 ID"
        int followingId FK "해당 사용자가 친구추가한 사용자 ID"
    }
    Message{
        int messageId PK
        string content "메시지 내용"
        datetime sendTime "보낸 시간 default NOW()"
        int senderId FK "해당 메시지를 보낸 사용자 ID"
        int belongChatroomId FK "해당 메시지가 속한 채팅방 ID"
        datetime deletetime "메시지 삭제 시간"
        bool hasQuickReply "이상무 보고 존재 여부"
    }
    PublicKey{
        int userId PK "사용자 ID"
        string publicKey "해당 사용자의 공개키"
    }
    User{
        int userId PK
        string uid "UNIQUE 사용자 입력 ID"
        string password "비밀번호"
        string name "이름"
        string serviceNumber "UNIQUE 군번"
        string affiliatedUnit "소속 nullable"
        string militaryRank "계급 nullable"
        string image "프로필 이미지 nullable"
        Date enlistmentDate "입대일"        
    }
    UsersOnChatrooms{
        int userId FK "채팅방에 속해있는 userId"
        int chatroomId FK "사용자가 속해있는 chatroomId"
        int recentReadMessageId FK "해당 채팅방에 있는 해당 사용자가 최근에 읽은 messageId"
    }