【问题标题】:Symfony + Doctrine problems with modeling the given databaseSymfony + Doctrine 对给定数据库建模的问题
【发布时间】:2017-06-23 05:43:04
【问题描述】:

我有一个给定的数据库,它将通过自动导入不断填充。所以我无法更改数据库结构,必须围绕数据库构建 Doctrine 模型。因此,我为此生成了一个模型,并且大多数东西在我的源代码中都可以正常工作,但对于下表而言尤其如此。

Table Device
----------
deviceId (pk)
name
deviceType (fk to DeviceType)
...

Table Processor
-----------
deviceId (pk)
ProcessorName
Clockspeed
...

Table RAM
-----------
deviceId (pk)
Size
Manufacturer
...

Table DeviceType
------------
deviceTypeId(pk)
DeviceType
...

Doctrine 正在生成一对一的映射,例如,在设备和 RAM 表之间,我认为有什么问题。 问题是,这些表共享主键(DeviceId)。因此,如果设备表中有 ID 为 1 的设备,如果 deviceType 为“RAM”(在 deviceType 表中定义),则 RAM 表中也有一个数据集。例如,ID 2 是一个处理器,因此在设备和处理器中都有一个条目,两者的 ID 都为 2。依此类推……设备表中的数据集条目总是有一个 deviceType,在 deviceType 表中定义。

我不是数据库专家,但这实际上不是一种关系,而不是一对一的映射吗?如何将设备的子类型(RAM、处理器)映射到 Doctrine 中的父表?

谷歌搜索后,我认为我正在搜索单表继承,但我不知道 Doctrine 是否可以正确处理我的数据库模型,因为子类型(RAM,处理器......)唯一共享的东西父类(设备)是 id 字段。每个表的所有其他字段都完全不同。

非常重要的是,Doctrine 不会触及我的数据库结构,因为导入将不再起作用。

有什么想法吗?

谢谢。

【问题讨论】:

    标签: php mysql symfony doctrine-orm doctrine


    【解决方案1】:

    好的,我发现http://doctrine-orm.readthedocs.io/en/stable/tutorials/composite-primary-keys.html 的简单派生身份用例可能适合我。让我坚持页面上的示例:从示例用户类到地址类的方向非常简单。但是,如果我想实现反面(从用户那里获取地址),我应该将字段“地址”简单地添加到用户类中。但是,如果我这样做,则学说想在我的用户类中添加一个外键。那将改变数据库模型,这是我不想要的。在我的真实数据库中,没有从父类(设备)到子类(例如处理器)的外键。

    有什么想法吗?

    【讨论】:

    • 由于其“糟糕的设计”,我认为不更改现有数据库是不可能的。如果您无法更新与稍微更改的架构匹配的导入过程,请尝试使用自动生成的映射并实现所需的函数来检索自定义存储库中的对象。
    • 好的,我试了一下并尝试更新教义模型,现在如果教义设置新的外键,我会违反完整性...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-18
    • 1970-01-01
    • 2013-11-30
    • 2011-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多