2009-07-30 4 views
0

나는 사용자의 디스플레이 환경 설정을 나타내는 모델을 가지고있다. 이러한 모든 환경 설정은 부울 값입니다. 부울 열을 50 개 갖는 대신이 문제를 해결할 더 좋은 방법이 있습니까? 나중에 새 항목을 추가하려는 경우 데이터베이스에 새 열을 추가하지 않아도됩니다.장고 모델에서 많은 부울을 나타내는 가장 좋은 방법은 무엇입니까?

+0

"최고"라는 말은 "가장 확장 성이 뛰어난"것을 의미합니다. –

답변

1

"나중에 새 항목을 추가 할 때 데이터베이스에 새 열을 추가하지 않아도됩니다."

이 경우 행을 추가해야합니다.

가능한 설정 이름의 도메인이있는 테이블이 있습니다. 50 행.

실제 설정 테이블이 있습니다. 사용자, 설정 이름, 설정 값.

0

많은 불리언이 있고 더 많은 것을 추가하려는 경우, 열을 사용하지 말고 항목을 사용해야합니다.

"사용자가 이메일을 원합니다"를 찾아야 할 때 UserPrefs.objects.get (User = user, Preference = Preferences.objects.get (name = "wanted email"))를 검색하면됩니다.

User_Table :

  • 사용자
  • 이름

Preferences_Table :

  • 이름
  • 설명

UserPreferences_Table :

  • 사용자 (FK_User)
  • 환경 귀하의 설정에 따라 (FK_Preferences)
  • 설정 (부울)

, 당신은 할 수있다 UserPreferences 테이블에서 Setting 필드를 생략하고 단순히 en의 존재를 사용할 수 있습니다. 해당 User/Preference를 True로, 하나가 False로 부족하도록하십시오.

1

비트 맵을 사용할 수도 있습니다. 당신은 오직 하나의 char 필드 만 필요합니다. 어딘가에 당신의 환경 설정, pref1, pref2, pref3 ...의 목록을 저장하고 비트 맵에 환경 설정에 해당하는 1과 0의 시퀀스를 저장합니다.

예를 들어 101은 pref1 = yes, pref2 = no 및 pref3 = yes를 의미하고 011은 pref1 = no, pref2 = yes 및 pref3 = yes를 의미합니다.

비트 맵에 대해 새 모델 필드 유형을 만들어이 코드를 다시 사용할 수 있습니다.

관련 문제