有没有一种方法可以使一个表的值引用另一个表的列本身?

时间:2020-01-26 19:54:01

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

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

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

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

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

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

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

有没有一种可以严格存储用户数据表中各列数据的表?

1 个答案:

答案 0 :(得分:0)

最简单的EAV实现可能只有三个表:实体,属性和值。此设置的示例如下所示:

screenshot of EAV showing three tables: entity, attribute and value

,因此您的表可能如下所示:

|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         |