Database 字段是否可以同时作为同一表中的外键和主键?

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

我正在使用Flask SQLAlchemy,但我想这个问题涉及不同的数据库实现平台

假设我有两个表模型,结构如下:

用户
(包含以下字段:
用户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:您的答案很准确!谢谢