0

현재 Django 1.5.1을 사용하고 있으며 공식 설명서에 설명 된대로 사용자 지정 사용자를 사용하고 있습니다. 모든 것이 하나의 테이블 인 auth_user에 저장된다는 것을 알았습니다.장고 사용자 지정 사용자 VS 사용자 프로필

제 질문은 모든 추가 데이터에 대해 user_profile 테이블을 사용하여 1.5보다 이전의 테이블을 사용하는 대신 하나의 큰 테이블에서 모든 것을 갖는 것이 더 나은 이유는 무엇입니까? 예전과 같이 더 똑똑해 보입니다. 사용자에 대한 정보를 얻기 위해 20 개의 새로운 필드를 추가하고자 할 경우, auth_user에 모든 정보를 포함시키는 것이 이상합니다. 지금은 class MyUser(AbstractUser) 2 추가 필드 genderdate_of_birth을 가지고, 그래서이 모든 좋은,하지만 지금은 "좋아하는 영화", "좋아하는 같은 많은 다른 정보 (텍스트 필드)을하고 싶은 내 경우

, 책 ","취미 ","없이는 살 수없는 5 가지 "등, 내 사용자에 대한 더 많은 정보를 가지고 있습니다. 그래서 내가 MyUser 클래스에 넣어야하는지, 아니면 을 정의해야하는지 궁금합니다. 그리고 왜?

감사합니다.

답변

1

하나의 테이블에 모든 것이 있으면 데이터베이스 액세스가 더 빠릅니다. 이전 방법을 사용하면 사용자의 모든 정보를 얻으려면 보조 테이블에 join을 입력해야했습니다.

일반적으로 One-to-One 관계를 볼 때 하나의 테이블에 병합하는 것이 좋습니다.

그러나 새로운 사용자 정의 User 모델은 또 다른 문제점을 해결합니다. 이는 사용자가 가져야하는 속성입니다. 애플리케이션에 필수적인 속성은 무엇입니까? 전자 메일이 필요합니까? 전자 메일이 사용자가 로그인하는 사용자 이름이어야합니까?

이 기능을 도입하기 전에 이러한 작업을 수행 할 수 없습니다.

"취미"와 같은 추가 사용자 정보를 어디에 두어야하는지에 관해서는이 속성을 얼마나 자주 쿼리하거나 필요로하는지에 따라 달라집니다. 그들은 사용자의 프로필 페이지에만있을 것입니까? 그럼 당신은 별도의 테이블에 그들을 가질 수 있고 많은 문제 또는 성능에 타격이 없을 것입니다. 그렇지 않으면 User과 동일한 테이블에 저장하는 것을 선호합니다.

+0

설명해 주셔서 감사합니다. 지금은 전자 메일이 아닌 기본 필수 필드로 사용자 이름을 사용합니다. 하지만 로그인 할 때 사용자는 사용자 이름과 이메일 주소를 모두 확인하기 위해 사용자 지정 EmailBackend를 만들었습니다. 인증 할 때이 두 가지를 모두 사용할 수 있습니다. 그러나 나는 왜이 사용자 지정 사용자가 여기에 도움이되는지 명확히 알았습니다. 정말 좋습니다. – Dachmt

+0

내가 무엇을 사용해야하는지에 관해서는 사람들이 다른 사람들의 프로필을 체크 아웃하는 소셜 앱이기 때문에 이러한 정보는 종종 집중적으로 표시됩니다. 그럼에도 모든 것을 사용자 정의 사용자 테이블에 저장하는 것이 더 좋다고 생각하십니까? – Dachmt

+0

@Dachmt 여기 같은 사이트에서 예를 들어, 나는 그들을 별도의 테이블에 저장합니다. 귀하의 상황에 따라 다릅니다. '좋아하는 영화'가 중복을 피하기 위해 각각의 테이블에서 비정규 화 될 수 있습니까? 사용자가 영화 등급을 매길 수 있습니까? 아마도 그렇습니다. 그러나 각 속성의 기능에 따라 다릅니다. 만약 내가 20-30을 넘지 않는 다소 정보적인 속성들을 가지고 있다면, 그것들을 같은 테이블에 넣을 것입니다. – rantanplan

관련 문제