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

これらのテーブルはどのように関連していますか?

    注文には常に顧客がいますね?つまり、左ではなく内側の結合です。

    それらをリンクするのはcustomer_idです。つまり、SQLは単純です:

    select o.order_number, o.customer_ID, o.address, 
        c.first_name, c.last_name
    from orders o
    inner join customer c on o.customer_ID = c.customer_ID;
    

    実体関連:

    CustomerCustomer_Id 0 ... N> --- + 1 Customer_Id ... ...

    を注文します

    このEF関係は、MSSQLServerのサンプルデータベースNorthwindからのものです。そのサンプルデータベースには、あなたと同じように、顧客と注文があります。 CustomersテーブルとOrdersテーブルは、両方のテーブルのCustomerIdフィールドを介して関連付けられています(これは、Customersの主キーであり、Ordersテーブルの外部キーです)。それをエンティティリレーションとしてモデル化すると、上の図になります。顧客エンティティには、特定の顧客の注文を指す「Orders」ナビゲーションプロパティ(customerId経由)があります。また、Orderエンティティには、その顧客を指すナビゲーションプロパティがあります(これもCustomerIdを介して)。関係は1対0または多数(1-*)です。これは、顧客が0個以上の注文を持っている可能性があることを意味します。

    顧客側から参加する場合は、「注文の有無に関係なくすべての顧客を表示したい場合」-0以上の注文の左参加を使用します。 Order(s)を持つものだけを表示したい場合は、内部結合を使用します。

    注文側から参加する場合、注文には顧客が必要であるため、左参加にはなりません。内側の参加です。

    接続するCustomerIdフィールドを使用して、両側から関係を確認できます。

    「OrderId、CustomerId」は多対多の関係ではないため、個別のテーブルはありません(これは純粋な冗長性であり、正規化の異常を引き起こします)。

    今より明確になることを願っています。



    1. あるSQLServerから別のSQLServerにテーブルデータをエクスポートする

    2. MySQLで2つの日付の違いを見つける方法

    3. CRYPT_GEN_RANDOM()を使用して、SQLServerで暗号化されたランダム番号を作成します

    4. MySQL:ストアドプロシージャ内のトランザクション