所以我有一个包含几张表的数据库。
第一个表包含用户 ID、名字和姓氏。
第二个表包含用户 ID、兴趣 ID 和利率。
还有另一个包含所有兴趣 ID 的表格。
对于每个兴趣 ID(即使添加了新的),我需要确保每个用户都有该兴趣 ID 的条目(即使它是空白的,或者有默认值)。
外键对这种情况有帮助吗?还是在添加新 key 时需要使用 PHP 来更新每条记录?
最佳答案
外键是一种约束,因此它们只会在您尝试添加记录时失败。
您可以使用触发器完成您所描述的内容。我不知道 MySql 语法,但在 SQL Server 中它看起来像这样:
CREATE TRIGGER TR_ensure_user_interest ON interest FOR INSERT, UPDATE AS
BEGIN
INSERT user_interest (user_id, interest_id)
SELECT user_id, interest_id
FROM inserted
,user
EXCEPT (SELECT user_id, interest_id)
END
请注意,这是一种相当低效的方法,但它应该涵盖您关心的许多情况。
更新:我同意其他在这里观察到设计“味道”的人的观点。如果您可以使用 JOIN 查询完成所需的结果,那将是一个更有效的解决方案。但是,我试图回答实际提出的问题。 (另外,我遇到过这种情况,物理记录对不擅长复合查询的其他数据库用户很有帮助。)
关于php - 管理外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2579249/