메시지와 응답을 저장하는 mySQL에 Message
테이블을 어떻게 만들 수 있습니까?mySQL 자체 관계를 구현하는 방법은 무엇입니까?
답변
이 작업을 시도 할 수 있습니다 :
create table messages (
message_id int primary key,
response_to int null references messages(message_id), -- self relationship
user_from int not null references users(user_id),
user_to int not null references users(user_id),
content varchar(200) not null
);
첫 번째 메시지는 null
값 유엔 response_to
필드가됩니다.
"메시지"대신 "대화"를 저장할 계획이라면 대화의 JSON 또는 XML 표현을 저장하는 CLOB (문자 대형 객체)가있는 일반 테이블을 고려하십시오. 검색어를 빠르게 할 수 있습니다 (개별 메시지 대신 전체 대화를 한 번에 읽을 계획이라면).
고마워요 파블로,이게 지금 어떻게 작동하는지 알아요! 이 경우 응답이 없으면 null이 중요합니다. – Ciphor
원래 messageId를 참조하는 foreign_key를 만들 수 있지만 원본 메시지에는이 키가 설정되지 않으므로 null 값을 허용해야합니다.
하지만 스레드 테이블을 가지고있는 것이 더 나은 접근 방법이 아닙니다. 그러면 메시지 테이블에서 threadId를 저장하여 어떤 메시지가 어떤 스레드에 속하는지 알 수 있으므로 게시 시간이 응답을 식별하는 데 좋은 지표가 될 수 있습니다 메시지.
null 값에 대한 요점을 추가해 주셔서 감사합니다. 귀하의 제안은 유용하고 유용한 정보입니다! – Ciphor
'Message'의 PK에 FK가있는'Message.response_to' 열이 잘못 되었습니까? –
다른 메시지의 기본 키를 보유하는 메시지 테이블에 필드를 추가하는 이유는 무엇입니까? – Philipp