0

사용자가 콘텐츠를 만들 수있는 앱을 만들고, 다른 사용자가 좋아할 수있는 게시물을 작성하고 공유 기능을 구현하려고합니다. 나는 이것을 구현하는 가장 좋은 방법이 무엇인지 알고 싶다. 다음 게시물 그들 만이 다음과 같은 사람들에서사용자 게시 공유 시스템에 가장 적합한 테이블 구조는 무엇입니까?

| post_id | post_content | post_user | post_date | 

사용자가 게시물을 볼 수에 대한 테이블 구조입니다.

우선 내가 위의 게시물 테이블에 다른 행을 추가한다고 생각했지만 데이터의 불필요한 중복을 만들 것이라고 생각합니다. 그런 다음 게시물을 좋아하고 댓글을 달고있는 내 user_action 테이블에 행을 추가하는 방법을 생각했습니다. 시스템을 복잡하게 만든다.

나는 그 이상으로 수색했지만 아무 것도 찾을 수 없거나 나의 검색어가 그 질문에 도달하지 못했을 수있다.

이것을 달성하기위한 더 좋은 방법이 있습니까?

+0

당신이 이미 만든 테이블의 전체 구조를 게시 할 수 있습니다 : 특정 사용자 존, 그는, 우리는 다음과 같은 의사 쿼리를 사용할 수있는 다음과 같은 사용자들은 사용자의 모든 게시물을 찾을 수

? – Maximus2012

+0

어떤 테이블? –

+0

현재 테이블을 만들지 않으셨습니까? – Maximus2012

답변

0

중복 된 데이터가있는 다른 행을 추가하는 것이 좋지 않음에 동의합니다. 지금하고있는 일에 대해 자세히 살펴 보겠습니다.

사용자가 있고 게시물이 있습니다. 이것들은 분명히 그들 만의 테이블을 가진 별도의 엔티티 여야합니다.

'좋아요'는 N-M 관계입니다. 사용자가 원하는 수의 게시물을 좋아할 수 있고, 모든 사용자가 좋아할 수 있기 때문입니다. 그래서 이것은 두 개의 외래 키, 사용자 및 게시물이있는 자체 테이블입니다.

댓글은 게시물과 유사하지만 일부 내용이 포함되어 있습니다. 동일한 사용자 및 게시물 조합에는 여러 주석이 포함될 수 있습니다. 주석은 두 개의 외래 키 (사용자 및 게시물)가있는 자체 테이블입니다. 이 두 가지의 결합은 유사하지만 고유하지 않습니다.

이제 공유 부분. 사용자가 다른 사용자를 추적 할 수있게하려고합니다. 이는 임의의 사용자가 임의의 수의 사용자를 추적 할 수 있고 임의의 수의 사용자가 임의의 수의 사용자를 추적 할 수 있기 때문에 N-M 관계이기도합니다. 따라서 두 개의 외래 키인 user와 user와의 관계에 대해 하나 이상의 테이블이 필요합니다. 이 두 사용자 키의 조합은 고유합니다.

select posts.* 
from posts 
join user intermediateUser on posts.author = intermediateUser.id 
join follow on follow.followee = intermediateUser.id 
where follow.follower = John