2010-07-29 3 views
0

사용자가 토론 스레드 (이 사이트의 Q & 형식 임)를 따르도록 허용하는 웹 응용 프로그램을 만들고 있지만 다른 콘텐츠 형식 (예 : 회사 및 프로필 페이지가있는 학교. (이 사이트는 직업 구직을 돕기 위해 만들어 졌으므로 백엔드는 기업, 학교 등을위한 기본 프로필 페이지를 제공합니다.)여러 콘텐츠 형식을 따르는 MySQL 구조

"Follow"테이블 하나를 사용하는 것이 더 효율적입니까? 액세스 할 수있는 follow_entity_type 필드가 있고 적절한 내용 표 (Q & A, 회사 등)로 리디렉션됩니까? 또는 사용자 피드를 컴파일하려고 할 때 개별적으로 액세스해야하는 각 콘텐츠 유형에 대한 '팔로우 (Follow)'표가 있어야합니까? 첫 번째는 더 복잡한 코딩과 쿼리를 필요로하는 반면 두 번째는 모든 유형의 게시물에 대해 시간순으로 피드를 구성하는 것을 어렵게 만듭니다.

나는 솔직히 해결책이 확실하다고 생각하지만, 파트 타임 개발자와 자동 교섭으로, 나는 몇 가지 기본 사항을 놓친다.

답변

0

나는 follow_entity_type 필드를 가장 많이 사용합니다. 필자의 의견으로는 엔티티 목록에서 하나의 추가 유형을 가져와 통합 한 다음 목록의 모든 인스턴스에 새 조인 테이블을 통합하는 것이 훨씬 쉽습니다. 또한 & 검색을 이미 처리하고있는 '콘텐츠 유형'당 2 개의 표 대신 1 개를 추가해야한다는 것을 의미합니다. 이 쿼리는 IMHO를 훨씬 어렵게하지 않습니다.

+0

조언 해 주셔서 감사합니다. 나는 같은 선을 생각하고있다. – tchaymore

1

OO 디자인에서 어떻게하는지 생각해보십시오. 따라야 할 모든 종류의 것들에 공통된 수퍼 클래스 또는 인터페이스가 있습니다. 전화 번호는 Followable입니다. 당신이 "followable"개체의 컬렉션을 나타냅니다 때

interface Followable { } 

class QandA implements Followable { ... } 
class Profiles implements Followable { ... } 

는 그런 다음 컬렉션 $object instanceof Followable이 true 인 객체로 구성되어 확인합니다.

당신은 SQL 테이블과 같은 일을 수행 할 수 있습니다

CREATE TABLE UserFollows (
    user_id INT NOT NULL, 
    follow_id INT NOT NULL, 
    PRIMARY KEY (user_id, follow_id), 
    FOREIGN KEY (user_id) REFERENCES Users(user_id), 
    FOREIGN KEY (follow_id) REFERENCES Followables(follow_id) 
); 

Class Table Inheritance 참조 :

CREATE TABLE Followables (follow_id INT AUTO_INCREMENT PRIMARY KEY ...); 

CREATE TABLE QandA (qanda_id INT PRIMARY KEY ... , 
    FOREIGN KEY (qanda_id) REFERENCES Followables(follow_id)); 
CREATE TABLE Profiles (profile_id INT PRIMARY KEY ... , 
    FOREIGN KEY (profile_id) REFERENCES Followables(follow_id)); 

이제 가지로 참조 사용자가 다음과

Followables에 외래 키입니다.

+0

저는 설치가 마음에 들지만, 우리가 사용자를 추종자로 만들지 않는 이유는 무엇입니까? – Wrikken

+0

당신은 추종 할 수있는 무엇이든 만들 수있다, 나는 다만 2 개의보기를 보여주고 있었다. –

+0

확인해보세요, 거기에 아무런 문제가 없습니다. – Wrikken