9.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)
);