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

別のテーブルの行からSQL結果列に名前を付けることは可能ですか? (Postgres)

    これは、主な誤解に基づいています PostgresとEAVデザイン の内部動作の概要 。

    何百もの異なるフィールドや属性タイプの動的なセットがない場合は、すべての列を含む単一のテーブルを使用してください -データベースの正規化 を除く 。値のない列はNULLで埋められます 。
    ヌルストレージは非常に安い1ビットを占める nullビットマップのテーブルの列ごと。通常、64列をカバーするために8バイト単位で割り当てられます。参照:

    シングルの別の行 追加の属性は少なくともを占めます 追加の36バイト

    4  bytes item identifier
    23 bytes heap tuple header
    1  byte  padding
    8  bytes minimum row data size
    

    通常、パディングと追加のオーバーヘッドのために、それ以上になります。

    このような扱いにくいEAV設計が支払う前に、何百もの異なる、まばらに入力された列が必要になります-そして hstore または jsonb Postgres 9.4では、の優れたソリューションになります。 。デザインの間にスペースはほとんどありません。if おそらく、 enum> タイプについて。

    同時に、クエリはより複雑で費用がかかります。ここは厳しい状況にあります。

    代わりに、次のようなテーブルレイアウトを使用してください:

    CREATE TABLE users (
       users_id serial PRIMARY KEY
     , salutation text
     , given_name text
     , surname text
     , alias text
     ... (many) more columns
    );
    
    CREATE TABLE address (
       address_id serial PRIMARY KEY
     , users_id int REFERENCES users
     , city text  -- or separate TABLE city incl region_id etc. ...
     , region_id int REFERENCES region
     , address  text
     ... (many) more columns
    );
    

    より多くのアドバイスを伴う密接に関連した回答:



    1. mysqlタイムスタンプを実際の日付と時刻に変換しますか?

    2. ユーザー'www-data'@'localhostのアクセスが拒否されました-これに対処するにはどうすればよいですか?

    3. SQL Server2008R2のインスタンスにリモートでアクセスできません

    4. 多次元配列クエリmysql