Primary and Foreign Keys
CREATE TABLE Customers
(
-- The body of a CREATE TABLE will identify a comma-separated list of
-- Column Declarations and Table Constraints.
CustomerNumber int
-- The following is a PRIMARY KEY constraint that has a specific name
-- Primary Key constraints ensure a row of data being added to the table
-- will have to have a unique value for the Primary Key column(s)
CONSTRAINT PK_Customers_CustomerNumber
PRIMARY KEY
-- IDENTITY means the database will generate a unique whole-number
-- value for this column
IDENTITY(100, 1) -- The first number is the "seed",
-- and the last number is the "increment"
NOT NULL, -- NOT NULL means the data is required
FirstName varchar(50) NOT NULL,
LastName varchar(60) NOT NULL,
[Address] varchar(40) NOT NULL,
City varchar(35) NOT NULL,
Province char(2) NOT NULL,
PostalCode char(6) NOT NULL,
PhoneNumber char(13) NULL -- NULL means the data is optional
)
CREATE TABLE Orders
(
OrderNumber int
CONSTRAINT PK_Orders_OrderNumber
PRIMARY KEY
IDENTITY(200, 1) NOT NULL,
CustomerNumber int
-- Foreign Key constraints ensure that when a row of data is being
-- inserted or updated in this table, there is a row in the
-- referenced table that has the same value in its Primary Key.
CONSTRAINT FK_Orders_CustomerNumber_Customers_CustomerNumber
FOREIGN KEY REFERENCES
Customers(CustomerNumber) NOT NULL,
[Date] datetime NOT NULL,
Subtotal money NOT NULL,
GST money NOT NULL,
Total money NOT NULL
)
CREATE TABLE InventoryItems
(
ItemNumber varchar(5)
CONSTRAINT PK_InventoryItems_ItemNumber
PRIMARY KEY NOT NULL,
ItemDescription varchar(50) NULL,
CurrentSalePrice money
CONSTRAINT CK_InventoryItems_CurrentSalePrice
CHECK (CurrentSalePrice > 0) NOT NULL,
InStockCount int NOT NULL,
ReorderLevel int NOT NULL
)
CREATE TABLE OrderDetails
(
OrderNumber int
CONSTRAINT FK_OrderDetails_OrderNumber_Orders_OrderNumber
FOREIGN KEY REFERENCES
Orders(OrderNumber) NOT NULL,
ItemNumber varchar(5)
CONSTRAINT FK_OrderDetails_ItemNumber_InventoryItems_ItemNumber
FOREIGN KEY REFERENCES
InventoryItems(ItemNumber) NOT NULL,
Quantity int NOT NULL,
SellingPrice money NOT NULL,
Amount AS Quantity * SellingPrice ,
-- The following is a Table Constraint
-- A composite primary key MUST be done as a Table Constraint
-- because it involves two or more columns
CONSTRAINT PK_OrderDetails_OrderNumber_ItemNumber
PRIMARY KEY (OrderNumber, ItemNumber) -- Specify all the columns in the PK
)