【发布时间】:2013-12-07 19:29:25
【问题描述】:
假设我们有三个关系表
- 用户
- 发布
- 评论
所以关系是简单的用户帖子评论。这是常见的事情,所以我不会描述它。
每次用户添加新帖子时,我们必须首先选择(不经意查询顺便说一句!)用户(它的实体),然后创建新帖子并在那里插入用户实体(我们已经选择)。 cmets也是如此。选择帖子 -> 创建新评论 -> 设置评论我们的帖子 -> 坚持。 (是的,我们必须定义适当的关系,但这是一个问题)
所以最后我们有: 在每个表中,我们必须有带有 auto_increment 属性的列 'id'。第二列(在帖子和评论表中)带有父项的“id”(在我们的例子中是 userID 和 postID)。
假设我们必须每 30 分钟执行一次\edit\update\delete cmets(这只是示例)。我们有两个选择。
第一个是选择所有 cmets(当前在 db 中)。删除数据库中现有的。在我们选择的实体的 php 端进行更新\删除\创建,然后再次插入它们。所以基本意思是“删除所有然后插入”(新的和更新的)。
第二个是全选并在每一个上执行操作,在 php 端,如果会是这样的:我们将在所有 cmets 中使用 foreach 并在操作更新之间切换,之后删除旧的,插入新的。
在第一种情况下,我们遇到了麻烦。假设我们将在每次调用更新时重新创建 1000 个条目。我知道 'int' 和 'bigint' 类型很有价值,但这不是交易,真的。我应该怎么做呢?我们在评论上有更多的关系?例如像这样的标签表......
在第二种情况下,auto_increment 不会有问题,因为我们不会在每次调用脚本时都重新创建条目。但是我们对每个条目都做了很多不必要的查询。 (例如在原生 mysql 上删除一个条目数组是一个查询,在 Doctrine 中会有多少?我会回答,最少两个,为什么?因为首先我们必须选择 + 然后通过 manager = 两个 db 查询删除它)
所以问题是如何避免没有此列 'id' 和 auto_increment 的表的关系?任何想法将不胜感激。
WBR
【问题讨论】:
标签: mysql symfony doctrine-orm