Есть ли способ иметь таблицу со значениями, которые ссылаются на сами столбцы другой таблицы? - PullRequest
0 голосов
/ 26 января 2020

У меня есть база данных, в которой данные о пользователях хранятся в таблице, которая выглядит следующим образом

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

, т.е. с использованием обычной модели реляционной базы данных.

Если я вместо этого переключился на EAV В модели для хранения вышеуказанных данных сами столбцы (называемые атрибутами в EAV) будут храниться в таблице и иметь уникальный идентификатор столбца (атрибута): s. Преимущество этого состоит в том, что я мог бы использовать эти идентификаторы: в другой таблице для подключения данных к самим столбцам , например, скрыт ли столбец или показан в пользовательском интерфейсе пользователя (ниже также используется модель EAV). ):

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

Однако я хотел бы придерживаться модели реляционной базы данных для таблицы пользовательских данных (таблица показана сначала), так как в противном случае запросы становятся намного медленнее, но я все равно хотел бы подключиться значения для столбцов, как я мог бы, если бы я использовал модель EAV.

Есть ли способ иметь таблицу, которая хранит данные о самих столбцах таблицы пользовательских данных строгим образом?

1 Ответ

0 голосов
/ 27 января 2020

Самая простая реализация 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         |
...