8.2 データベース表の作成
データベース・スキーマを計画した後は、スキーマ計画にデータベース表を作成します。次のようにして、Customers
表を定義します。
CREATE TABLE Customers ( CustNo NUMBER(3) NOT NULL, CustName VARCHAR2(30) NOT NULL, Street VARCHAR2(20) NOT NULL, City VARCHAR2(20) NOT NULL, State CHAR(2) NOT NULL, Zip VARCHAR2(10) NOT NULL, Phone VARCHAR2(12), PRIMARY KEY (CustNo) );
Customers
表には、顧客に関する情報が格納されます。必須情報は、NOT NULL
として定義されます。たとえば、すべての顧客には出荷先の住所が必要です。ただし、Customers
表では、顧客とその発注書との関係は管理されません。したがって、この関係は、次のように定義可能なOrders
表で管理する必要があります。
CREATE TABLE Orders ( PONo NUMBER(5), Custno NUMBER(3) REFERENCES Customers, OrderDate DATE, ShipDate DATE, ToStreet VARCHAR2(20), ToCity VARCHAR2(20), ToState CHAR(2), ToZip VARCHAR2(10), PRIMARY KEY (PONo) );
明細項目は、発注書および在庫品目との関係があります。LineItems
表では、外部キーを使用してこれらの関係を管理します。たとえば、LineItems
表のStockNo
外部キー列はStockItems
表のStockNo
主キー列を参照しますが、これは次のようにして定義できます。
CREATE TABLE StockItems ( StockNo NUMBER(4) PRIMARY KEY, Description VARCHAR2(20), Price NUMBER(6,2)) );
Orders
表は、Customers
表のCustNo
主キー列を参照しているCustNo
外部キー列を使用して、顧客と発注書との関係を管理します。ただし、Orders
表では、発注書とその明細項目との間の関係を管理しません。したがって、この関係は、次のように定義可能なLineItems
表で管理する必要があります。
CREATE TABLE LineItems ( LineNo NUMBER(2), PONo NUMBER(5) REFERENCES Orders, StockNo NUMBER(4) REFERENCES StockItems, Quantity NUMBER(2), Discount NUMBER(4,2), PRIMARY KEY (LineNo, PONo) );