使用子类型SuperType进行INSERT

时间:2011-06-03 18:47:18

标签: php mysql database yii

我目前正在使用一个使用子类型/超类型结构的数据库。我想知道处理INSERT的最佳方法。我是在SQL本身,还是PHP,甚至是两者的组合中保留多个表的数量?

我正在使用MySQL / PHP(带有Yii框架)

/// EDIT ///

不知道投票结果如何。没有意识到任何表格的重要性,因为这是一个通用的方法问题。但这是一个例子。如果创建了Party,那么Business和/或User如何填充该PartyId? SQL / PHP /两者?

enter image description here

4 个答案:

答案 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,那么同时,上述链接是一个良好的开端。