2017-05-11 18 views
0

私のリレーショナルデータベースでは、ユーザーに関する詳細情報(firstName、、email ...)を保存したいと考えています。つまり、私はUsersテーブルを持っていることを意味します。リレーショナルデータベースの動的値と複数値

これらのフィールドは将来変更できます(追加/削除することができます)。一部のユーザーにはemailがない場合があります。

このデータは、何らかの形で送信されたときにユーザーから収集されます。

たとえば、ユーザーが最初に入力したフォーム(「マイク」、「マイク」、「マイケル」、「マイケル」など)を何回保存できるようにしたいのですか?彼らはそのようにそれを入力しました。

オプション:私のUsersテーブルで

  1. は、例えば{"Mike": 5, "Michael": 3}(各文字列のエンコードされたJSONオブジェクトを格納し、複数のカラム/フィールドを持っていることは明白な理由のために悪いです
  2. 一にして、別のテーブルを追加します。 -many各レコードには外部キーとしてuserIdが格納され、タイプはfirstNameです。これは、フィールドごとにテーブルを作成(または削除)することを意味するため、不適切です。
  3. 可能なすべてのフィールド/を保存します外部キーとしてと、そのユーザーに入力されたデータ。

私は、リレーショナルデータベースでそれを達成するためのよりよい方法があるのか​​、それとも非リレーショナルデータベースに切り替えるための転換点なのかを理解しようとしています。

+1

なぜそれが必要なのか、どのように使用するのかによって異なります。また、ほとんどのSQLデータベースはjsonのサポートをいくつか持っているので、#1の*悪い理由*は私にはあまり明らかではありません。 –

答えて

1

リレーショナルデータベースにいくつかの制限がある場合は、BLOB/CLOBという1つの列にJSONを格納できるので、データベースの動的変更を管理することができます。 しかし、状況に応じて、非リレーショナルデータベースは要件に適しています。必要に応じて任意の数の列を追加または削除できます。