2009-11-25 3 views
0

사용자가 다른 사람의 벽에 게시 할 수있는 간단한 "Facebook Wall"유형 기능을 작성하고 있습니다. 사람들은 해당 Wall 게시물에 간단히 응답 할 수 있습니다. 또는 새로운 벽 포스트를 게시하십시오."Facebook Wall"기능을 쿼리하는 데 좋은 db 스키마 및 메서드는 무엇입니까

 
post_id (pk) 
post_text (char) 
date_posted (datetime) 
is_parent (bool) 
parent_id (id of parent) 

를 작동하는 방법 : 사용자는 응답에 회신 할 수 없습니다, 당신은 단지

내가 생각했던 내 원래의 MySQL DB 스키마는 다음과 같이 간다 (단지 페이스 북과 같은) 원래 벽 게시물에 응답 할 수있다 :
누군가 새 벽 게시를 게시하면 is_parent는 1로 설정되고 parent_id는 null로 설정됩니다.

누군가가 해당 게시물에 답글을 게시하면 is_parent는 0이되고 parent_id는 부모 게시물의 ID로 설정됩니다.

내 질문

  1. 이이 기능에 대한 좋은 스키마인가? 그렇지 않은 경우 어떤 스키마를 사용합니까?
  2. 좋다면 가장 최근에 게시 된 순서대로 모든 벽 게시물을 반환하는 단일 쿼리를 어떻게 수행 할 수 있으며 부모와 함께 그룹화하여 쿼리 결과를 반복 할 때 부모 및 자식 모두가 모인다.
  3. 아니면 2 개의 쿼리를 수행하는 것이 더 낫습니까? 모든 부모에 대한 하나의 쿼리, 자식에 대한 쿼리 1 개.

답변

1

우선 무엇보다도. 같은 목적으로 두 분야가 필요하다고 생각하지 않습니다. 이 경우 parent_id로 충분합니다. post_id가 자동 증가를 설정하면. 첫 번째 할당 된 값은 1이 될 것이므로 parent_id = 0은 절대로 발생하지 않습니다. parent_id = 0 일 때 첫 번째 레벨 게시물이라고 가정 할 수 있습니다.

모든 답장에 하나의 쿼리 만 사용하는 것이 좋습니다.

+0

감사합니다. Darkerstar. parent_id = 0에 대한 완벽한 의미를 가졌습니다. 또한 모든 응답을 별도의 쿼리로 쿼리하는 것이 훨씬 간단 해졌습니다. – justinl

0
  1. 잘 모르겠다. is_parent 열을 잃습니다.
  2. 나는 최근에 post_id의 오름차순으로 정렬 된 모든 게시물을 쿼리하여이 작업을 수행했습니다. 그런 다음 PHP (array [ 'parrent'] -> array [ 'post'] ... [])를 사용하여 2D 배열에 캐시합니다.
  3. # 2에 설명 된 방법으로해야합니다.