25.07.16 개발일지 / 채팅 프로그램 5팀

2025. 7. 29. 18:54·LMS 7/개발일지

문서 수정

회원 정보
Table
user
컬럼명
데이터 타입
제약 조건
설명
id
VARCHAR(20)
NOT NULL / UQ
로그인 ID
password
VARCHAR(64)
NOT NULL
비밀번호
nickname
VARCHAR(50)
NOT NULL
표시용 닉네임
created_at
INT
NOT NULL
가입일시
pk_id
INT
PRIMARY KEY / NOT NULL / AI
식별용 ID
​
​
​
​
채팅방 정보
Table
chatroom
컬럼명
데이터 타입
제약 조건
설명
room_id
INT
PRIMARY KEY / AUTO_INCREMENT
채팅방 고유번호
room_name
VARCHAR(50)
NOT NULL
채팅방 이름
room_type
ENUM('open','group')
NOT NULL
채팅방 유형(오픈/그룹)
creator_id
INT
FOREIGN KEY REFERENCES user(pk_id)
생성자 ID
created_at
INT
NOT NULL
생성일시
​
​
​
​
방 참가자
Table
chatroom_user
컬럼명
데이터 타입
제약 조건
설명
room_id
INT
NOT NULL, FK REFERENCES chatroom(room_id)
참여한 채팅방 ID
user_id
INT
NOT NULL, FK REFERENCES user(pk_id)
참여한 사용자 ID
joined_at
INT
NOT NULL
입장 시각
​
​
​
​
채팅 메시지
Table
chat_message
컬럼명
데이터 타입
제약 조건
설명
message_id
INT
PRIMARY KEY / AUTO_INCREMENT
메시지 고유번호
room_id
INT
NOT NULL, FK REFERENCES chatroom(room_id)
방 ID
sender_id
INT
NOT NULL, FK REFERENCES user(pk_id)
보낸 사용자 ID
message
TEXT
NOT NULL
메시지 내용
send_at
INT
NOT NULL
전송 시각

크게 변경된 것은

1. id열

2. 추가된 pk_id

3. creat_at을 비롯한 여러가지 시각 열

​

첫번째

기존 users 테이블 중 primary key 였던 id의 제약조건을 해제하고, pk_id를 추가하여 primary key로 지정하였음

이유는 요구사항 중 아이디 변경 요구가 있는데, 데이터 베이스에서 primary key를 변경하는 것은 전체적인 관점에서 굉장히 위험한 일이라고 한다

구체적으로 primary key인 id를 A로 다른 테이블에서 참조하고 있는 상황에서 A가 B로 바뀌는 상황에 놓이게 된다면 값은 바뀌었지만 참조는 계속 A를 하게되는 일명 "고아 데이터(Orphan Data)"가 발생하게 된다는 것

결국 데이터가 정확하고 완전하며 일관된 상태를 유지할 수 없는 상태에 놓이게 되는 위험이 발생하고, 이를 데이터 무결성이라고 부른다고 함

따라서 오로지 식별, 참조만을 위한 pk_id를 id를 대신하여 primary key로 생성함으로써 데이터 무결성을 확보하도록 하였음

​

두번째

기존 xxxx_at의 데이터 타입은 DATETIME, 제약 조건은 DEFAULT CURRENT_TIMESTAMP

이는 데이터를 입력하면 그 시각을 자동으로 현재 시간을 입력해주는 역할을 하는데

문제는 서버에서 쿼리문을 작성하여 저장을 시도했을 때 문제가 발생

DATETIME에서 자동으로 생성해주는 현재시간은 데이터베이스에 저장되는 그 순간이고,

실제 서버에서 함수가 작동되는 순간과는 다를 수 있다

이는 매우 짧은 순간이지만 프로그램과 데이터베이스의 규모가 커질수록 굉장히 큰 문제가 될 수 있다

따라서 서버에서 (int)time(NULL)를 통해 변수에 저장하고, 데이터베이스에 옮겨 기록하면 확실한 시간을 기록할 수 있는 것이다

'LMS 7 > 개발일지' 카테고리의 다른 글

25.07.18 개발일지 / 채팅 프로그램 5팀  (3) 2025.07.29
25.07.17 개발일지 / 채팅 프로그램 5팀  (0) 2025.07.29
2025.07.15 개발일지 [채팅 프로그램 5팀 / 테이블 명세서 / ERD]  (0) 2025.07.29
25.07.14 개발일지 / 멀티스레드를 통한 채팅프로그램 구상  (2) 2025.07.29
25.07.12 학습일지 / mySQL, C  (0) 2025.07.29
'LMS 7/개발일지' 카테고리의 다른 글
  • 25.07.18 개발일지 / 채팅 프로그램 5팀
  • 25.07.17 개발일지 / 채팅 프로그램 5팀
  • 2025.07.15 개발일지 [채팅 프로그램 5팀 / 테이블 명세서 / ERD]
  • 25.07.14 개발일지 / 멀티스레드를 통한 채팅프로그램 구상
m_Dev
m_Dev
  • m_Dev
    m_Dev
    m_Dev
  • 전체
    오늘
    어제
    • 분류 전체보기
      • MAIN STUDY
        • 정보보안
        • 빅데이터
        • 정보처리
        • 컴퓨터 구조
        • 기타
      • JOB
        • Study
        • Project
      • LMS 7
        • 개발일지
      • FRAMEWORK
        • Qt
        • MFC
        • Winform
        • WPF
        • MAUI
      • NETWORK
        • Study
        • Assignment
      • PYTHON
        • Set
        • Study
        • Assignment
        • Project
      • C
        • Set
        • Study
        • Assignment
        • Project
      • C++
        • Set
        • Study
        • Assignment
        • Project
      • C#
        • Set
        • Study
        • Assignment
        • Project
      • DATABASE
        • MySQL
        • SQLite
      • IDE
        • VisualStudioCode
        • VisualStudio
        • Pycharm
        • Colab
      • 기타
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
m_Dev
25.07.16 개발일지 / 채팅 프로그램 5팀
상단으로

티스토리툴바