假设我们决定将user
表分成两部分,一个包含与身份验证相关的数据,另一个包含基本用户描述:
user_table
user_id | name
1 | Max
2 | Alex
3 | Should not be possible
auth_table
user_id | email | password
1 | [email protected] | 123
2 | [email protected] | 321
4 | [email protected] | Should not be possible
是否可以强制执行相同的存在user_id
?基本上,两个表应该具有完全相同的行数,并且每行都应该在两个表中匹配。
您可以随时在相互约束的情况下强制执行
PRIMARY KEY
您的设计FOREIGN KEY
。PK 强制执行
UNIQUE NOT NULL
,FK 强制执行引用完整性。全做完了。我创建了user_table.user_id
一个IDENTITY
列,并在另一个表中重用生成的 ID。但这是可选的。看:操作行变得相当受限。插入行可能看起来像是先有鸡还是先有蛋的问题,但您只需在同一语句中插入两个表(使用 CTE):
小提琴
请参阅(包含更多链接):
我添加了
ON DELETE CASCADE
可选的便利功能,因此从一个表中删除也会从两个表中删除。您也可以在同一语句中从两个表中删除。有人也可以添加
ON UPDATE CASCADE
,但我一开始就不允许更新这些 ID。是的,有可能
我会将唯一索引放入 中
user_id
,这样就不会重复。然后在插入之前在主表上使用触发器在第二个表中创建一条记录