8.1 データベース・スキーマの計画について
この例の目的は、顧客の発注書を管理する簡単なシステムを開発することです。このために、データベース・スキーマ計画を作成する必要があります。最初に、関連するビジネス・エンティティおよびそれらの関係を指定します。この例での基本的なエンティティは、顧客、発注書、明細項目および在庫品目です。したがって、スキーマに次の表を含めることができます。
-
Customers
-
Orders
-
LineItems
-
StockItems
顧客が1つまたは複数の注文を行うことができるのに対し、特定の発注書を発行できるのは1人の顧客のみであるため、Customer
表とOrders
表との間には1対多の関係があります。顧客がいない状態での発注があるため、この関係はオプションです。たとえば、以前に顧客として定義されていない顧客が発注するような場合です。
1枚の発注書には複数の在庫品目を指定する場合があり、在庫品目は複数の発注書によって指定される場合があるため、Orders
表とStockItems
表との間には多対多の関係があります。ただし、発注書と在庫品目の参照関係は不明です。したがって、明細項目の概念が必要です。発注書には複数の明細項目が記載される場合がありますが、特定の明細項目を記載できるのは1枚の発注書のみなので、Orders
表とLineItems
表との間には1対多の関係があります。
明細項目に指定できるのは1つの在庫品目のみですが、特定の在庫品目は複数の明細項目によって指定される場合があるため、LineItems
とStockItems
表との間には多対1の関係があります。明細項目がない状態での在庫品目の指定があるため、この関係はオプションです。
図8-1は、複数の表の関係を示しています。スキーマ計画では、主キーと外部キーを使用してこれらの関係を設定します。
主キーは、表の各行を一意に識別する値を持つ列または列の組合せです。外部キーは、他の表の主キーと一致する値を持つ列または列の組合せです。たとえば、LineItems
表のPONo
列は、Orders
表の主キーと一致する外部キーです。LineItems.PONo
列の発注書番号はすべてOrders.PONo
列にも存在する必要があります。