Database 为什么我的FK列和引用列的类型相同?

Database 为什么我的FK列和引用列的类型相同?,database,postgresql,integer,foreign-keys,bigint,Database,Postgresql,Integer,Foreign Keys,Bigint,假设我有两个共享关系的表: 职位 评论 我的posts表有一个id列,类型为bigint和我的注释。post\u id外键类型为integer 会出什么问题?为什么建议comments.post\u id类型也应为bigint?大int可以大到9223372036854775807,而int只能大到2147483647。因此,如果您的数据增长到足以超过2147483647,例如2147483648,您将无法再在comments.post_id列中引用您的帖子。从数据库的角度来看,如果使用您的数据

假设我有两个共享关系的表:

  • 职位
  • 评论
  • 我的
    posts
    表有一个
    id
    列,类型为
    bigint
    和我的
    注释。post\u id
    外键类型为
    integer


    会出什么问题?为什么建议
    comments.post\u id
    类型也应为
    bigint

    大int可以大到9223372036854775807,而int只能大到2147483647。因此,如果您的数据增长到足以超过2147483647,例如2147483648,您将无法再在comments.post_id列中引用您的帖子。

    从数据库的角度来看,如果使用您的数据库的用户插入了主关系中存在的
    bigint
    ,而您的关系拒绝了它,因为数据类型不匹配(我指的是您的输入大于
    int
    数据类型的情况),

    然后您犯了一个逻辑错误,因为该条目应该被接受,因为它满足FK约束

    这完全有道理。如果存在类型不匹配,DB是否应该抛出警告或其他内容?我在博士后身上试过,我的关系也很好。我想它会默默地失败。@BillyBlobSnortin不这么认为。阅读文档。DBMS设计人员可以决定允许明显可强制的数字类型的静态不匹配,只要表中的值满足约束——所有的bigint都在整数范围内。(这样的决定可能被认为是一种方便和/或陷阱。)不,DBMS将抛出一个错误。例如,SQL Server的ORA-12899。Hi的可能重复。你认为FK是什么?(SQL)FK的定义是一系列列,这些列的子代码值在其他地方显示为PK/UNIQUE。既然bigint可以超出整数的范围,那怎么可能呢?bigint列必须限制为整数范围。那你为什么不声明它为整数呢?PS请总是用谷歌搜索你的问题/问题/目标的许多清晰、简洁和具体的版本/措辞,有或没有你的特定字符串/名称,并阅读许多答案。如果你找不到答案,就发布,使用一种变体搜索你的标题和标签的关键词。