微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如果我有一个UNIQUE字段INT,是否需要具有自动递增的主键ID?

如何解决如果我有一个UNIQUE字段INT,是否需要具有自动递增的主键ID?

| 我想在表中存储IP地址列表,以便以后检查系统中是否已使用某些IP。 我想将IP存储在longip模式下(signed int)。而且由于每个IP都是唯一的,所以我想知道是否有必要具有一个入门密钥字段(id,具有自动增量),或者仅将我的longip字段用作主密钥是否合适(更好)。     

解决方法

如果将来您必须使用该键将其与另一个表连接,则另一个表应包含所有数字,这会浪费很多空间。 例如,您有一个“计算机”表 在该表中,您使用ip \进行计算。要加入,您需要钥匙吗?因此,如果您通过密钥加入,则应该具有计算机ID和密钥(在本例中为ip) 我强烈建议使用带有自动增量的更简单的id,就像自大型机(as400),iSeries等以来所做的那样。     ,我认为Marc_s对问题的回答何时不使用代理主键?可以指导我们   我要说以下标准   被满足:         您的自然钥匙必须绝对,肯定,   不允许例外,唯一   (诸如姓名,社会保障等   数字等通常看起来是唯一的-但实际上不是)   您的自然密钥应与INT一样小,例如没有明显更多   大小超过4个字节(请勿使用   VARCHAR(50)作为您的PK,以及   尤其是对于您的集群密钥而言   在SQL Server中!)   您的自然密码应该稳定,例如永不改变(好的,使用ISO   国家代码,这几乎是既定的-除非南斯拉夫或苏联这样的国家崩溃,或者像两个德国人那样的国家团结在一起-但这很少见。         如果满足这些条件,则可以   将自然键视为您的PK-   但这应该是2%的例外   您所有的表格-不符合规范。 因此,我想您可能应该使用代理主键。如果您想始终将IP用作唯一密钥, 由于您使用的是您指出的longip,因此可以使用它。     ,几乎每次您使用自然键开始时,您都将在以后感到后悔。某些事情会发生,它的墨菲定律。避免麻烦,只需添加ID列即可。 如果它是自动增量,您不喜欢使用uuid。 MySql有一个uuid函数可以简化这一过程。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。