2010-03-15 3 views
2

일종의 여기에 갇혀 있습니다 ... 사용자 당 데이터 행이 5000 행이라고 가정하고이 작업을 수행하는 것이 옳은 것인지 궁금합니다.각 사용자에 대한 테이블이있는 데이터베이스의 올바른 모델

사용자 계정 생성

에서 새로운 표가 생성된다 (UserData_ [아이디])

또는 I 단지 유저 데이터 테이블 1이 거기에 사용자 ID에 대한 열 모두를 가져야?

내가 지금 붙어 버린 이유는 NHibernate가 오버 헤드 AFAIK가 많은 또 다른 ISessionFactory를 만들지 않고도 동적 테이블 이름에 매핑 할 수 없다는 것입니다.

도움을 주시면 감사하겠습니다.

감사합니다.

답변

10

친애하는 신 NO 이것은 잘못된 방법입니다. 각 사용자에 대한 테이블을 만들지 마십시오.

정확히 무엇을해야하는지 알고 싶다면 5000 레코드의 내용을 알아야합니다.

예를 들어 각 사용자에게 5000 위젯이있는 경우 사용자 이름과 사용자 ID를 한 테이블에, 모든 위젯 (각각 UserID가있는)을 다른 테이블에 넣으십시오.

+0

테이블 스캔을 피하기 위해 UserId + TableId에 색인을 넣으십시오. –

+1

@ 스티브 : 그 사람을 압도하지 마시고, 분명히 새것입니다. – egrunin

+0

감사합니다. 일반적인 관행이 무엇인지 궁금 해서요. DB 제작을 많이하지 않아서, 대개 DAL을 제시하고 작업합니다. @Steve : 색인 (유창한 nhibernate 사용)이 무슨 뜻입니까? 참조 (c => c.Customer) .Not.Nullable(). Index ("idx__customer"); – BAH

1

하나의 엔티티 유형, 하나의 표.

그래서 사용자 ID 열이있는 모든 사용자에 대해 하나의 표를 사용하십시오 (응용 프로그램의 다른 곳에서 비정상적인 요구 사항이있는 경우는 예외).

4

하나의 테이블이면 충분합니다. 사용자 당 5000 개의 행, 100.000 명의 사용자는 500.000.000 행만 가능하며 SQL 표준은 많지 않습니다.)

일반적으로 db 스키마는 가능한 한 정적이어야합니다.

1

하나의 엔티티 유형에 대해 다른 테이블을 사용하지 마십시오. 모든 사용자에 대해 하나의 테이블을 사용하면 동적으로 생성 된 테이블의 문제조차 없을 것입니다. 데이터를 쿼리하는 것이 얼마나 어려울 지 상상해보십시오. 또한 5000 개의 테이블을 쿼리하여 모든 사용자를 확보하는 것이 비 논리 적이라는 것을 상상해보십시오.

관련 문제