2011-07-05 6 views
1

内の値を持つ配列を格納する私は、私は(これは、サードパーティのAPIを介してテキストメッセージを送信するために使用される)私のDBに保存する以下のデータがデータベース

text_id, text_message, text_time, (array)text_contacts 

text_contactsは、すべての通常の配列が含まれていますcontact_id

データをMySQLデータベースに正しく保存するにはどうすればよいですか? 私は自分自身が2つの方法のいずれかを考えていた:

  1. json_encodedでcontact_id年代の配列(それは多次元ではありませんので、シリアル化する必要はありません)文字列を作成し、DB
  2. にテキストフィールドに格納します をいつでも変更する必要はありませ text_contacts配列に格納されたデータを行います。

ノート .. text_idと新しい行のすべてのcontact_id年代に第二のテーブルを作成します。注2

:データは(text_id、及びPHONENUMBERの組み合わせ)

..コンタクトから電話番号を取得し、テキストメッセージが実際に送信されたかどうかを確認するために、個々のcontact_idとして使用されますより効率的なのはなぜ?

+0

upvote同じ行のjson配列として保存します。 –

答えて

3

これは、使用する特性に完全に依存します。近いうちにcontact_idに基づいて照会する必要がある場合は、2番目のソリューションと同様に独立して保管してください。アーカイブ目的でそれらを保存していて、それらを動的に使用することを期待していない場合は、時間を節約してJSON文字列に保存することもできます。使い方についてはすべてです。

1

IMO、text-idsをcontact-idsにマッピングする2番目のテーブルを参照してください。すべての連絡先を1つのフィールドに保存するよりも扱いやすくなります

+0

ポイントは、配列のデータを変更する必要は全くありません。 – Sander

+0

yaですが、連絡先IDが与えられていて、何らかの操作をしたいと言うと、2番目のテーブルで行う方が簡単です。しかしこれは純粋にあなたの要求に依存しています。 – Balanivash

1

このトピックではかなりの意見がありますが、私の考え:第2のテーブル、是非。

  1. 実際にデータで検索する必要がある場合は、使用する前に解析する必要はありません。
  2. 同じ理由でデバッグするのがずっと簡単です
  3. json_encodeとjson_decode(または同等のもの)は、結合よりもはるかに時間がかかります。
  4. ほとんどの場合、必要でない場合でも遅延読み込みは簡単です。
  5. 他の人は、より読みやすく、スキーマの定義が良好で、概念化や管理が容易です。
1

ほとんどすべての実装では、各text_contactsを格納するために1つのテーブルを使用し、次に2番目のテーブルはtext_contactsテーブルを参照するために外部キーを使用します。だから、あなたはこのように見えたテーブルtext_contactsを持っていたと言う場合:

contact_id | name 
    1  | someone 
    2  | someone_else 

そして、このように見えたテキストメッセージテーブル:

text_id | text_message | text_time | text_contact 
    1  | "Hey"  | 12:48 |  1 
    2  | "Hey"  | 12:48 |  2 

メッセージを送ってきた各連絡先は新しいを持っているでしょう最後の列はtext_contactsテーブルのcontact_idフィールドを参照します。この方法では、特定のユーザーから送信されたメッセージを見つけるために、単一のテーブルの各配列を検索するのではなく、 "select * from text_messages where text_contact = 1"と言うことができるので、連絡先ごとにメッセージを取得する方がはるかに簡単です。

関連する問題