【问题标题】:Featured product with multiple possible product types?具有多种可能产品类型的特色产品?
【发布时间】:2013-02-15 05:08:33
【问题描述】:

我有 3 个不同的实体,它们都需要进入特色产品/实体/其他的表格。问题是特色产品的类型可能是 entityA、entityB 或 entityC。我如何对此进行建模并为其制作 symfony2 形式?最好的方法是什么?

例如,假设汽车经销商需要选择特色产品,但产品可能是“摩托车”、“汽车”或“卡车”(所有这些都是三个类,有 3 个表存储它们的数据)。

我可以想到一个表,其中包含一对多的可空外键,并且只能使一个非空,但这对我来说似乎不正确。

【问题讨论】:

    标签: php database symfony


    【解决方案1】:

    Lol 完全误解了这个问题,抱歉。

    无论如何,我认为同样的策略也适用于你的实际要求。

    表 'featured_products' object_ID FOREIGN KEY on 'objects'.'ID'

    object_ID
    1
    2
    3
    

    表 'objects' 这将只保存您的对象 ID

    ID (AI)
    1
    2
    3
    

    表 'cars': object_ID FOREIGN KEY on 'objects'.'ID' (NO Auto Increment!)

    object_ID | name
    1         | Ferrari
    2         | Duckatti
    

    表“卡车”:“对象”上的 object_ID FOREIGN KEY。“ID”(无自动增量!)

    object_ID | name
    3         | Monster truck
    

    此设置意味着您还必须更改一些代码。因为您必须在对象中插入 NULL 值并将 insert_ID 用于您的汽车、卡车等。

    我从未真正尝试过这个。但是您可能会成功使用以下查询。

    SELECT
       truck.name, car.name
    FROM
       objects
    LEFT JOIN trucks ON trucks.object_ID=objects.ID
    LEFT JOIN cars ON cars.object_ID=objects.ID
    WHERE objects.ID IN((SELECT * FROM featured_products))
    GROUP BY objects.ID
    

    【讨论】:

    • 这里的问题是您必须执行 3 个单独的查询或找到另一种方法(例如枚举或某事)来确定哪个 object_ID 属于哪个类......必须有更好的方法。请参阅我的帖子中的查询,也许它有效。
    • 我不喜欢“无自动增量”,对我来说听起来像是一个雷区:/。另外我使用 symfony2 和学说,最好有自动递增 id
    • 为什么这最适合您的框架?这不是雷区,如果您忘记获取对象 ID,它根本不会插入。很容易看到。 AI来自另一个表,没有区别。
    • 哦,对不起,我误解了你的回答,使用对象表是个好主意。但是实体表中的唯一标识符呢?我在考虑 UUID,但它并不真正需要是普遍唯一的,只需跨一个数据库......听起来更好吗?
    • 我不知道您的安全要求是什么。我不会在乎是否有人会“猜测”他进入汽车物体的方式......
    猜你喜欢
    • 2014-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-16
    • 1970-01-01
    相关资源
    最近更新 更多