web-dev-qa-db-ja.com

ここでJSONデータ型を使用することは適切ですか?

私はMySQL 8.0を使用していて、2つの列int UserIDとtinyint GroupIDを持つACLテーブルがあります。どちらも複合主キーを形成します。ユーザーは多くのグループに所属できますが、そのようなグループ(管理者、モデレーターなど)を持っているユーザーはごくわずかです。ログイン時にユーザーのACLグループを取得する必要がありますが、そのため、ユーザーテーブルとACLテーブルの2つのSELECTクエリを実行する必要があります。

ACL table exampleUser table example

GroupIDのデータ型をJSONに変更し、ユーザーのすべてのグループIDを1つのフィールドに格納するのは良い選択でしょうか?次に、INNER JOINを使用して、1つのクエリですべての必要なデータを取得し、UserIDがACLテーブルの主キーになります。そのような構造またはおそらくより良い解決策に欠点はありますか?私は主にGroupIDフィールドでSELECT操作を使用するつもりですが、UPDATEとINSERTはほとんど使用されません。

2
user3757605

ユーザーIDの単一のインデックスを使用すると、簡単かつ迅速にグループをリクエストし、グループからsimlpyユーザーも削除できます。

それはすべてjsonで可能ですが、はるかに多くのコードを必要とするため、さらに多くの問題を引き起こす可能性があります。

アプリケーションでそれを必要とせず、あまり変更しない限り、jsonは大量のデータを格納するのに適していますが、それもxmlです。

1
nbk

見て、たぶんそれはあなたが必要とするクエリですか?

SELECT `UserName`, 
       `Score`, 
       GROUP_CONCAT(`GroupID` ) groups_csv,
       CAST(CONCAT('[', 
                   GROUP_CONCAT(`GroupID` ), 
                   ']') AS JSON) groups_json_array
FROM `User` 
INNER JOIN `ACL` ON `User`.UserID = `ACL`.UserID 
WHERE `User`.UserID = 1
GROUP BY `UserName`, `Score`;
0
Akina