默认的django auth架构不会在用户和组之间创建引用

时间:2013-02-16 13:14:02

标签: python django sqlite database-design django-models

我正在使用official tutorial学习django。

我已将settings.py配置为使用SQLite, 然后跑python manage.py syncdb。 生成了以下架构,在查看架构后,我发现auth_user表的id列与auth_user_groups表的user_id列之间没有引用。但是,确实auth_group表的id列和auth_user_groups表的group_id列之间存在引用。

为什么auth_user表和auth_group表之间没有引用?

--..OTHER TABLES
    CREATE TABLE "auth_user" (
        "id" integer NOT NULL PRIMARY KEY,
        "username" varchar(30) NOT NULL UNIQUE,
        "first_name" varchar(30) NOT NULL,
        "last_name" varchar(30) NOT NULL,
        "email" varchar(75) NOT NULL,
        "password" varchar(128) NOT NULL,
        "is_staff" bool NOT NULL,
        "is_active" bool NOT NULL,
        "is_superuser" bool NOT NULL,
        "last_login" datetime NOT NULL,
        "date_joined" datetime NOT NULL
    );
    CREATE TABLE "auth_user_groups" (
        "id" integer NOT NULL PRIMARY KEY,
        "user_id" integer NOT NULL, --why not "user_id" integer NOT NULL REFERENCES "auth_user" ("id") ?
        "group_id" integer NOT NULL REFERENCES "auth_group" ("id"),
        UNIQUE ("user_id", "group_id")
--...OTHER TABLES

1 个答案:

答案 0 :(得分:1)

SQLite recommends using the REFERENCES syntax和完整的FOREIGN KEY支持需要额外的pragma开关。

从历史上看,SQLite根本不支持FOREIGN KEY约束,并且当它们被添加时,它使用显式的每个连接开关来打开它以保持向后兼容性。对于Django,使用REFERENCES就足够了,不会将Django限制为更新版本,并且可以节省必须启用FOREIGN KEY支持或检测到已编译该功能的内容。