플랫폼 내 채팅방은 독립적으로 존재하거나 여러 채팅방을 하나의 그룹으로 묶을 수 있다. 사용자는 단독 채팅방과 그룹의 순서를 자유롭게 변경할 수 있어야 하며, 데이터베이스 부하를 최소화하고 빠른 데이터 조회 성능을 보장할 필요가 있다. 다음과 같은 채팅방 구성을 예시로 들 수 있다.
채팅방3, 채팅방5, 그룹2(채팅방4, 채팅방1), 채팅방7, 그룹1(채팅방6, 채팅방2)
효율적인 관리를 위하여 두 개의 테이블을 사용한다.
플랫폼에 소속된 모든 단독 채팅방과 그룹의 전체적인 순서를 관리한다.
| 컬럼 | 설명 |
|---|---|
| id | 기본 키(UUID) |
| platform_id | 플랫폼 ID(UUID), 인덱스 설정 |
| position | 항목의 전체적인 순서를 나타냄 |
| item_type | 항목 유형("room" 또는 "group") |
| item_id | ChatRoom 또는 ChatRoomGroup ID(UUID) |
예시 데이터는 다음과 같다.
| Position | ItemType | ItemID |
|---|---|---|
| 1 | room | ID_CHAT_ROOM_3 |
| 2 | room | ID_CHAT_ROOM_5 |
| 3 | group | ID_GROUP_2 |
| 4 | room | ID_CHAT_ROOM_7 |
| 5 | group | ID_GROUP_1 |
각 그룹 내의 채팅방 순서를 별도로 관리한다.
| 컬럼 | 설명 |
|---|---|
| id | 기본 키(UUID) |
| group_id | 그룹 ID(UUID), 인덱스 설정 |
| position | 그룹 내 채팅방의 순서 |
| chat_room_id | 그룹에 속한 채팅방 ID(UUID) |
예시 데이터는 다음과 같다.
| GroupID | Position | ChatRoomID |
|---|---|---|
| ID_GROUP_2 | 1 | ID_CHAT_ROOM_4 |
| ID_GROUP_2 | 2 | ID_CHAT_ROOM_1 |
| GroupID | Position | ChatRoomID |
|---|---|---|
| ID_GROUP_1 | 1 | ID_CHAT_ROOM_6 |
| ID_GROUP_1 | 2 | ID_CHAT_ROOM_2 |
플랫폼 전체 항목 조회:
SELECT * FROM chatrooms_order
WHERE platform_id = ?
ORDER BY position;
그룹 내 채팅방 조회:
SELECT * FROM group_chatrooms_order
WHERE group_id = ?
ORDER BY position;
본 설계는 사용자가 지정한 채팅방의 순서를 효율적이고 유연하게 관리할 수 있는 구조를 제공하며, 데이터베이스의 부하를 최소화하여 성능을 최적화한다.