私は約20列のテーブルを持っています。それはうまく動作し、他の多くのテーブルに関連していますが、それはうまく動作し、デザインは良いです。SQLテーブルは1つのテーブルまたは2つのテーブルを設計します
ここでは、ほぼ同じ列を持つ別の種類のデータを格納する必要がありますが、基本的に同じ15列ありますが、5列は完全に異なる2種類の です。それではどうすればいいですか 1.最初のテーブルに新しい列を追加することで、1つのテーブルに保存しますか(この方法では、保存するデータの種類によっては5つの列がnullになります)、または 2.分割します2つのテーブルと各テーブルよりも他のテーブルで繰り返される同じ列を持っている 3.いくつかの他の方法?
FIELD B1 FLOAT
FIELD B2 FLOAT
FIELD B3 FLOAT
FIELD B4 FLOAT
FIELD B5 FLOAT
この場合、私はタイプのデータを保存した場合:ONE同じテーブル内のSTORE
ID INTEGER
Description NVARCHAR(max)
Value FLOAT
ValueEUR FLOAT
ValueUSD FLOAT
YearOfBuilt SMALLINT
New BIT
Requirements NVARCHAR(max)
FIELD A1
FIELD A2
FIELD A3
FIELD A4
FIELD A5
FK_TypeID INT
私は上記の表に他のドキュメントタイプの5つの新しいフィールドを追加します -
COLUMNS CASE 1 1 保存されたフィールド値はnull、列番号FIELD B1
、... FIELD B5
となります。 これはうまくいくかもしれませんが、タイプによってはいくつかのフィールドが空である場合もあります。
または私は2
以下COLUMNSケース2の場合のように、テーブルのデザインを作るのですか - 同じ列を繰り返すが、列がない除く - 二つのテーブル
表1
ID INTEGER
Description NVARCHAR(max)
Value FLOAT
ValueEUR FLOAT
ValueUSD FLOAT
YearOfBuilt SMALLINT
New BIT
Requirements NVARCHAR(max)
FIELD A1
FIELD A2
FIELD A3
FIELD A4
FIELD A5
FK_TypeID INT
表2にSTOREこのテーブルに必要です
ID INTEGER
Description NVARCHAR(max)
Value FLOAT
ValueEUR FLOAT
ValueUSD FLOAT
YearOfBuilt SMALLINT
New BIT
Requirements NVARCHAR(max)
FIELD B1 FLOAT
FIELD B2 FLOAT
FIELD B3 FLOAT
FIELD B4 FLOAT
FIELD B5 FLOAT
FK_TypeID INT
この場合、2回同じ必要ではない列は除外します。これは同じ列名を意味しますが、スペースを節約するためにデータが格納されます(ヌル値はありません)。
どのアプローチが良いでしょうか? それを行う別の方法がありますか?私はデータベース設計の初心者ではありません。
私は初心者です。それで、最初のテーブルと同じ15列を繰り返すことは重要ではありませんか?列名は同じですが、基本的に異なるデータであるため、列は2つの表の間で何らかの形で関連していません。 – ExpertLoser
ああ、そうですが、列名が同じであっても問題ありません。データが異なる場合は、列名が同じであるため、同じ表を共有しないでください。それらを分けてください。 –
:基本的には、同じテーブルにすべてを保存して、何も保存しない(スペースや最適化などはしない)。データを理解するために、自分や他の開発者がデータをもっと混乱させているだけです。また、作成する将来のクエリについて考えてみましょう。それぞれのクエリは関連性のないデータを除外しなければならず、すべてのクエリが複雑になります。データベース内で何が起こっているのかを一目でわかるように、異なるテーブルに異なるものを格納し、理解しやすくするために、コード –