Sql - pośredni klucz obcy

Mam kilka pytań dotyczących projektowania baz danych.

Czy istnieje jakaś nazwa?Czy to dobra praktyka?Jakieś względy wydajności?

Mam ogólną strukturę tabeli używaną do przechowywania relacji.

Niedawno przerobiłem niektóre rzeczy, aby użyć tej ogólnej struktury zamiast bezpośrednich kolumn Fk, ale teraz nie jestem pewien, czy to był naprawdę najlepszy pomysł.

Oryginalny schemat:

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

Nowy schemat

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

Tak więc zamiast bezpośredniego powiązania Fk między Book i Note mamy pośrednią zależność za pomocą tabeli MetaParent, używając kolumn MetaTableId / KeyValue.

Obecnie tabela MetaParent ma około 500 tys. Rekordów i wszystko działa poprawnie. Ale co noc odbudowujemy indeksy.

Moje obawy dotyczą tego, że związek między książką a notatką nie jest oczywisty. Musisz wiedzieć, że istnieje i korzystać z tabeli MetaParent.

Również wydajność, nie jestem pewien, w którym momencie pojawią się problemy z połączeniami z działającymi zbyt wolno MetaTableId / KeyValue. Wydaje się, że im więcej dodasz do tej tabeli, tym wolniejsze będą zapytania.

questionAnswers(1)

yourAnswerToTheQuestion