php - Symfony 和 MySQL/Doctrine : manage a todo lists with todos that may relate to many different entities: tables or fields or many-to-any?

标签 php mysql symfony doctrine-orm

假设我必须管理一些列表,每个列表中都有一些待办事项。

但是每个待办事项都可以与其他实体相关:比如说一个用户(调用它),或者一个文档(比如编辑它),或者任何其他由我的应用程序管理的实体。

我只看到两种解决方案来管理这些关系:

  1. 为每种关系类型使用一个单独的表(因此我会想出像 todo_userstodo_documents 等表)
  2. todos 表中使用专用字段(因此我将拥有像 too_idtodo_listrelates_to_user 这样的字段>, relates_to_document, ecc.)

问题 #1:这两种解决方案在非常大的数据集上可能有不同的性能?或者它们是等价的?

问题 #2:我可以采用更好的方法吗?

Doctrine 不支持它,但是有没有办法建立一个todo-to-any 关系?

最佳答案

尝试以#2 方式存储东西迟早会导致困惑。您可能会遇到的一些问题(我敢肯定,还有一些我现在看不到或记不起的问题)

  • 每次您需要添加与新实体的关系时,您都需要添加一列:一次只有一列是“重要的”,因为我想,只有一个 todo_list 可以属于另一个实体。
  • (上述观点的直接后果)您需要“以编程方式”控制一次只有一列具有true值并且至少 strong> 一列具有 true 值(如果您“绕过”您的应用程序 API 并直接转到 db(此处的relates_to_* 字段被视为指示外键“成员身份”的 bool 值;如果它们只是外键,则需要保证相同的约束,但不是 true 值,而是替换 not null)
  • 如果 relates_to_* 是 bool 值,您需要存储一个带有外键的额外字段:这在原则(以及一般的 sql 中)中是不可能的,因为您不能声明引用更多的外键不止一张 table
  • 每条记录都有大量无用的“噪音数据”:如果此应用程序为 10 个用户运行,这根本不是问题,否则就是肯定的。

我建议看一下doctrine inheritance mappings :这是您问题的解决方案,直接从学说本身“在幕后”处理。

关于php - Symfony 和 MySQL/Doctrine : manage a todo lists with todos that may relate to many different entities: tables or fields or many-to-any?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43408730/

相关文章:

PHP MYSQL 选择查询从列中删除空格

php - 无法在 Joomla! 中修改外部数据库3.0.3。使用 PHP 请求

mysql - 使用 Visual Basic 在 mysql 中保存 blob

symfony - 创建实现 ContainerAwareInterface 的服务

php - 使用 Guzzle 通过 Symfony 将 HTTP GET 发送到外部 API

php - 如何打印这个多维数组?

php - OS X Homebrew 的 PHP 扩展位置

mysql - 找不到 mysql.sock

php - 如何在 Symfony 4 中使用简单的函数?

php - str_replace 无法按预期工作 - 多字节字符集?