sql >> データベース >  >> RDS >> Mysql

1つのDoctrineエンティティを2つのデータベーステーブルに保存する方法(MySQLの最適化に必要)

    少し古い質問ですが、別のアプローチを提案します。 2つのエンティティを作成する代わりに、3つのエンティティを作成する必要があります。

    名前、mimetypeなどを保持するFileMetadataを作成します。コンテンツを保持するFileContentを作成します。次に、他の各タイプの1つと1対1の接続を保持する3番目のエンティティファイルを作成し、サブエンティティの一致するメソッドを呼び出すだけの一連のメソッドを指定します。

    したがって、たとえばFileの場合、setNameメソッドは次のようになります。

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

    セットは次のようになります:

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

    Fileエンティティのコンストラクターは、作成時に新しいFileMetadataと新しいFileContentを作成する必要があり、setFilemetadataまたはsetFilecontentメソッドを持たないようにする必要があります。これらの2つのエンティティは、アプリケーションから完全に保護する必要があります。

    これで、Fileエンティティができました。これは、2つ(実際には3つ)の異なるテーブルに適切に格納された、希望どおりに処理されます(単一のエンティティ、追加のサブエンティティはありません)。



    1. MySQLフィールドの「スペース」の後のすべてを削除することは可能ですか?

    2. レプリケーションが不可能な2つの異なる独立したネットワーク間で、同じ名前とデータベース名を持つ特定のテーブルを同期するにはどうすればよいですか?

    3. n行を選択する方法

    4. PDOデータベース接続による簡単なCRUD操作