programing

대화를 위한 데이터베이스 스키마: 개인 및 그룹

minimums 2023. 9. 10. 12:06
반응형

대화를 위한 데이터베이스 스키마: 개인 및 그룹

개인 채팅과 그룹 채팅 모두 가능한 데이터베이스 스키마를 설계하려고 합니다.지금까지 제가 얻은 것은 다음과 같습니다.

enter image description here

그래서 - 이론은 사용자가 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명)을 위한 간단한 채팅 시스템은 이렇게 하겠습니다.

erm

다른 가능성은 그룹 메시지를 위한 테이블과 개인 대화를 위한 테이블만 만드는 것입니다.(그룹과 메시지 테이블 사이의 n:m을 피하거나 n:m을 기능처럼 사용하며 버그/논리 오류 가능성이 없습니다.)좀 더 복잡한 채팅 시스템을 원한다면 네빌 카윗 게시물을 보세요.

제가 당신을 도울 수 있기를 바랍니다.

개인 채팅 및 그룹 채팅을 위한 데이터베이스 스키마

click hear show table schema

언급URL : https://stackoverflow.com/questions/46484989/database-schema-for-chat-private-and-group

반응형