2017-11-18 17 views
0

페이스 북 사용자를 위해 데이터베이스를 모델링하려고합니다. 내 User 테이블의 경우 {account_name, account_id, ..., password}를 변수로 사용합니다. Friendlist 또는 Contacts 테이블과 같은 해당 사용자의 친구를위한 테이블을 만들려고하는데 연락처 테이블에 가능한 모든 우정 (예 : {user_id, friend_id, friends_since, ...}) 또는 연락처 테이블을 특정 user_id에 지정할 수 있습니다 (그래서 {contact_id, friends_since, no_of_mutual_contacts 등}).데이터베이스 - 데이터베이스의 테이블에 모든 글로벌 인스턴스가 포함되어야하거나 특정 ID에만 적용될 수 있습니다.

이것은 아마도 내 두뇌의 객체 지향 부분 일 뿐이지 만, 예를 들어 시네마 데이터베이스를 사용하는 경우를 예로들 수 있습니다. 5 개의 영화관이 있고 각각에는 5 개의 스크린이 있고, CINEMA는 테이블이고 SCREEN은 테이블입니다. SCREEN 테이블에 25 개의 데이터 인스턴스가 있거나 SCREEN 테이블에 특정 CINEMA에 해당하는 5 개의 화면 만 포함될 수 있습니다.

원래의 질문으로 돌아가 봅니다. 주소록 테이블은 모든 우정을 포함하는 전역 테이블이어야하며, 연락처 테이블은 user_id와 관련된 연락처 만 반환합니다.

데이터베이스의 관계형 차트를 볼 때 링크가 user.Contacts 또는 user.Events와 같은 멤버로 표시된 구조와 같은 다소 객체를 ressembing하는 것을 볼 수 있습니다.

+0

데이터 모델링과 OOP를 혼동하지 마십시오. OOP는 복잡한 시스템을 대화 형 상태 저장 서비스 네트워크로 분해하기위한 것입니다. 데이터 모델링은 복잡한 지식을 간단한 사실 집합으로 분해하기위한 것입니다. – reaanb

답변

0

일반적으로 관계형 데이터베이스의 테이블은 주어진 유형의 모든 사실을 기록합니다. user <user_id> is friends with user <friend_id> since <friends_since>.

특정 사용자에게 적용 할 수있는 행의 하위 집합을 얻으려면 필요한 경우 주어진 사용자에 대한보기를 만들거나 쿼리에 user_id 만 지정할 수 있습니다.

특정 사용자의 특정 테이블을 만들면 특정 행의 모든 ​​행을 가져 오려면 어려움이 있습니다. friend_id.