私の Django アプリでは、いくつかの追加フィールドを持つユーザー モデルを作成する必要があります。DB のパフォーマンスのために、これらのフィールドにアクセスするたびに結合することは避けたいと思います。DB レベルでは、ユーザー テーブルに ALTER TABLE を生成してこれらのフィールドを追加したいと思います。または、アプリの初期化に必要なすべてのフィールドを含む CREATE TABLE でさえ、まだ開発中なので問題ありません。
ユーザー モデルを拡張するための 2 つの解決策を見つけました (以下に報告) が、どちらも JOIN を回避するという私の選択と矛盾しています。
models.py (Solution 1)
from django.db import models
class Person(models.Model):
# Aggregate using a OneToOneField on User
user = models.OneToOneField(User)
age = models.PositiveSmallIntegerField()
models.py (Solution 2)
from django.contrib.auth.models import User
class Person(User):
# Inheriting from User
age = models.PositiveSmallIntegerField()
SQL (Solution 1)
/* Aggregate using a OneToOneField on User */
BEGIN;
CREATE TABLE "people_person" (
"id" integer NOT NULL PRIMARY KEY,
"user_id" integer NOT NULL UNIQUE REFERENCES "auth_user" ("id"),
"age" smallint unsigned NOT NULL
);
COMMIT;
SQL (Solution 2)
/* Inheriting from User */
BEGIN;
CREATE TABLE "people_person" (
"user_ptr_id" integer NOT NULL PRIMARY KEY REFERENCES "auth_user" ("id"),
"age" smallint unsigned NOT NULL
);
COMMIT;