sql >> データベース >  >> RDS >> Database

データベース設計101

    初心者向けの優れたデータモデリング演習は、オンラインストアのデータモデルを作成することです。 。この演習を生徒に行うたびに、生徒にとってそれがいかに難しいかに驚いています。

    概念を見つける...

    それがどのように行われるか見てみましょう。ドメイン内のすべての概念のテーブルを作成する必要があることはわかっています。 名詞について考えてみてください および名詞句 ドメインを説明するために使用します。大まかに言って、すべての名詞は概念、概念の属性、または例のいずれかです 。オンラインストアの基本的な概念は何ですか? 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を使用して独自のストアデータベースモデルを作成してください!


    1. Unpivot Stepを使用して、クロス集計テーブルから表形式のテーブルを作成します

    2. ORACLEIIFステートメント

    3. MySQLのDESCRIBE[テーブル]に相当するSQLiteはありますか?

    4. .NET / Oracle:プログラムでDDLステートメントを使用してスクリプトを実行する方法