대화를 위한 데이터베이스 스키마: 개인 및 그룹
개인 채팅과 그룹 채팅 모두 가능한 데이터베이스 스키마를 설계하려고 합니다.지금까지 제가 얻은 것은 다음과 같습니다.
그래서 - 이론은 사용자가 1대1 사적인 채팅을 하고 있어도 '방'을 배정받는다는 것입니다.ID', 그리고 그들이 보내는 각각의 메시지는 그것에 해당합니다.room
.
그들이 관련된 모든 방을 알아보려면 테이블에서 목록을 선택할 수 있습니다.participants
알아내기 위해.
괜찮아요, 하지만 제가 느끼기엔room
테이블은 약간 중복됩니다. 방 이름이 필요 없고, 생략하고 간단하게 사용할 수 있습니다.participants
테이블과SELECT DISTINCT roomID FROM particpants
각자 방을 알아보려고요
누가 더 나은 구조나 왜 룸 테이블을 유지해야 하는지 설명해 줄 수 있나요?
스키마는 완벽하게 괜찮아 보이는데, 이전에 다른 사람들(오늘날의 나를 포함하여)이 어느 정도 동일한 구조로 제공된 것을 볼 수 있습니다(단일 데이터베이스 테이블에 다양한 채팅 메시지 저장, 일대일 및 그룹 채팅을 위한 데이터베이스 스키마, 페이스북 및 gmail과 같은 스레드 개인 메시지 시스템 생성).당신의 시각적 표현은 그 중에서도 최고라는 것을 꼭 알아두고 싶습니다. 이해하기 쉽고 따라하기 쉽습니다 :)
일반적으로, 나는 당신이 현재 특별한 속성이 없더라도 "공간"("채팅", "대화")을 갖는 것이 타당하다고 생각합니다.name
,posting_allowed
,type
(즉, 사적인 메시지와 채팅뿐만 아니라 댓글이 달린 공개 게시물에도 유사한 구조를 재사용하는 경우) 등입니다.단일 인덱스 ID를 가진 단일 테이블은 매우 빠르고 오버헤드가 0에 가까워야 하지만, 모든 기존 코드를 수정할 필요 없이 확장을 꽤 쉽게 허용할 것입니다(즉, 언젠가 당신이 a를 추가하기로 결정할 때).name
(채팅).방 유지하기ID 논리 "숨김" 내부participants
테이블은 투명하지 않고 효율적이지도 않습니다(즉, 채팅의 다음 ID를 찾아야 할 때). 저는 그것을 추천하지 않습니다.
도메인 모델을 조금 더 다듬어야 할 것 같습니다. 그렇지 않으면 스키마가 "올바른" 것인지 말하기가 어렵습니다.
슬랙을 모델로 삼으면(참고 - 이에 대해 많은 조사를 하지 않았기 때문에 세부 사항이 잘못되었을 수 있습니다), 시스템에 "채팅"이 있다고 말할 수 있습니다.
대화는 공개(모든 사용자가 보고 참여할 수 있도록 나열됨) 또는 비공개(모든 사용자가 나열되지 않음)일 수 있으며, 초대를 통해서만 가능합니다.
공개 채팅에는 "이름" 속성이 있어야 합니다.개인 대화에는 이름 속성이 있을 수도 있고 없을 수도 있습니다.
채팅에는 2명의 참가자가 있을 수 있습니다.
모든 1-1 채팅은 기본적으로 비공개로 시작합니다.
사적인 대화를 공적인 대화로 변경할 수 있습니다.
이 경우 상속/전문화 관계에 있습니다. "비공개"와 "공개"는 "채팅"의 하위 유형입니다.
관계형 모델은 상속 문제를 잘 다루지 못하는 것으로 악명이 높습니다. SO에 대한 관련 질문이 많습니다.
게임이 조금 늦었다는 것을 알지만 저는 이것들 중 몇 개를 만들었고 저는 항상 그것을 가지고 있습니다.active type bool
◦ 메시지 테이블에 col을 입력합니다.누군가가 무슨 말을 할 경우를 대비해서 당신은 그것을 숨길 수 있지만 여전히 그것을 기록할 수 있습니다. 뿐만 아니라user_auth
사용자 테이블에 표시됩니다.가끔은 방 테이블에 넣어놓기도 합니다.auth_required -> user.user_auth
당신이 많은 불협화음에서처럼 평준화된 대화를 원할 경우 그리고 항상 a.datetime
메시지 콜에.그것들은 당신이 그것들을 가지고 있지 않으면 나중에 후회할 것이기 때문에 min의 기준입니다.
단체 채팅과 개인 채팅(2명)을 위한 간단한 채팅 시스템은 이렇게 하겠습니다.
다른 가능성은 그룹 메시지를 위한 테이블과 개인 대화를 위한 테이블만 만드는 것입니다.(그룹과 메시지 테이블 사이의 n:m을 피하거나 n:m을 기능처럼 사용하며 버그/논리 오류 가능성이 없습니다.)좀 더 복잡한 채팅 시스템을 원한다면 네빌 카윗 게시물을 보세요.
제가 당신을 도울 수 있기를 바랍니다.
개인 채팅 및 그룹 채팅을 위한 데이터베이스 스키마
언급URL : https://stackoverflow.com/questions/46484989/database-schema-for-chat-private-and-group
'programing' 카테고리의 다른 글
MariaDB 계정이 데이터베이스에 대한 로컬 및 원격 액세스 권한을 가질 수 있습니까? (0) | 2023.09.10 |
---|---|
Spring 3 / Thymeleaf에서 매개변수를 사용하여 지역화 메시지를 표시하는 방법 (0) | 2023.09.10 |
cURL 명령줄을 사용한 POST XML 파일 (0) | 2023.09.10 |
UI뷰 쉐이크 애니메이션 (0) | 2023.09.10 |
안드로이드란 무엇입니까?R.layout.simple_list_item_1"? (0) | 2023.09.10 |