初心者向けの優れたデータモデリング演習は、オンラインストアのデータモデルを作成することです。 。この演習を生徒に行うたびに、生徒にとってそれがいかに難しいかに驚いています。
概念を見つける...
それがどのように行われるか見てみましょう。ドメイン内のすべての概念のテーブルを作成する必要があることはわかっています。 名詞について考えてみてください および名詞句 ドメインを説明するために使用します。大まかに言って、すべての名詞は概念、概念の属性、または例のいずれかです 。オンラインストアの基本的な概念は何ですか? 2つの言葉がすぐに思い浮かびます:
- 顧客 –私たちの店で物を買う人、そして
- 製品 –私たちの店で人々が購入するアイテム。
すべての顧客は、それらを説明する基本的なデータセットを持っています:id(通常、テーブルにid属性が必要です)、名前、電子メール、およびパスワード。同様に、製品にはIDと名前があります。顧客と製品の属性をさらに追加することもできますが、この例では、これらを追加します。 2つのテーブルをモデルに追加します。
...および抽象的な概念
これはお店なので、明らかに、何を知りたいのです。 注文され、誰によって 。 「注文」はほとんどのデータベースのキーワードであるため、テーブル名には使用しないでください。代わりに、purchase
という名前を使用します モデルの3番目のテーブル。テーブルは何らかの方法でcustomer
に接続されている必要があります およびproduct
。まず、purchase
の間に参照を描画しましょう。 およびcustomer
、およびpurchase
の間 およびproduct
。
customer-purchase
参照はOKです。すべての購入は1人の顧客によって行われます。すべての顧客は複数の購入を行うことができます。このリファレンスはここにあります。
ただし、purchase-product
に問題があります 参照。 1回の購入で複数の製品を購入できます。複数の購入に同じ製品を含めることができます。しかし、私たちのリファレンスでは、1回の購入で1つの製品しか購入できません。参照を削除して、それをモデル化する別の方法を考えてみましょう。
購入したすべての製品に1つの大きなテキストフィールド?
購入した商品の名前やIDを保存できる大きなテキストフィールドを追加してみませんか?これで、1回の購入で複数の製品を購入できます。ただし、ここにはいくつかの問題があります:
- まず、
purchased_items
の商品を確認するのは困難です。 フィールドは実際にはデータベースにあります。 - 次に、商品の名前を変更する場合(スペルを間違えたため)、すべての
purchased_items
を更新する必要があります。purchase
のフィールドインスタンス テーブル。 - 最後に、データベース内のデータを分析することは困難です。たとえば、どの製品が最も頻繁に購入されているかを知りたい場合は、テキストの部分文字列操作を使用する必要があります。そして、それは決して非常に効率的ではありません。
購入テーブルのいくつかの製品列?
他のオプションは何ですか?購入を複数の商品に関連付けたいので、purchase_item
をいくつか追加する必要があります。 購入テーブルの列?ええと、それは面倒で(私は5つの列を追加しただけで疲れました)、人工的で愚かなを作成します 購入する製品の数の制限。
中間テーブルを使用してください!
ばかげた解決策は正しい解決策を示唆しています。 無制限が必要です 購入に関連する製品の数。唯一の方法は、中間の接続テーブルを用意することです。 。それをpurchase_item
と呼びましょう 。 purchase_item
テーブルはpurchase
に接続されています およびproduct
。これで、購入に必要な数の製品を含めることができます。ボーナスとして、購入回数、このアイテムの合計価格などのデータをテーブルに追加できます。
結論:
- モデル内のテーブルは、物理オブジェクトだけでなく表現できます。 顧客や製品のように。表は、より多くの抽象的な概念を表すことができます 購入のように。他の例としては、ホテル予約システムでの予約、図書館のモデルでのbook_loan、医師のためのシステムでの予約などがあります。
- トランザクションをモデル化する場合(つまり、多くのものを売買する場合)、通常は3つのテーブルが必要です。 :1つはトランザクション(購入またはホテル予約システムでの予約)用、1つはトランザクションで購入/販売されたもの(製品、ホテルの部屋)、もう1つはトランザクションアイテム(purchase_item、booking_item)用です。必要に応じて、中間テーブルに追加情報を追加できます。
Vertabeloを使用して独自のストアデータベースモデルを作成してください!