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:

  1. Anstelle von zwei Tabellen (PostLike und TopicLike) erhalte ich „eine große Tabelle“ mit Likes.
  2. 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.

War es hilfreich?

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top