Sql - косвенный внешний ключ

У меня есть несколько вопросов по поводу дизайна базы данных.

Есть ли имя для этого?Это хорошая практика?Какие-либо соображения производительности?

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

Недавно я изменил некоторые вещи, чтобы использовать эту общую структуру вместо прямых столбцов Fk, но теперь я не уверен, что это действительно лучшая идея.

Исходная схема:

 +------------------+       +---------------------+    +----------------------+
 | Book             |       | Note                |    | MetaParent           |
 |------------------|       |---------------------|    |----------------------|
 | Id               |       | Id                  |    | Id                   |
 | NoteId           |       | MetaParentId:(Null) |    | MetaTableId          |
 |                  +-------+                     +----+ KeyValue             |
 |                  |       |                     |    |                      |
 |                  |       |                     |    |                      |
 |                  |       |                     |    |                      |
 |                  |       |                     |    |                      |
 |                  |       |                     |    |                      |
 +------------------+       +---------------------+    +----------------------+

Новая схема

 +------------------+       +---------------------+    +----------------------+
 | Book             |       | Note                |    | MetaParent           |
 |------------------|       |---------------------|    |----------------------|
 | Id               |       | Id                  |    | Id                   |
 |                  |       | MetaParentId:(Null) |    | MetaTableId          |
 |                  +       +                     +----+ KeyValue             |
 |                  |       |                     |    |                      |
 |                  |       |                     |    |                      |
 |                  |       |                     |    |                      |
 |                  |       |                     |    |                      |
 |                  |       |                     |    |                      |
 +------------------+       +---------------------+    +----------------------+

Таким образом, в основном вместо прямой связи Fk между Book и Note у нас есть косвенная связь через таблицу MetaParent с использованием столбцов MetaTableId / KeyValue.

В настоящее время таблица MetaParent имеет около 500 тыс. Записей, и все работает приемлемо. Но мы перестраиваем индексы каждую ночь.

Меня беспокоит то, что теперь отношения между Книгой и Заметкой не очевидны. Вы должны знать, что он существует, и использовать таблицу MetaParent.

Кроме производительности, я не уверен, в какой момент у нас возникнут проблемы с объединениями из-за медленной работы MetaTableId / KeyValue. Кажется, чем больше вы добавляете в эту таблицу, тем медленнее получаются запросы.

Ответы на вопрос(1)

Ваш ответ на вопрос