【问题标题】:Can a Field act as both Foreign and Primary Keys in the same table?一个字段可以在同一个表中同时充当外键和主键吗?
【发布时间】:2015-05-19 15:18:39
【问题描述】:

我正在使用 Flask-SQLAlchemy,但我猜这个问题跨越了不同的数据库实现平台。

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

User(字段:user_id 作为主键,usernameemailpassword)和

UserDetails(带有字段:f_namel_namedobgenderaddresscontactbiouser_id 作为外键)。

可以将UserDetails 表中的user_id 用作PRIMARY KEY,就像同一个表上的FOREIGN KEY 作为唯一的唯一列一样,而不必为此创建单独的user_details_id 字段?

【问题讨论】:

  • 外键允许重复,但主键不允许。所以我想,你不应该那样做。你为什么要为此制作不同的桌子?为什么不把它们结合起来呢?
  • @Nivedita 实际上有几个原因要做这样的事情 - 请参阅下面的答案以获取一些示例。
  • @Nivedita:我正在创建一个 Web 应用程序,用户在其中使用“用户”表中的详细信息进行注册。当用户决定更新他的详细信息(这是可选的)时,此新信息将进入“user_details”表。

标签: database foreign-keys relational-database primary-key flask-sqlalchemy


【解决方案1】:

简而言之 - 是的。具有与主键和外键相同的字段用于创建 1:0..1 关系。

一个用户可以有一条详细信息记录,但不能有多条详细信息记录,并且您不能拥有不存在的用户的详细信息或与用户没有关联的详细信息(即null userId)。

如果您有许多没有详细信息的用户(因此将详细信息分开到不同的表中是有意义的),或者如果详细信息非常繁重并且您不希望他们使用户表膨胀,这种设计会很有意义存储,需要许多快速查询。

【讨论】:

  • @Miureinik:你的答案是正确的!谢谢
猜你喜欢
  • 2015-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-23
相关资源
最近更新 更多