문제

개인 정보가 담긴 친구 테이블을 만들고 세부 정보를 로그온하고 싶습니다.

멤버 테이블을 2 개의 테이블로 분리하는 것이 좋습니다. 하나는 최소한의 세부 사항을 포함하고 두 번째는 다른 세부 사항이 있습니다.

아니면 한 테이블에 남아 있습니까?

회원의 외국 키가 포함 된 테이블이 많이 있습니다.

도움이 되었습니까?

해결책

"다른"세부 사항이 무엇인지에 따라 다릅니다. 이것은 일반적이고 흥미로운 질문이며, 언뜻보기에는 "단단하고 빠른"대답이 없습니다. 그러나 우리 가이 문제를 더 추상적으로 생각한다면, 당신이 표현하고자하는 특정한 것의 속성 ( "세부 사항") 간의 실제 관계에 대해 더 명확하게 찾을 수 있습니다.

귀하의 질문에서 귀하는 친구가 "최소"및 "기타"세부 사항을 가지고 있다고 말합니다. 이러한 세부 사항을 "최소"또는 "기타"로 분류하기보다는 개인 ( "원자") 세부 사항이 친구를 독특하게 만드는 것에 의해 완전히 결정될 수 있는지 여부를 분류합시다.

Friendid 또는 이메일 주소 등과 같은 기본 키 (PK)가 있다고 가정합니다. 이 고유 한 식별자를 고려할 때, "내가 정확히 하나의 친구 (또는 전자 메일 또는 PK로 사용하는 모든 것을 사용하는 것)가 주어지면 그 친구의 세부 사항은 내가 절대적으로 확신합니까? 친구의 이름, 성, 생년월일을 알고 있지만 나는 하지 마라 친구의 전화 번호가 하나 이상 있기 때문에 그 친구의 전화 번호를 절대적으로 알고 있습니다.

한 테이블에 함께 그룹을 함께 그룹화하여 PK를 주어 주었던 모든 세부 사항을 분명히 알고 있습니다. "자식"테이블에 더 많은 데이터가 필요한 세부 정보 (전화 번호의 경우 "홈"또는 "작업"을 PK의 "부모"테이블로 다시 가져 왔습니다. (참고 : 어린이 테이블의 PK가 복합재가 될 가능성이 매우 높습니다. 1-m 관계는 매우 좋습니다.)

데이터베이스 괴짜는이 분해를 기준으로 부릅니다 기능적 종속성.

다른 팁

하나의 테이블, ~하지 않는 한 한 명의 회원을 여러 세부 세부 세트 (예 : 여러 전자 메일 주소, 사용자 그룹, 주간 전화, 나이트 폰, 휴대폰 등)와 연관시켜야합니다.

그것에 대해 의문의 여지가 없습니다 : 논리적으로 의미가있을 때 항상 테이블을 분할하십시오.

EG : 친구 1 : Tom Jones는 Valley Friend 2 : Erin Jones도 그의 형제이기 때문에 살고 있습니다.

테이블 :

Friends
Id  Name          Address
1   Tom Jones     1
2   Erin Jones    1

Adresses 
Id Address
1  The valley

그렇지 않으면 모든 것이 항상 나타날 것입니다.

Friends
Id  Name          Address
1   Tom Jones     The Valey
2   Erin Jones    The Valley

이는 잘못된 쿼리로 이어질 것입니다.

그것은 단 하나의 문제 일 뿐이며, 많은 것이 있습니다. 2 개의 이메일 주소와 3 개의 휴대폰 번호가 있으면 어떻게됩니까? 거리 이름이 바뀌고 5 명의 친구가 살면 어떻게 되나요?

테이블이 작을 것이라고 확신하고 테이블을 하나만 사용할 수있는 것보다 쿼리 할 필요가 없습니다. 그러나 당신이 SW와 같은 탁월함이나 그 문제에 대한 종이 조각을 사용할 수있는 것보다 :-)

그러나 데이터베이스를 사용하려면 데이터베이스를 하나로 취급하십시오.

에 대해 읽다 표준화 전체 문제를 위해.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top