0

mysqlデータベースで複数の列を使用するよりも、jsonでエンコードされているか、シリアル化されているかなど、ある種のシリアル化されたデータを使用する方がよいかどうか疑問に思いました。

例:「users」テーブルがある場合、通常、一部の列はid、fullname、username、email、passwordなどになります。

しかし、これらすべての列を使用する代わりにjsonデータを使用した場合はどうなりますか。dbテーブル(id、data)で2列だけを使用できますか?だから私はphpでこのようなことをすることができます:

json_encode(array('username' => $_POST['username'], 'password' => md5($_POST['password'])));

次に、jsonでエンコードされた配列を保持する「データ」の列を持つテーブルに挿入します。

スクリプトの後半で、「データ」列を取得して使用することができますjson_decode($stuff_from_db, true)

これがばかげた質問である場合は申し訳ありませんが、mysqlやそのスケーリングなどについてはあまり詳しくありません。しかし、これが良いアイデアか悪いアイデアかを知りたいと思います。

ありがとう

4

4 に答える 4

1

いいえ、それは良い考えではなく、それはRDBMSからリレーショナルを取り除くでしょう。最初に各行の結果を解析する必要がなければ、テーブルから何かをすばやくクエリすることはできません。小規模ではこれで問題ありませんが、データを保存するためにこれを念頭に置いていれば、MySQLは使用するデータベースにはなりません。

シリアル化またはJSONによるエンコードを使用してデータベースを保存した場合、データベースから次のものを取得しようとしていると想像してください。

名が「John」のユーザーの数を取得する

于 2012-07-20T02:09:40.407 に答える
1

あなたはそれを行うことができますが、あなたのデータはもはやアトミックではないので、それは非常に悪い設計になります。テーブルをスキャンする必要があるため、検索には適していません...

于 2012-07-20T02:09:49.523 に答える
1

はい、それは悪い考えです。WHEREクエリやクエリのように、このようなデータベースを操作するのは本当に非効率的です。JOINおそらくそうすることは不可能です

また、JSONエンコードされたデータベースから情報を取得するAPIを作成する場合は、JSONエンコードされたデータをXMLなどに変換するためにさらに多くのコード行が必要になります。

ちょっとしたことですが、表示するフルネームなど、特定の情報が必要な場合は、ユーザーに関するすべての情報を選択する必要がありますが、これも非効率的です。

于 2012-07-20T02:14:36.267 に答える
0

特定の種類のデータでは、機能する可能性があります。しかし、あなたが与えた例では、それはあまり良い考えではありません。jsonまたはシリアル化された値として保存すると、検索できなくなります。

次のクエリを適切に実行するにはどうすればよいですか

Select * from <table_name> where user_name="<user_name>"

ワイルドカード検索が可能であると主張することができます。しかし、私はそれをしません。

また、正しいシナリオがある場合は、シリアル化された値の代わりにjsonを保存する必要があると思います。シリアル化された値を保存する場合、それらが存在する場合、他のシステムは、それらが異なる言語で記述されているため、この値と対話できません。

于 2012-07-20T02:10:23.660 に答える