当前位置: 首页 > 知识库问答 >
问题:

外键作为主键可以吗?

慕承恩
2023-03-14

我有两张桌子:

  • 用户(用户名、密码)
  • 配置文件(profileId,gender,dateofbirding,...)

目前我正在使用这种方法:每个Profile记录都有一个名为“userid”的字段作为外键,它链接到用户表。当用户注册时,他的配置文件记录将自动创建。

我对我朋友的建议感到困惑:将“userid”字段作为外部和主键,并删除“profileid”字段。哪种方法更好?

共有1个答案

邢乐
2023-03-14

外键几乎总是“允许重复”,这会使它们不适合作为主键。

取而代之的是,查找唯一标识表中每个记录的字段,或者添加一个新字段(自动递增整数或GUID)来充当主键。

唯一的例外是具有一对一关系的表,其中链接表的外键和主键是一个相同的。

 类似资料:
  • 问题内容: 我目前正在为我们团队的项目设计数据库结构。我目前在脑海中有一个非常疑问的问题:能否将外键用作另一个表上的主键? 以下是我们系统的数据库设计表: 我想做的是,该表应包含学生用户和指导顾问用户的ID(应该是系统的登录凭据)和密码。简而言之,和表的主键也是表的外键。但我不确定是否允许。 另一个问题是:一个表中也存在,这需要一个(其为中表)和一个(这也是在)它的每个记录的。如果学生和辅导员的I

  • 如何使用hibernate注释实现下表? 当前代码为:(为简洁起见,已删除) 使用者 社交网络 SocialProfile公司 显然我的代码现在不能正常工作。有人能解释一下吗?

  • 问题内容: 如何使用复合主键作为外键?看来我的尝试无效。 问题答案: 该行: 是错的。您不能那样使用,这只是父表中PK约束的名称。要将复合主键用作外键,您必须向子表中添加相同数量(组成PK)的相同数据类型的列,然后在定义中使用这些列的组合:

  • 如何将复合主键用作外键?看来我的尝试没有成功。

  • 问题内容: 我有一个用于存储优惠券/折扣的表,并且我想将coupon_code列用作主键,即。 我的理由是,每个优惠券都将具有唯一的代码,而我将要运行的唯一命令是 我不会进行任何联接或索引编制,并且我看不到该表中有超过几百个条目。 在我看来,这可以,但是我不知道是否有任何我想念的东西。 问题答案: 从某种意义上说,您当然可以,您的RDBMS将允许您这样做。这个问题的答案,你是否没有问题 应该 做到

  • 问题内容: 我必须使用hibernate模式,并且不太确定如何解决此问题,我有2个具有1..n关系的表,如下所示: 我该如何使用Hibernate进行管理??? 我不知道如何管理第二张表的主键… 问题答案: 在Hibernate参考文档中有一个与您的案例完全相似的示例。在此示例之前,您将找到解释。这是与您的问题匹配的示例(用户是表A,客户是表B): 注意:如果您拥有这两个表的代理标识符,则要简单得