Database 字段是否可以同时作为同一表中的外键和主键?
我正在使用Flask SQLAlchemy,但我想这个问题涉及不同的数据库实现平台 假设我有两个表模型,结构如下:Database 字段是否可以同时作为同一表中的外键和主键?,database,foreign-keys,relational-database,primary-key,flask-sqlalchemy,Database,Foreign Keys,Relational Database,Primary Key,Flask Sqlalchemy,我正在使用Flask SQLAlchemy,但我想这个问题涉及不同的数据库实现平台 假设我有两个表模型,结构如下: 用户(包含以下字段:用户id作为主键,用户名,电子邮件,密码)和 UserDetails(包含以下字段:f\u name,l\u name,dob,性别,地址,联系人,bio和用户id作为外键) 将UserDetails表中的user\u id用作主键是否可以,就像它是同一个表中唯一唯一的列上的外键一样,而不必为此创建单独的user\u id字段。使用与主键和外键相同的字段来创建1
用户
(包含以下字段:用户id
作为主键,用户名
,电子邮件
,密码
)和
UserDetails
(包含以下字段:f\u name
,l\u name
,dob
,性别
,地址
,联系人
,bio
和用户id
作为外键)
将
UserDetails
表中的user\u id
用作主键是否可以,就像它是同一个表中唯一唯一的列上的外键一样,而不必为此创建单独的user\u id
字段。使用与主键和外键相同的字段来创建1:0..1关系
一个用户可以有一条详细信息记录,但不能有多条详细信息记录,也不能有不存在的用户的详细信息或与用户无关的详细信息(即null
userId)
如果您有许多没有详细信息的用户(因此将详细信息分离到另一个表是有意义的),或者如果详细信息非常繁重,并且您不希望它们占用用户表的存储空间,因为需要许多快速查询,那么这种设计是有意义的。外键允许重复,但主键不允许。所以我想,你不应该这么做。你为什么要为这个做不同的桌子?为什么不合并它们呢?可能的重复:@Nivedita这样做实际上有几个原因-请参阅下面的答案以获取一些示例。@Nivedita:我正在创建一个web应用程序,用户在其中注册时会将详细信息放入“用户”表中。当用户决定更新其详细信息(可选)时,此新信息将进入“用户详细信息”表。@Miureinik:您的答案很准确!谢谢