Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 如果有具有唯一varchar值的列,是否需要自动递增int值主键?_Database_Db2 - Fatal编程技术网

Database 如果有具有唯一varchar值的列,是否需要自动递增int值主键?

Database 如果有具有唯一varchar值的列,是否需要自动递增int值主键?,database,db2,Database,Db2,我有一个关于DB设计的一般性问题。我们有datatable,其中列的上有唯一的varchar值,这足以区分不同的行。但我认为我们也应该添加基于int值的自动递增主键,我的同事不同意我的观点。 我的理由如下: 使用int值比使用varchars值更便宜 基于int键的表之间的互连更容易接受 我的同事认为一把独特的钥匙就足够了,谁是对的? 谢谢。这个问题是一个正在进行的辩论 您提到“您需要使用varchar值维护列”,我读到这句话的意思是,您可以看到自然键经常变化。在这种情况下,它不是自然键 另

我有一个关于DB设计的一般性问题。我们有datatable,其中列的上有唯一的varchar值,这足以区分不同的行。但我认为我们也应该添加基于int值的自动递增主键,我的同事不同意我的观点。 我的理由如下:

  • 使用int值比使用varchars值更便宜
  • 基于int键的表之间的互连更容易接受
  • 我的同事认为一把独特的钥匙就足够了,谁是对的?
    谢谢。

    这个问题是一个正在进行的辩论

    您提到“您需要使用varchar值维护列”,我读到这句话的意思是,您可以看到自然键经常变化。在这种情况下,它不是自然键

    另一方面,您提到它是一个员工ID,通常是一个自然键。考虑到数据来自外部,您将很难维护表,除非它是一个自然键


    阅读Joe Celko和Chris Date关于钥匙的想法,然后自己下定决心。

    我倾向于同意你的同事的意见——至少如果你的人物数据不是太大的话。如果您添加了另一个人工键,那么您将得到两个唯一的索引,每个删除和插入都需要维护这些索引。然而,字符数据确实存在开销(大小和CPU成本),但除非您存储数亿行,否则我怀疑您是否能够测量速度差异。我不需要使用varchar值维护列,我从外部获取它并存储它的数据,只用于连接到其他内部系统。我说的是员工的id。但是谢谢你的回答,我会考虑的。如果varchar列是唯一的,你需要有一个唯一的索引。每次插入/删除都会更新该索引,无论您是否“维护”该varchar值。额外的索引意味着DML语句的额外工作。