【问题标题】:Link another table based on a column value根据列值链接另一个表
【发布时间】:2019-11-25 09:51:50
【问题描述】:

您好,我正在使用 MySQL 和 Squalize ORM (NodeJS) 设计项目目录。

假设我有一个产品列表,该列表具有基于其类别的不同属性(在本例中为attributes_id)。 我想通过使用带有适当属性表的 JOIN 语句来获得产品。设计应该是可扩展的,因为我们将拥有一百多个属性表。

语句大致如下所示:

 JOIN
   if ( product.attributes_id == 1 ) 'attributes_car'
   elseif ( product.attributes_id == 2 ) 'attributes_food'

但是elseif 案例的数量会在以后增长到一百多个。

那么问题是如何设计attributes_id?让它成为数据库元数据(如 INFORMATION_SCHEMA)的外键以指向另一个表是个好主意吗?我应该引入另一个表来管理这种关系吗?

其中一个选项是动态 SQL,但我认为这不是一个好主意,因为 ifelse 案例应该会增加。

或者我应该放弃设计查询,只使用 ORM 在 NodeJS 端实现这样的逻辑?

谢谢!

【问题讨论】:

  • EAV models 并不是特别强大的 SQL 套件。

标签: mysql orm entity-attribute-value


【解决方案1】:

一种解决方案是创建一个存储attribute_idtable_name 的附加表。

    Create table attibute_tablename(
    attribute_id int(11),
    table_name varchar(25),
    PRIMARY KEY (attribute_id, table_name)
    )

如果需要,您还可以向product 表添加外键。 然后,您只需为添加的每个新项目插入此表

【讨论】:

    猜你喜欢
    • 2017-05-26
    • 1970-01-01
    • 2020-04-07
    • 2021-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多