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

使用するメモリが少ない単一の列に複数の値を格納するにはどうすればよいですか?

    ユーザーが複数の役割を持つことができる場合は、user_roleを使用することをお勧めします。 この情報を格納するテーブル。正規化されており、クエリがはるかに簡単になります。

    次のようなテーブル:

    user_id | role
    --------+-----------------
          1 | Admin
          2 | User
          2 | Admin
          3 | User
          3 | Author
    

    SELECT user_id, user.name FROM user_role JOIN user WHERE role='Admin'などの特定の役割を持つすべてのユーザーを照会できます。 列から詳細を取得するために文字列解析を使用する必要はありません。

    特に、列に適切にインデックスを付けることができ、複数の値を1つの列に入れるソリューションよりもわずかに多くのスペースを必要とするため、これは高速になります。これは、リレーショナルデータベースの設計とは正反対です。

    これを保存しない理由は、DCoderがコメントに記載しているため、非効率的であるためです。この回答 。ユーザーが役割を持っているかどうかを確認するには、ユーザーテーブルのすべての行をスキャンする必要があります。次に、文字列照合を使用して「役割」列をスキャンする必要があります。このアクションがどのように公開されているかに関係なく、RMDBSは次のことを行う必要があります。文字列操作を実行してコンテンツを解析します。これらは非常に費用のかかる操作であり、データベースの設計はまったく適切ではありません。

    必要の場合 単一の列を作成するには、技術的な問題は発生しませんが、人事管理の問題が発生することを強くお勧めします。 。開発中の既存のデータベースにテーブルを追加することは難しくありません。これが許可されていることではない場合は、適切な人に追加のテーブルが必要な理由を説明してください。 接続 1つの列に複数の値を入れるのは悪いことです。悪い アイデア



    1. パラメータの数/タイプを知らなくても機能を削除しますか?

    2. IN句の順序でmysql行を選択する方法

    3. group_concatを使用したクエリは、1行のみを返します

    4. SQLクエリデータをExcelにエクスポートする