sql >> Database teknologi >  >> RDS >> Mysql

Sådan gemmer du en Doctrine-entitet i to databasetabeller (påkrævet for MySQL-optimering)

Jeg vil foreslå en anden tilgang, selvom det er et noget ældre spørgsmål. I stedet for at lave to enheder, bør du lave tre.

Opret FileMetadata, som indeholder navn, mimetype osv. Opret FileContent, som indeholder indholdet. Opret derefter en tredje enhedsfil, som har en en-til-en forbindelse med en af ​​hver af de andre typer, og giv den en masse metoder, der blot kalder matchningsmetoderne på underentiteterne.

Så for eksempel i File, ville setName-metoden se sådan ud:

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

Og sæt ville se sådan ud:

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

Konstruktøren af ​​File-entiteten skal oprette en ny FileMetadata og et nyt FileContent ved oprettelse og bør IKKE have en setFilemetadata- eller setFilecontent-metode; disse to enheder bør være fuldstændig afskærmet fra din ansøgning.

Nu har du Fil-enheden, som håndterer præcis, som du ønsker (en enkelt enhed, ingen yderligere underentiteter), som stadig er gemt pænt i to (nå, tre virkelig) forskellige tabeller.



  1. hvordan man strukturerer data for søgbarhed

  2. Kan der eksistere flere primære nøgler på et enkelt bord?

  3. Millisekunder forkert ved konvertering fra XML til SQL Server datetime

  4. Genialt SQL Password Changer Utility til at nulstille SQL Password