2010-12-05 2 views
1

내 사용자에게 mysql 테이블이 있습니다 ... 각 사용자는 Verified (예/아니요), Member (예/아니요) 등과 같은 다양한 특성을 가지고 있습니다. 더 설명 할 필요가 없습니다. ...Mysql 아키텍처 모범 사례 : 사용자 속성

난 ...이 같은 하나의 행, 어쩌면 lazyness 또는 단지 내가 지금까지 큰 DB를 구축하지 않기 때문에 내 테이블을 구축하기 위해 사용 alwasy 매우 일반적인 경우 봤는데 됐나

userId | userName | Verified | Member 
--------------------------------------- 
    3213 | Jon  | 1  | 0 

하지만 별도의 테이블에 빌드하고 나중에 관계를 만들면 어떤 이점이 있는지 궁금합니다.

사용자 표

userId | userName | 
------------------- 
    3213 | Jon  | 

구성원 테이블

memberId | userId | Member | 
-------------------------------- 
    555748 | 3213  | 0  | 

인증 목록 표

memberId | userId | Verified | 
---------------------------------- 
    555748 | 3213  | 1   | 

이 두 번째 선택이 실제 혜택은 무엇인가?

+0

[데이터베이스 정규화] (http://en.wikipedia.org/wiki/Database_normalization) – khachik

답변

4

여기에는 실제 이점이 없습니다. 단점 만 있습니다. 테이블 간에는 1 : 1 관계가 있으며 이제는 사용자의 확인 상태를 얻기 위해 두 테이블을 조인해야합니다. 또한 사용자가 확인 (1)되거나 확인되지 않았거나 (0) 레코드가 존재하지 않을 수도 있습니다.

1 대 다수 관계가없는 한 이러한 추가 필드를 동일한 테이블에 넣을 수 있습니다. 예를 들어, 저장해야하는 항목의 수를 모르기 때문에 사용자는 게시물, 친구, 사진을 별도의 테이블에 저장할 수 있습니다.

+0

에 익숙해지기를 원할 수도 있습니다. 사실, 제가 한 것은 사실입니다. 이제 요점을 ... 고마워합니다! – Francesco

2

첫 번째 방법은 적은 공간을 소비하며 1 : 1 관계가있는 한 더 빨리 수행하는 것입니다.

0

분리 지점은 1 : 1, 많음, 많음 또는 여러 가지 레코드를 허용하는 것입니다. 데이터 필드 중 어느 것도 동일한 정보를 포함 할 수 없으면 플랫 테이블이 선호됩니다.

0

나는 아마도 그것을 조금 단순화 할 것이다. 멤버쉽/검증을 나타내는 플래그를 갖는 것은 가치가 없으므로. 테이블을 분리하면됩니다. 또한 모든 테이블에 userId가 필요하지 않습니다. 아마도 사용자 및 구성원의 ID를 모두 포함하는 UserMember 테이블이있을 것입니다. 그래서 관계를 갖는 것만으로 충분합니다.

또한 1 : 1 관계가있는 경우 동일한 테이블에 플래그를 사용할 수도 있습니다. 1 : x 관계를 갖는 것이 정규화에 더 적합합니다.