2017-10-24 11 views
0

データベースには多くのテーブルがあり、それぞれに1つまたは2つのフィールドがあります。これは私のデータベースサイズを増やしているので、すべてのDATEフィールドを1つのテーブルに格納し、すべてのテーブルに関係を追加することを考えています。それは可能なのか良いアイデアかどうか?すべての日付を1つのテーブルに格納

My database, example: 
Old design 
tblCustomer = > CustomerID, Surname, Name,  DateFirstVisit, DateStopped 
tblOrder  = > OrderID, CustomerID, DateOrder, Order,   DateShiped 
tblPayment = > PaymentID, CustomerID, DatePayment, Price,   DateCheck 


New design 
tblCustomer = > CustomerID, Surname, Name,  DateInID, DateOutID 
tblOrder  = > OrderID, CustomerID, DateInID, Order,  DateOutID 
tblPayment = > PaymentID, CustomerID, DateInID, Price,  DateOutID 
tblDateIn = > DateInID, DateIn 
tblDateOut = > DateOutID, DateOut 

tblDateInとtblDateOutを組み合わせることはできますか?

+3

それはあまり意味がない - あなたはまだ日付を格納しているでしょう、そして、あなたはそれらのテーブルをあなたの他のテーブルに何度も参加させなければなりません。 OrderDateはordersテーブルに属し、支払日はpaymentテーブルに属します。あなたのデータベースはどれくらいの大きさを心配していますか? – Minty

+1

_可能ですか?_はい。 _良いアイデアかどうか?_できません。おそらく、これはそうではない非常に特別な場合を除いて、おそらく例外です。 – Gustav

答えて

2

技術的には、はい、あなたはさらに、このようにデータベースを正規化することができます...ありがとうございます。あなたはこれまで、日付を持つDateテーブルを持ってDateIDを参照してそれらの日付を使用することができますが、これは過正規化です。

毎回日付テーブルに参加する必要があるため、単純なクエリをさらに複雑にするだけでなく、多くのスペースを節約して、より多くのスペースを使用する可能性があることがわかります。 Accessが何を使用しているかはわかりませんが、日付は通常、10進数の値または開始日から秒数を表す整数として内部的に格納されます。いずれにしても、整数のキーとAccessの内部日付の値を持つことでテーブルに保存するスペースは小さく、外部キーに関連する追加のテーブルとインデックスを持つことによって相殺される可能性があります。

関連する問題