我目前正在使用一个使用子类型/超类型结构的数据库。我想知道处理INSERT的最佳方法。我是在SQL本身,还是PHP,甚至是两者的组合中保留多个表的数量?
我正在使用MySQL / PHP(带有Yii框架)
/// EDIT ///
不知道投票结果如何。没有意识到任何表格的重要性,因为这是一个通用的方法问题。但这是一个例子。如果创建了Party,那么Business和/或User如何填充该PartyId? SQL / PHP /两者?
答案 0 :(得分:2)
“标准”方法是为每个子类型创建一个可更新视图。每个可更新视图都将超类型与一个子类型连接起来。
然后,应用程序代码通常使用视图,而不是基表。
在大多数平台上,这意味着您需要编写一些触发器。
答案 1 :(得分:0)
我完全没有得到你的问题。
如果你需要在Party表上添加一行,那么你可以:
INSERT INTO party [...]
然后,如果您需要插入商业,那么
INSERT INTO business [...]
就是这样。
如果您想要安全,将运行两个查询以启动交易
答案 2 :(得分:0)
我假设你把它放在Yii标签中,你实际上正在使用Yii?通常要做的就是为每个人创建一个activerecord类。您仍然必须将生成的PartyId转移到其他2个类中的一个。大部分时间都是使用作业完成的。
$oTransaction = Yii::app()->db->beginTransaction;
$oParty->save();
if ($oParty->PartyType == ...)
{
$oBusiness->BusinessId = $oParty->PartyId;
$oBusiness->save();
}
else
Do User things
$oTransaction->commit();
有可能更好的做到这一点,甚至可能在AR类上使用继承,但我不知道这是否会节省任何工作。最好的办法是给你的Party模型一个函数,它会返回我认为的Business或User实例。
最干净的方法也是在Part的afterSave()方法中保存业务/用户,你有PartyId。但是你的派对模型需要有数据才能做到这一点。
答案 3 :(得分:0)
您可能希望通过几个教程来更好地理解Yii如何使用关系数据模型。请参阅http://www.larryullman.com/series/learning-the-yii-framework/和http://www.yiiframework.com/doc/blog/
目前,你似乎没有Yii问题,而是一个更基本的数据库建模问题 - 我确信有很多关于这方面的教程,但如果你有兴趣学习Yii,那么同时,上述链接是一个良好的开端。