情報を関係的に、つまりテーブルに記録する基本的な方法を理解する必要があります。
十分なテーブルを見つける
ビジネスの状況を説明するために必要なすべてのステートメントのベーステーブルを用意するだけです。
User(user_id,name,...)
// User [user_id] is named [name]
Contacted(contact_id,item,offer_id)
// user [contact_id] was contacted re item [item] offered by user [offer_id]
...etc...
ステートメントのパラメーターは、テーブルの列です。
複数の部分(異種または同種)があると考える部分について話したい場合は、一部のステートメントに物とその部分が含まれることを意味します。
table request(request_id,start_date,end_date,...)
// [request_id] goes from [start_date] to [end_date] and ...
table requested(request_id,item_id,person_id,...)
// person [person_id] requested item [item_id] in request [request_id]
テーブルの内容
ベーステーブルの値は、そのステートメントを真にする行です。 (すべてのクエリ部分式にもステートメントがあり、その値はそのステートメントを真にする行です。)
テーブルステートメントをビジネスルールと混同しないでください。ビジネスルールは真実を述べています。ただし、テーブルステートメントは、一部のタプルがtrue(およびテーブルに入る)またはfalse(テーブルから除外される)になるステートメントです。表のすべての真偽のステートメントは、ビジネスについて知る必要があるすべてを示しています。ビジネスルールがそれらと矛盾することは決してありません。 (それらは常に真実であるため。)
より良いテーブルへの再配置
キーは、他のすべての列がそのような関数である列のセットですが、そのサブセットにはそのプロパティがありません。テーブルには複数のキーを含めることができます。
データベースの更新とクエリを簡単にするには、ANDで結合された他のステートメントである特定のステートメントを分割する必要があります。各ステートメントが、キー列に関するステートメントと次の形式のステートメントのみで構成されるまで分割します。
[my_column]=my_function([key_k_column_1],[key_k_column_2],...)
ここで、key_k_column_1、...は同じキーkey_nの列です。
(このようなテーブルは「第5正規形」であり、トピックは「正規化」です。)