2011-10-21 12 views
0

データベース用にVB.NetとMySQLを使用して簡単な登録プログラムを作成しようとしています。ここに私の単純なテーブルは、私はテーブルの正規化では、私の基本的な知識を改善しようとしています、テーブルの正規化

enter image description here

しかし、基本的な情報のためだと私は一日にしましょう、回避するために、日付フィールドを分離理由です、繰り返し同じ日付の挿入。 50人を1日に登録すると、テーブルに50回追加するのではなく、tblRegDateテーブルに1つの日付(レコード)を追加するだけです。これを行う方法はありますか? VB.NetとMySQLで可能ですか?または、むしろ、私はいくつかのフィールドを追加または変更する必要がありますか? VB.Netで条件を作成する必要がありますか?上記の表は私の友人が私に教えたものですが、冗長性を排除するものではありません。親切に私に指示を与えたり、サイトに案内したりするための簡単なチュートリアルがあります。前もって感謝します!ここ

は私のMySQLのコードです:

CREATE TABLE tblInfo(
     Number INT AUTO_INCREMENT, 
     LastName VARCHAR(45), 
     FirstName VARCHAR(45), 
     MiddleName VARCHAR(45), 
     Gender ENUM(M,F), 
     BirthDate DATE, 
     PRIMARY KEY(Number)); 

CREATE TABLE tblRegDate(
     IDRegDate INT AUTO_INCREMENT, 
     Date TIMESTAMP, 
     Number INT, 
     PRIMARY KEY(IDRegDate), 
     FOREIGN KEY(Number) REFERENCES tblInfo(Number)); 
+1

私は、あなたの 'RegDate'フィールドをinfoテーブルに残すべきだと思います。 – AndrewR

+2

'tblInfo'テーブルの1つのDATEカラムに必要なストレージは、外部キー値のストレージとほぼ同じサイズになるので、省スペースが最小限に抑えられます。 'tblRegDate'テーブルに参加するコストは節約よりも重要です。技術は必ずしも自動的に悪いとは限りません。これは技術を使用する説得力のある例ではありません。 –

答えて

2

であなたのtblRegDateではなく、日付を維持するためにあなたをお勧めします。あなたは多くのパフォーマンスを失うでしょう。

表の正規化は冗長値を持たないことではありません。それは「懸念を分ける」ことです。

また、データベースが複雑にならないようにすることも重要です。誰かが理解することができないデータベースに1回の塗りつぶしが終わることになります。

質問:登録に関する情報がありますか?例Webページ、IP、.....

"Person"と "Registration"のように2つのテーブルが必要です。それから、あなたは混乱すべきではない2つの意味の異なるものを持っています。

Googleを介して多くの例と情報があります。そしてウィキペディア http://en.wikipedia.org/wiki/Database_normalization

+0

ありがとう...あなたの答えは私の助けです。 – aer

1

は、実際にはテーブルからタイムスタンプを区切るために、良いアイデアではありません。
別のテーブル、つまりtimeTableが必要です。これにはidとtimestmapという2つのカラムがあり、tblRegDateテーブルのidを外部キーとして参照する必要があります。 外部キーは整数で、サイズは4バイトです。もう一方の日付は3バイトです。

そこで私は、私はあなたが単一のフィールドをseperatingのadvanagesを持っていない。この場合にはそれを見ると、余分なテーブル

1

あなたがDB構造を正規化すると、常にACIDの心を保つ - あなたが持っているフィールドに基づいてhttp://en.wikipedia.org/wiki/ACID

、あなただけの単一のテーブルとしてそれを維持する必要があります。登録日を分けることは良いデザインではありません。毎回ルックアップする必要があるからです。実際の生活では、アプリが常にregdateで検索またはソートする場合、reg日付のインデックスを作成することを検討できます。

また、FK RegDateテーブルをユーザーテーブルに追加すると、効率的ではありません。

p.s.また、DB正規化には4つのレベルがあることに注意してください。 DB設計を初めて使用する場合は、DB設計を1から2、および2から3の正規形に移動する方法を学ぶことを検討する必要があります。

実生活では4番目の正規形を使用することはめったにありません。取引システムは、通常、3番めの時間にとどまります。

希望がある。

+2

4つではなく、(少なくとも)標準フォームが6つあります。 BCNF、DKNF、EKNFなどもあります。第5正規形は実際の使用ではおそらく最も一般的です。 – sqlvogel

関連する問題