2013-03-25 5 views
1

메시지와 응답을 저장하는 mySQL에 Message 테이블을 어떻게 만들 수 있습니까?mySQL 자체 관계를 구현하는 방법은 무엇입니까?

enter image description here

+1

'Message'의 PK에 FK가있는'Message.response_to' 열이 잘못 되었습니까? –

+2

다른 메시지의 기본 키를 보유하는 메시지 테이블에 필드를 추가하는 이유는 무엇입니까? – Philipp

답변

5

이 작업을 시도 할 수 있습니다 :

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 (문자 대형 객체)가있는 일반 테이블을 고려하십시오. 검색어를 빠르게 할 수 있습니다 (개별 메시지 대신 전체 대화를 한 번에 읽을 계획이라면).

+0

고마워요 파블로,이게 지금 어떻게 작동하는지 알아요! 이 경우 응답이 없으면 null이 중요합니다. – Ciphor

1

원래 messageId를 참조하는 foreign_key를 만들 수 있지만 원본 메시지에는이 키가 설정되지 않으므로 null 값을 허용해야합니다.

하지만 스레드 테이블을 가지고있는 것이 더 나은 접근 방법이 아닙니다. 그러면 메시지 테이블에서 threadId를 저장하여 어떤 메시지가 어떤 스레드에 속하는지 알 수 있으므로 게시 시간이 응답을 식별하는 데 좋은 지표가 될 수 있습니다 메시지.

+0

null 값에 대한 요점을 추가해 주셔서 감사합니다. 귀하의 제안은 유용하고 유용한 정보입니다! – Ciphor