【发布时间】:2010-12-10 07:03:06
【问题描述】:
我有一个自制的 ORM 系统,目前只支持自增主键。这工作得很好,但现在是支持复合主键的时候了。我知道代理与复合主键之间的圣战,我个人认为每个都有一席之地。无论如何... :)
使用自增主键,很容易判断在保存模型时是否必须运行 INSERT 或 UPDATE 语句:这取决于是否设置了主键。
但是对于(非自动递增的)复合主键,这并不容易分辨,因为即使您正在执行INSERT,您也必须设置所有复合主键字段值。
那么,对于我的问题:如何确定在使用复合主键时是否应该运行 INSERT 或 UPDATE 语句?
以下是我想出的解决方案:
- 事先查询是否存在复合主键的记录。这似乎是最好的选择,即使每次保存都必须运行额外的查询。
- 使用 MySQL 的
INSERT ... ON DUPLICATE KEY UPDATE语法。但是我的 Model 类完成的其他操作需要知道记录是否是新的,例如是验证所有列(当记录是新的时)还是只验证修改的列(当记录已经存在时)。
您有更好的解决方案吗?还是其中之一是我最好的选择?感谢您的洞察力!
【问题讨论】:
标签: sql mysql language-agnostic orm