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

Postgres:多対多vs.複数列vs.配列列

    ここでは、多対多の関係が唯一の実行可能なオプションです。彼らがそれをリレーショナルデータベースと呼ぶのには理由があります。

    なんで?

    • 結合は実際にはそれほど高価ではありません。
    • 複数の列-テーブルの列の数はludicrisになり、真の開発者の地獄になります。各機能が移行を追加すると、コードベースのチャーンの量はばかげています。
    • 配列列-配列列を使用することは、実際にはコンマ区切りの文字列に詰め込むよりもわずかに改善されていることに気付くまで、魅力的な代替手段のように思えるかもしれません。参照の統合性はなく、アプリケーション内のエンティティを表すモデルを持つことによるコード編成のメリットもありません。
      ああ、機能がヤンクされるたびに、50万人以上のユーザー全員を更新する必要があります。 CASCADEを使用するだけのVS。
    class Feature
      has_many :user_features
      has_many :users, through: :user_features
    end
    
    class UserFeature
      belongs_to :user
      belongs_to :feature
    end
    
    class User
      has_many :user_features
      has_many :features, through: :user_features
    
      def has_feature?(name)
        features.exist?(name: name)
      end
    end
    



    1. MySQLのスキーマ/データベースの違い

    2. カスタムクエリ(結合テーブル)からのデータをliferay検索コンテナに表示する

    3. MySQLテーブルの各行にPHPで削除ボタンを追加する

    4. 2つの可能性のセットで一意の行を選択する