Einzeltabellenvererbung (mit Ebean + Play!Rahmen)
-
11-12-2019 - |
Frage
Ich verwende das Konzept von single table inheritance
natürlich aus OOP-Überlegungen.
Zum Beispiel, PostLike
Und TopicLike
geerbt von Like
Klasse.
Ich sehe zwei Probleme bei dieser Methodik:
- Anstelle von zwei Tabellen (PostLike und TopicLike) erhalte ich „eine große Tabelle“ mit Likes.
- Diese Tabelle hat eine zusätzliche Spalte namens dtype Dies ermöglicht die Identifizierung von Datensätzen (d. h.Art von Like).auf lange Sicht könnte es sein eine riesige Verschwendung Speicherplatz.nicht wahr?
Ich bin kein DB-Experte und wollte daher Ihre Erkenntnisse über dieses Datenbankdesign und die Frage, ob diese beiden Probleme von entscheidender Bedeutung sind, einholen.
Lösung
Wenn Sie nur eine statt zwei Tabellen haben, sind die Lesevorgänge schneller, da Sie „Joins“ vermeiden.Sie benötigen jedoch mehr Platz, da Sie über eine zusätzliche „dtype“-Spalte und einige leere Spalten verfügen.
Nehmen wir ein Beispiel.Hier ist das Modell (ohne die JPA-Anmerkungen):
public abstract class Like {
public Long id;
public String foo;
}
public class PostLike extends Like {
public String post;
}
public class TopicLike extends Like {
public String topic;
}
Du bekommst den Tisch Like
:
----------------------------------
|dtype | id | foo | topic | post |
----------------------------------
|post | 1 | a | NULL | p1 |
|topic | 2 | b | t1 | NULL |
----------------------------------
Und wie Sie sehen, haben Sie für ein „PostLike“-Element einen NULL-„Themen“-Wert.
Aber heutzutage ist der Speicherplatz kein wirkliches Problem mehr.
Der einzige Fehler, den ich bei der Vererbung einzelner Tabellen sehe, ist die Anzahl der Spalten, die sehr groß sein kann, wenn Sie viele Eigenschaften haben, und es ist schwieriger, Ihrem Modell eine neue Eigenschaft/Spalte hinzuzufügen (wenn Sie eine DB-Entwicklung anwenden müssen). .
Und AFAIK, ebean unterstützt nur „Einzeltabellenvererbung“.