Mysql
 sql >> Datenbank >  >> RDS >> Mysql

So speichern Sie eine Doctrine-Entität in zwei Datenbanktabellen (erforderlich für die MySQL-Optimierung)

Ich werde einen anderen Ansatz vorschlagen, obwohl es eine etwas ältere Frage ist. Anstatt zwei Einheiten zu erstellen, sollten Sie drei erstellen.

Erstellen Sie FileMetadata, das Name, Mimetyp usw. enthält. Erstellen Sie FileContent, das den Inhalt enthält. Erstellen Sie dann eine dritte Entitätsdatei, die eine Eins-zu-Eins-Verbindung mit einem der anderen Typen enthält, und geben Sie ihr eine Reihe von Methoden, die einfach die übereinstimmenden Methoden für die untergeordneten Entitäten aufrufen.

In File würde die setName-Methode beispielsweise so aussehen:

  public function setName() {
    $this->getFileMetadata()->getName();
  }

Und set würde so aussehen:

  public function setName( $name ) {
    $this->getFileMetadata()->setName( $name );
  }

Der Konstruktor der File-Entität sollte bei der Erstellung ein neues FileMetadata und einen neuen FileContent erstellen und sollte KEINE setFilemetadata- oder setFilecontent-Methode haben; diese beiden Entitäten sollten vollständig von Ihrer Anwendung abgeschirmt werden.

Jetzt haben Sie die File-Entität, die sich genau so handhabt, wie Sie es möchten (eine einzelne Entität, keine zusätzlichen Unterentitäten), die immer noch ordentlich in zwei (naja, eigentlich drei) verschiedenen Tabellen gespeichert ist.