我继承了一个设计非常糟糕的 mysql 数据库,其中在用户表和首选项表之间没有真正的外键。
考虑
CREATE TABLE `user` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`email` varchar(255) NOT NULL COMMENT 'email address',
...
)
和
CREATE TABLE `preference` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`user_id` int(10) NOT NULL,
...
)
如果我从用户表中删除一行,这会使首选项表成为孤立的。但是,使用 mysql 中的上述主键,一旦我向用户表添加新行,它实际上会使用先前删除行中的旧 id - 从而链接到旧用户的偏好(非常不受欢迎)。
尽管实现不佳(是的,我知道正确的做法是重构代码并使用真正的外键关系更新数据库),但有办法保证永远不会重用主键吗?