php – 在数据库中使用ID

数据库中创建新表时,使用id的重要性是什么.出于我们的目的,我们在每个字段中使用唯一的用户名和电子邮件,以将信息与唯一的用户名或电子邮件相匹配.那么id的用途是什么?

另外,长度/值字段是什么?新的.

谢谢一堆!

解决方法:

正如其他人所指出的,记录有两种类型的键:自然键和代理(人工)键.那么,两个主要问题是:您是否需要使用代理键,如果是,那该代理键应该是什么?

关于第一个问题:如果您没有有效的natural key用作桌面上的primary key,则只需使用surrogate key.所有理智的数据库系统都支持’ON UPDATE CASCADE‘子句,这意味着如果您正在使用恰好更改的自然键,则更改将传播到声明为引用它的所有内容.当然,如果您的数据库系统不支持foreign keys,那么您最好的选择是使用代理键,如果只是为了解决数据库系统中缺少的功能(并且代理键将使您的数据库更容易一致性检查光那个事实).也就是说,如果您正在设计一个具有高正常运行时间和高稳健性要求的应用程序,请选择能够正确识别外键的数据库实现,否则您很可能会发现数据完整性错误将在开发后期(甚至是维护中)发现并且您将必须编写实用程序,以检查您的数据在各种故障模式下的一致性.

对于第二个问题:如果使用代理键,特别是如果您正在解决数据库系统的缺陷,则应始终将其视为不可变且全局唯一.总是.这将在以后的许多情况下提供帮助:公司可以合并(和拆分),数据库可以合并(和拆分),并且当数据库被设计为能够导致问题时,可能会发生大约一百万个其他情况如果代理键不是全局唯一的.由于代理键与它们所持有的数据完全无关(它们与表中的其他字段没有任何关系,除了你赋予它的人工字段),这是最好的方式.由于这些原因,当我必须使用代理键时,我使用UUID(基本上是128位整数,但不是增量).现在,您不必担心在发生意外事件时重新编号记录编号和引用. (是的,它确实减慢了速度,特别是如果你的服务器在32位平台上运行.但是如果你需要处理更多的负载,更好地分配负载—不要因为速度而牺牲完整性,当你’重新处理重要数据!)

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...