2016-10-20 14 views
0

私は約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回同じ必要ではない列は除外します。これは同じ列名を意味しますが、スペースを節約するためにデータが格納されます(ヌル値はありません)。

どのアプローチが良いでしょうか? それを行う別の方法がありますか?私はデータベース設計の初心者ではありません。

答えて

1

は、一般的に、我々は二つのテーブルに分割 - この呼び出されたデータベースの正規化:https://en.wikipedia.org/wiki/Database_normalization

特に、彼らは人々の二つの異なる種類の連絡先の詳細(例えば、顧客対が同じである場合は、列は、例えば、何らかの形で関係している場合はそう従業員)、その後に新しいテーブルに名前を付けることができます(たとえば、新しいデータベースはcontact_detailsなどと呼ばれます)。

基本的には、同じテーブルにすべてを保存することで、スペースや最適化のパフォーマンスなどを保存することはありません。あなたがやっていることは、自分や他の開発者が将来理解できるように、データをより混乱させることです。

また、作成する将来のクエリについて考えてみましょう。それぞれのクエリは、関連性のないデータを除外しなければならないため、すべてのクエリが複雑になります。別のテーブルに異なるものを保存し、理解しやすくするためにデータベースで何が起こっているのか+コード

+0

私は初心者です。それで、最初のテーブルと同じ15列を繰り返すことは重要ではありませんか?列名は同じですが、基本的に異なるデータであるため、列は2つの表の間で何らかの形で関連していません。 – ExpertLoser

+1

ああ、そうですが、列名が同じであっても問題ありません。データが異なる場合は、列名が同じであるため、同じ表を共有しないでください。それらを分けてください。 –

+2

:基本的には、同じテーブルにすべてを保存して、何も保存しない(スペースや最適化などはしない)。データを理解するために、自分や他の開発者がデータをもっと混乱させているだけです。また、作成する将来のクエリについて考えてみましょう。それぞれのクエリは関連性のないデータを除外しなければならず、すべてのクエリが複雑になります。データベース内で何が起こっているのかを一目でわかるように、異なるテーブルに異なるものを格納し、理解しやすくするために、コード –

関連する問題