【问题标题】:MySQL: how to convert to EAV?MySQL:如何转换为 EAV?
【发布时间】:2011-10-24 15:22:59
【问题描述】:

假设我有下表:

TABLE: one
===============================
| id | first_name | last_name |
===============================
| 1  | John       | Doe       |
| 2  | Jane       | Smith     |
-------------------------------

我想将其转换为 EAV:

TABLE: two
===================================
| id | fk_id | attribute  | value |
===================================
| 1  | 1     | first_name | John  |
| 2  | 1     | last_name  | Doe   |
| 3  | 2     | first_name | Jane  |
| 4  | 2     | last_name  | Smith |
-----------------------------------

注意:

  • 两个.fk_id 值来自一个.id
  • two.attribute 值来自 one.first_name
  • two.value 值来自 one.last_name

我需要从表一创建表二,以便运行一些测试。

【问题讨论】:

    标签: mysql database database-design entity-attribute-value


    【解决方案1】:

    我假设 two.id 是一个自动递增的整数,所以我将把它留给目标表来分配这些值。

    select id as fk_id, 'first_name' as attribute, first_name as value
    from one
    union all
    select id as fk_id, 'last_name', last_name
    from one
    order by fk_id, attribute
    

    【讨论】:

      【解决方案2】:

      看在上帝的份上,不要使用 EAV!!!! 如果需要,请改用 NoSQL 数据库!

      【讨论】:

      • 对不起,这不是关于 EAV 优缺点的问题。我只需要知道如何将表一转换为表二。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-06
      • 1970-01-01
      • 1970-01-01
      • 2021-12-10
      • 2021-05-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多