2

これが取り引きです: これは私の初めてのデータベース プロジェクトであり、この問題に対する私の解決策が最善ではないことを恐れています。データベースは、さまざまな「タイプ」の協力者を追跡します。それらのタイプは、会社、組織、雇用された労働者、その他の「人」です...

これらはすべてまったく異なる情報セットを持っていますが、共通点が 1 つあります。連絡先情報です。協力者に追加したい連絡先情報を、ユーザーが入力できるようにすることにしました。それは、電子メール、電話、URL、Fax などです...

そこでContacts、協力者のタイプに関係なく、すべての協力者のすべての連絡先データを格納する " " テーブルを作成しました。

これTablesListは、協力者のタイプ (会社、組織、労働者) のリストを含むテーブルです。

Contacts テーブルの各行には"TableID"、協力者のタイプ (会社/従業員/組織...) を識別する番号が含まれている必要が"RowID"あります。

Contacts テーブルの 1 つの列に他の 3 つのテーブルからの外部キーが含まれているという問題があり、これは適切ではありません。リレーションシップを削除し、DBMS が制約を認識せずに列に ID を入力することもできますが、それは良い解決策とは思えないので、このアイデアが良いとは思えません。

何を指示してるんですか ?

将来的には、必要に応じてさらにいくつかの種類の協力者が追加される可能性があることに注意してください (派遣/契約社員、代理店など)。連絡先テーブルもそれらをサポートするように設計する必要があります。

前もって感謝します !

ところで、SQL CE と C# を使用しています

これが何が起こっているかのスケッチです:
ここに画像の説明を入力

編集

気分が悪いですが、関係を削除しただけで、これまでのアプリケーションで問題なく動作します

4

1 に答える 1

0

あなたのデザインは過度に正規化されていると思います。データを会社、労働者、組織の 3 つのテーブルに統合することで、データを簡素化できます。正規化されることはありませんが、操作ははるかに簡単です。http://www.codinghorror.com/blog/2008/07/maybe-normalizing-isnt-normal.htmlをご覧ください

于 2013-09-17T15:22:50.587 に答える