我正在使用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
答案 0 :(得分:1)
SQLite recommends using the REFERENCES
syntax和完整的FOREIGN KEY支持需要额外的pragma开关。
从历史上看,SQLite根本不支持FOREIGN KEY约束,并且当它们被添加时,它使用显式的每个连接开关来打开它以保持向后兼容性。对于Django,使用REFERENCES
就足够了,不会将Django限制为更新版本,并且可以节省必须启用FOREIGN KEY支持或检测到已编译该功能的内容。