2010-12-27 2 views
7

약 200 개의 설정에 대한 사용자 설정이 있습니다. 여기에는 알림 설정 및 객체에 대한 사용자 활동의 설정 추적이 포함됩니다. 문제는 그것을 DB에 저장하는 방법입니다. 각 설정이 행이나 열이어야합니까? colunm이면 테이블에 200 개의 colun이 있습니다. 행이 3 열 정도면, 사용자 당 200 행 x 1000 만 명의 사용자도 좋지 않습니다.테이블에 사용자 설정 저장 - 방법?

그렇다면 어떻게 이러한 설정을 모두 저장할 수 있습니까? 참고 :이 설정은 텍스트 입력과 다른 테이블에 대한 FK 조회를 혼합 한 것입니다.

감사합니다.

+0

일부 필드를 검색 할 필요가없는 경우 하나의 텍스트 필드에 모든 필드를 직렬화하고 저장할 수 있습니다. 나를 위해 필드 당 열을 만드는 것이 좋습니다. 검색/선택을 향상 시키려면 user_profile, user_inteface_settings, user _... (indepently로 사용할 수있는 테이블)와 같은 여러 테이블로 분할 할 수 있습니다. - 설정이 포함 된 일반 테이블 만들기 : (uid, field, value)와 같은 행당 하나는 선택 필드가 많고 200 * 10000 000 = 2,000 000 000 행의 테이블이 될 수있는 경우 유용합니다. –

+1

Mdillion - 당신을 상기시키기 위해서, 당신은 가장 도움이 된 대답을 '받아 들여야'합니다. –

+0

내 문제는 아직 해결되지 않았습니다. 설정이 너무 많아 여기서 언급 한 두 가지 방법이 제대로 작동하지 않습니다. 그래서 나는 다른 옵션을 모색 중이며 가장 가까운 대답을 받아 들일만한 것을 발견하면. – Mdillion

답변

3

추적 할 200 개의 설정은 유연한 데이터베이스 스키마를 제안합니다.

  1. 사용자 : 같은 사용자 이름 및 암호와 같은 사용자가 가능성이 항상있을 것이다 속성에 대한 사용자 당 행이 테이블 따라서 나는 하이브리드 접근 방식을 제안 것입니다. 이 테이블은 외래 키를 유지할 수도 있지만 이는 경험적 방법이며 관계가 0 대 1 또는 0 대 다수인지에 따라 달라집니다. 후자는 별도의 테이블이 필요한 곳.
  2. 특징 : userId를, 이름과 값 열 기능 당 행이 두 가지 옵션
    1. 테이블, 효과적으로 해시 테이블. 이것은 또한 외국 관계를위한 장소 일 수도 있지만이 설정에서 데이터 무결성을 시행 할 수는 없습니다.
    2. XML이지만 데이터를 쿼리 할 수있는 기능이 있거나 쿼리 할 필요가없는 데이터에만 사용할 수 있지만 응용 프로그램 서버에서만 작동합니다.

나는 더 큰 대답은 당신이 당신의 원래 질문에서 하나 개의 솔루션에 도착 예정, 대신 데이터에 맞게 모두를 사용할 필요가있다라고 생각합니다.

+0

무엇입니까? 테이블에 10 수백만 개의 행이 있고 사용자가 설정 페이지를로드하기 위해 200 개의 설정을 찾아야하는 경우 시간을 읽으시겠습니까? 사용자가 페이지를 보게됩니까? 아니면 사용자 페이지를 검색하고로드하는 데 잠시 시간이 걸립니까? – Mdillion

+0

올바른 색인을 사용하면 읽기 시간이 길어집니다. 즉, 권한이 필요할 때마다 데이터베이스를 반복적으로 방문하는 대신 사용자 세션의 일부로 로그인 할 때 정보를 한 번로드하는 것이 좋습니다. – orangepips

2

저장 프로 시저를 작성하거나 수동으로 데이터를 보거나 나중에 더 많은 설정으로 확장하기가 어려우므로 200 열은 분명히 좋지 않다고 생각합니다.

이 200 개의 설정 모두에 대해 XML을 시도해 볼 수 있으며 사용자 당 행 수가 1 개만됩니다. 사용자 이름 및 해당 설정 xml. 그러나 다시 쿼리 기능이 제한되지만 DB는 이제 XML을 지원합니다. XML DB를 구체적으로 체크 아웃 할 수 있습니다.

+0

FK를 XML로 변환 할 수 있습니까? – Mdillion

+0

전체 내용을 잘 모르겠지만 할 수 있습니다. 읽기 : http://www.stylusstudio.com/xsllist/200205/post70200.html http://msdn.microsoft.com/en-us/library/ms345117(v=sql.90).aspx –

4

데이터 직렬화는 거의 항상 나쁜 생각으로 드러납니다. 그렇게하면 DBMS가 절름발이가되기 때문입니다. 효율적인 DBMS를 제작하는 데 걸린 인류의 모든 해는 일련의 일련의 버킷에서 낭비 될 것입니다.

1 열을 설정 테이블에 설정 당 : 당신은 응용 프로그램 논리가 각 설정에 매여있는 경우

, 난 당신이 중 하나로 구현한다고 생각합니다. 제약 조건 확인, 참조 무결성, 값에 대한 올바른 데이터 유형, 많은 정보를 옵티마이 저가 사용하여 dbms의 성능을보다 쉽게 ​​활용할 수 있습니다. 단점은 행 크기가 커진다는 것입니다.

또는

당 1 설정 테이블 (또는 관련 설정 기). 이것은 위의 모든 이점을 가지고 있지만 대부분 또는 모든 설정을 한 번에 가져와야 할 때 성능 저하에 대비하여 행렬 화됩니다.설정이 선택 사항 인 경우 실제 데이터가 희소 한 경우이 대안이 훨씬 더 작아집니다.

또한 많은 열이 "냄새"인 경우가 많으므로 데이터를 올바르게 표준화하지 못했지만 그럴 필요는 없습니다. 오직 당신 만이 당신의 데이터를 안다.

+0

많은 행이 "사용자 활동 당 개인 정보 수준"때문입니다. 각 사용자 활동에는 기본 시스템 정의 개인 정보 보호 수준 인 사용자 정의 개인 정보 보호 수준이 있습니다. 시스템 설정에 대해서는 괜찮 았지만 각각의 설정으로 200 개의 활동이있을 때 사용자 설정이 어려워졌습니다. – Mdillion