2010-11-30 7 views
3

사용자가 새 계정을 만들 때 계정에 수백 개의 데이터 행 (미리 정의 된 옵션, 설정 등)이 채워지는 응용 프로그램을 설계하고 있습니다. 대부분의 사용자는이 테이블에 포함 된 정보를 거의 변경하지 않습니다. 데이터베이스 테이블에서 중복 된 데이터의 양을 줄이기위한 좋은 디자인 패턴이 있습니까? 내가 지금까지 한데이터베이스 설계에서 반복되는 정보를 줄입니다.

몇 가지 아이디어 :

  • 가 자신의 테이블에 미리 정의 된 옵션을 유지하고 사용자 만 테이블에 정의 옵션을 저장합니다. 이 은 오버 헤드를 줄이는 것처럼 보일 것입니다, 그러나 나는 데이터베이스 호출이 매우 까다로워지는 호출을 볼 수 있습니다.

  • 매 100 사용자 나에 대한 새로운 데이터베이스를 만들기 때문에, 사용자 데이터베이스를 가리키는 계정 에 대해 별도의 데이터베이스 . 이것은 최적이 아닙니다.

  • 아이디어 3?

답변

1

같은 기본 설정을 할 수있는 참여하거나 뭔가있는 방법이 생각.

우리가 말하는 데이터의 양과 데이터를 줄이려는 이유는 무엇입니까? 수백만 명의 사용자가 있더라도 각 사용자의 데이터 크기가 여러 메가 바이트가 아니라면 수백만 행이 매우 큰 테이블이 아닙니다. 잘 선택된 인덱싱은 사용자 테이블을 최적화하기에 충분해야합니다. 그러나 기본값을 변경할 때 사용자 설정 만 저장할 경우 모든 사용자의 기본 설정을 수정하는 것이 더 간단해질 수 있습니다.

+0

사용자 당 100 개의 항목까지 포함하여 데이터베이스가 너무 크고 느려지지만 다시 개발자가 될 것이라고 생각합니다. –

0

NO은 사용자의 수에 따라 새 데이터베이스를 만듭니다니까. 옵션 1.

또는 활성화 선택한 옵션/적용 규칙도 설정 사용자 그룹에

스틱.

사용자 역할/규칙이 까다로울 수는 있지만 새로운 사용자를 위해 여러 테이블/데이터베이스를 유지 관리하여 발을 쏠 필요가 없습니다.

당신은, 당신이 Database normalization

0

볼 필요가 정말 얼마나 많은 테이블되고 있습니다에 따라 당신이 이제까지 한 줄에 중복 된 값을 볼 경우, 또한 UserRoles-UserGroupsUsersUserRules

를 구현해야 사용자 옵션에 의해 채워지지만 대부분의 시간, 사용자 옵션이 기본값, 동일한 경우 사용자 정의 테이블에 직접 넣을 수 있으며 뷰를 사용하여 데이터를 매끄럽게 추출 할 수 있습니다. (그래서 옵션 1)

0

필드의 사용 통계를보고 공통적으로 변경되는 것들을 함께 묶어 덜 자주 변경된 필드에 해당 사용자에 대한 레코드가 없으면 기본값으로 되돌아갑니다

내가 100 사용자가 미친 비효율적 인 아이디어 같은 소리에 대한 새로운 데이터베이스를 생성하는

0

확실히 모든 기본 규칙 및 값이 표시되는 기본 프로필 (또는 예를 들어 국적 또는 기타 의미있는 파티션을 기반으로하는 기본 프로필 그룹)을 만듭니다.

사용자 수준에서 "예외"즉 사용자가 변경 한 값만 생성하고 관련 기본 프로필과 사용자 별 예외 사이의 조인으로 프로필에 항상 액세스합니다. 비어 있음, 즉 DB에 존재하지 않음).

유일한 염려 사항은 다양한 기본값을 여러 개의 작은 (필드 개수의 관점에서) 테이블에 그룹화해야한다는 것입니다. 그렇지 않으면이 방법으로는 아무런 이점도 얻지 못할 것입니다. 즉 가능한 모든 것을 넣으면 설정을 단일 테이블 레코드에 저장하면 사용자가 하나의 필드 만 변경하자마자 모든 내용을 복제해야하므로 이점이 전혀 없습니다.

관련 문제