私はOracleで基本的な血液銀行データベースに取り組んでいます。完全に基本的な正規化されたテーブルを作成したいので、さらに詳細を追加します。私は2NFに対してそれを行い、その後さらに3NFに進みますが、最初に誰かが私の正規化を見て、それを改善するのを手伝ってくれるか(必要な場合)、またはそれに関するアドバイスを得ることができます。
@ joishi-bodioによる優れた点。
これは、モデル内のさまざまなエンティティ、属性、およびそれらの関係を説明する簡単な図です。
データベースをモデル化する最初のステップは、実際のエンティティを特定することです。各エンティティを定義する属性。次に、それらの関係と相互参照。
ここに、例から引き出すことができるさまざまな観察と結論があります-
エンティティと属性-
PERSON
です。Person
は、名前、年齢、性別、DOB、血液型などの属性で定義できます。PERSON
は、「献血者」または「献血者」、あるいはその両方にすることができます。 「ドナー」と「レシーバー」は、人が果たす役割が異なるように聞こえますが、それ自体は異なるエンティティではありません。Blood Group
は別のエンティティである可能性があり、とりわけその血液型の名前で定義できます。関係:
次のようなものが得られます-
bloodgroup
は、独自のテーブルに移動できます。blood_bag
テーブルでは、bloodgroup
の血液型と常に一致することを考えると、おそらくdonor
はまったく必要ありません。同様に、transaction
テーブルにはdonor_id
は必要ありません。これは、常にblood_bag
のdonor
と一致するためです。
なぜreceiver
テーブルがあるのかよくわかりません...名前と血液型を記録するperson
テーブルが必要なだけです..次に、transaction
テーブルdonor_id
とreceiver_id
の両方が必要です。 person
テーブルをポイントします。 (ただし、このテーブルにはdonor_id
はまったく必要ありません。)