2017-08-19 4 views
1

私はリレーショナルデータ(整数)を保存します。 各整数は、外来列を表し:配列内のリレーショナルデータ?

system table: 
| id | c1 | c2 | c3 | ... | c15 | 
|----|-----|-----|-----|-----|-----| 
| 21 | 2.2 | 2.4 | 2.6 |  | 5.0 | 
|----|-----|-----|-----|-----|-----| 


collections table: 
| id | sytemId | collection | 
|----|---------|----------------| 
| 8 |  21 | [1,3,6,4,2] | // c1,c3,c6,c4,c2 
| 9 |  21 | [12,8,10,7,11] | // c12,c8,c10,c7,c11 

配列項目の順序が重要です。 コレクションを検索する必要はありません(まだ)。システムオブジェクトがロードされると、コレクションテーブル内の関連するすべてのエントリがフェッチされ、アプリケーション(php)で処理されます。

今私は、これはこれを実装するための適切な方法であるかどうかを知りたい または私は、ルックアップテーブルを使用する必要がありますでしょうか?これが最善の方法である場合は、 "コレクション"のための最良のデータ型は何でしょうか? JSON?

敬具

+0

それは簡単です:あなたはこれをしたい場合は、RDBMSを使用しないでください。 – Strawberry

+0

MySQL 5.7.9以降を使用している場合は、JSONデータ型を使用してJSON配列として格納できます。 – LeonanCarvalho

+2

参考にするには、もう少しの背景が必要です。私はあなたが達成しようとしていることを理解しているとは思わない。また、あなたがすでに試したこと、なぜ/あなたがあなたがついていると思っているのかを教えてください。 – Arminius

答えて

0

今、私は、これはノー、ノー、ノー千回をこの

を実装するための適切な方法であるかどうかを知りたいです。

または私は、ルックアップテーブルを使用する必要がありますか?

はい。このデータを正規化する必要があります。 MySQLは、あなたがこのようなものの関係にこれらの多くを保存する場合は、リレーショナル・データ管理システムの利点のほとんどを倒すよ、JSONデータを格納するための方法を提供していますにもかかわらず

+0

一般的には、アプリケーションのニーズ、パフォーマンス、スケーラビリティなどを考えていますが、この確認は絶対的な真実ではありません。 – LeonanCarvalho

0

外箱の答え。

は、あなたのアプリケーションのニーズに焦点を当てて、リレーショナル・データ、ルール、モデル、などについて考えてはいけません。 MySQLで

JSONデータ型アーキテクチャハイブリッドモデルに、RDBMSモデルに柔軟性をもたらすことができます。 MySQLでは、ドキュメント指向のNoSQLデータベース全体をエミュレートすることができますが、negate many benefits of SQLとなり、実際のNoSQLシステムに切り替えることもできます。つまり、JSONデータ型は、SQLベースのアプリケーション内のデータ要件が不明確になるために、いくらかの労力を節約することができます。 MySQLの5.7.8のよう

、MySQLはJSON(JavaScriptの オブジェクト表記)ドキュメント内のデータへの効率的なアクセスを可能にします RFC 7159によって定義されたネイティブのJSONデータ型をサポートしています。 JSONデータ型は、JSON形式の文字列を文字列に格納する場合に比べて、 の利点を提供します。

あなたはこのデータは

JSONドキュメントを格納するために必要なスペースになる可能性がどのようなサイズをカウントに取る必要がありますが、ほぼ LONGBLOBまたはLONG​​TEXTの場合と同じです。 JSON列に格納されているJSONドキュメントのサイズ は、システム変数max_allowed_packetの値 に制限されています。 (サーバが の場合、メモリ内でJSON値を内部的に操作すると、これは より大きい可能性があります;サーバがそれを格納するときに制限が適用されます。)

DBのJSON関数を使用して検索し、使用する必要がある場合は、JSONデータ型を使用する必要があります。

DB JSON関数を使用してこの情報を格納するだけで操作する必要がない場合は、JSONデータ型を使用しないでください。単純なテキストフィールドを使用できます。

このデータで何ができるかわからない場合は、JSON形式を使用しないで、リレーショナルと正規化されたデータモデルを使用してください。 JSON値フィールドは索引付けできません。

さらに詳しい情報:https://dev.mysql.com/doc/refman/5.7/en/json.html