【问题标题】:Is there a way to have a table with values that references the columns themselves of another table?有没有办法让一个表的值引用另一个表的列本身?
【发布时间】:2020-01-26 19:54:01
【问题描述】:

我有一个数据库,其中有关用户的数据存储在一个看起来像这样的表中

|_firstname_|_lastname_|_age_|...
|   John    | Johnson  |  21 |...
...

即使用普通的关系数据库模型。

如果我改用 EAV 模型来存储上述数据,列(在 EAV 中称为属性)本身将存储在一个表中,并且将具有唯一的列(属性)ID:s。这样做的好处是我可以在另一个表中使用这些 ID:将数据连接到列它们自己,例如该列是隐藏还是显示在用户 UI 中(下面也使用 EAV型号):

|____column_id____|___attribute___|___value___|
| <firstname_id>  |    hidden     |   false   |
| <lastname_id>   |    hidden     |   false   |
|    <age_id>     |    hidden     |   true    |
...

但是,我想坚持用户数据表(首先显示的表)的关系数据库模型,否则查询会变得慢很多,但我仍然想像我一样将值连接到列我将使用 EAV 模型。

有没有办法让一个表以严格的方式存储有关用户数据表的列本身的数据?

【问题讨论】:

  • 你打算用纯mysql来使用你的数据库还是用另一种语言php、java...?

标签: mysql relational-database database-schema entity-attribute-value


【解决方案1】:

EAV 的最简单实现可能只有三个表:实体、属性和值。此处显示了此设置的示例:

所以你的桌子可能看起来像:

|attribute_id| name       | is visible |
|10          | firstname  | 1          |
|11          | lastname   | 1          |
|12          | age        | 0          |

|entity_id  | entity_name |...
|1          | person1     |
|2          | person2     |

|row_id |attribute_id| entity_id | entity_id  |
|155    |10          | 1         | John       |
|156    |11          | 1         | Doe        |
|199    |12          | 1         | 28         |
|....    ....         ....        ....
|255    |10          | 2         | Ali        |
|256    |11          | 2         | Smith      |
|279    |12          | 2         | 25         |

【讨论】:

  • 谢谢你的回答,但恐怕你误解了我的问题。我知道如何切换到 EAV 模型来存储用户数据,但我不想这样做,因为这会使查询变得非常慢。我的问题是,如果我使用关系数据库模型,是否有办法在另一个表中存储列的“属性”(例如隐藏:真/假属性)。
  • 是的,我可以看到你编辑问题后的区别,现在更清楚了......
猜你喜欢
  • 2020-07-21
  • 2021-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多