【问题标题】:Doctrine 2 : Multiple relations between two tables原则 2:两个表之间的多重关系
【发布时间】:2013-09-23 01:20:56
【问题描述】:

我有一个比 Doctrine 本身更涉及数据库关系的问题。 我有一个表“项目”和一个表“project_data”。我的表“project_data”总是链接到一个项目条目。 但是,在我的表“项目”中,我可以有两个对 project_data 条目的引用:project_data_id 和 project_data_waiting_id。但是,这些引用可以为空,并且与 project_data 表中设置的“project_id”无关。

问题:

  • 如何定义所有这些关系?我希望能够在没有任何 project_data 引用的情况下拥有项目条目。

  • Doctrine 如何处理?我对 Doctrine 和数据库设计有点陌生,在我必须在我的表之间进行的所有连接之间我有点迷失。

我加入一个图表,以便更好地了解我想要做什么。

谢谢。

【问题讨论】:

    标签: symfony database-design doctrine-orm foreign-keys entity-relationship


    【解决方案1】:

    在这种情况下,我会给你两个选择(假设project_data 总是只有一个project):

    第一:

    project
    - id
    - project_data_id
    - project_data_waiting_id
    
    project_data
    - id
    - name
    

    在这种情况下,您可以在项目类上定义两个一对一的关系。查看http://docs.doctrine-project.org/en/latest/reference/association-mapping.html#one-to-one-bidirectional 了解如何处理此问题的更多信息。

    第二个:选项:

    还可以创建多对多关系并为您的 project_data 赋予状态。它看起来像这样:

    project
    - id
    
    project_data
    - id
    - name
    - project_id
    - status_id
    
    project_data_status
    - id
    - name
    

    在这种情况下,project 将与 project_data 建立多对一关系,project_data 将与 project_data_status 建立一对多关系。该解决方案为您提供了更大的灵活性。您可以根据需要向project 添加任意数量的project_data 对象。

    如何在学说 2 中定义关系可以在我在这篇文章中提供的同一页面上找到。

    希望这将为您指明正确的方向。

    【讨论】:

    • 感谢您的回答。但是,对于选项 1),如果我在项目属性“project_data_id”和“project_data_waiting_id”中设置另一个 project_data“Y”和“Z”作为值,我们是否会丢失 project_data 表“X”上的项目关系?因为我想保留 project_data 是为一个特定项目创建的事实,即使这个 project_data 在项目表中不再使用
    • 对于选项 2) :这确实是一种有趣的方法,但是,我实际上设计它是为了为 project_data 条目构建一种“修订”系统。每个项目都可以有一个“实际”的 project_data,另一个正在等待批准。但我不想丢失在这两种情况下不会出现的其他先前 project_data 条目的历史记录。有了这样的设计,检索当前“等待”批准的项目数据和接受的当前项目是不是很困难?
    • 选项 1:是的,你会失去它。如果您想跟踪它,您应该选择选项二并添加历史状态或类似的东西。选项 2:您可以构建一个查询来获取属于该项目的具有特定状态的 project_data。
    • 确实,我想我会使用选项 2) 并注意正确更新我的 project_datas 的状态。谢谢!
    • 没问题。祝你好运
    猜你喜欢
    • 2021-10-31
    • 1970-01-01
    • 2017-06-26
    • 1970-01-01
    • 2012-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多