You are on page 1of 3

CREATE TABLE Client(

ClientID int IDENTITY(1,1) NOT NULL,


FirstName varchar(255) NOT NULL,
LastName varchar(255) NOT NULL,
StreetAddress varchar(255) NULL,
Suburb varchar(255) NULL,
State varchar(255) NOT NULL,
PostCode smallint NULL,
PhoneNumber varchar(255) NULL,
CONSTRAINT PKClient PRIMARY KEY (ClientID),
CONSTRAINT CKClientPostCode CHECK (PostCode>0 AND (Len(PostCode)=4 Or Len(PostC
ode)=3)),
CONSTRAINT CKClientState CHECK (State IS NULL OR (State IN ('QLD','NSW','VIC','
TAS','SA','WA','NT','ACT') AND dbo.CheckStringOfUpperAlphaOK(State)='OK'))
);
------------ end of Client table ------------
GO
------------------ create Position table ------------------
CREATE TABLE Position(
PositionID int IDENTITY(1,1)
NOT NULL,
PositionName varchar(255) NOT NULL
,
BaseSalary money
NOT NULL,
BaseBillingHoursPerQuarter real NOT NULL
,
BillingRate money
NOT NULL,
SalaryMultiplier AS (BaseBillingHoursPerQuarter*BillingRa
te)/(BaseSalary/4),
CONSTRAINT PKPosition PRIMARY KEY (PositionID),
CONSTRAINT UKPositionPositionName UNIQUE (PositionName)
);
------------ end of Position table ------------
GO
------------------ create Employee table ------------------
CREATE TABLE Employee(
EmployeeID int IDENTITY(1,1) NOT NULL,
PositionID int NOT NULL
,
EmployeeName varchar(255) NOT NULL,
Status varchar(8) NOT NULL
DEFAULT 'current',
CONSTRAINT PKEmployee PRIMARY KEY (EmployeeID),
CONSTRAINT FKEmployeePositionID FOREIGN KEY (PositionID) REFERENCES Position(Po
sitionID) ON DELETE NO ACTION ON UPDATE CASCADE,
CONSTRAINT CKEmployeeStatus CHECK (Status IN ('current','previous'))
);
------------ end of Employee table ------------
GO
------------------ create Project table ------------------
CREATE TABLE Project(
ProjectID int IDENTITY(1,1) NOT NULL,
ManagerEmployeeID int NOT NULL
,
ProjectNumber int NOT NULL
,
ClientID int
NOT NULL,
Description varchar(255) NOT NULL,
StartDate datetime NULL,
DueDate datetime NULL,
PriceType varchar(255) NULL,
QuotedPrice money NULL,
FinalPrice money NULL,
Status varchar(255) NOT NULL
DEFAULT 'planned',
DateCompleted datetime NULL,
CONSTRAINT PKProject PRIMARY KEY (ProjectID),
CONSTRAINT FKProjectClientID FOREIGN KEY (ClientID) REFERENCES Client(ClientID)
ON DELETE NO ACTION ON UPDATE CASCADE,
CONSTRAINT FKProjectEmployeeID FOREIGN KEY (ManagerEmployeeID) REFERENCES Emplo
yee(EmployeeID) ON DELETE NO ACTION ON UPDATE CASCADE,
CONSTRAINT UKProjectProjectNumber UNIQUE (ProjectNumber),
CONSTRAINT CKProjectStatus CHECK (Status IN ('planned','active','completed'))
);
------------ end of Project table ------------
GO
------------------ create Bonus table ------------------
CREATE TABLE Bonus(
BonusID int IDENTITY(1,1)
NOT NULL,
EmployeeID int
NOT NULL,
BonusYear smallint
NOT NULL,
BonusQuarter smallint
NOT NULL DEFAULT dbo.CalendarQtr(GetDate()) ,
BaseSalary money
NOT NULL,
BaseBillingHoursPerQuarter real NOT NULL
,
HoursBilledInQuarter real NOT NULL
,
BonusPaid money
NOT NULL,
CONSTRAINT PKBonus PRIMARY KEY (BonusID),
CONSTRAINT FKBonusEmployeeID FOREIGN KEY (EmployeeID) REFERENCES Employee(Emplo
yeeID) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT CKBonusPaid CHECK (BonusPaid>=0),
CONSTRAINT CKBonusQuarter CHECK (BonusQuarter IN (1,2,3,4)),
CONSTRAINT CKBonusYear CHECK (BonusYear BETWEEN 2009 AND Year(GetDate()))
);
------------ end of Bonus table ------------
GO
------------------ create Invoice table ------------------
CREATE TABLE Invoice(
InvoiceID int IDENTITY(1,1) NOT NULL,
ProjectID int
NOT NULL,
MYOBInvoiceNumber int NULL,
InvoiceDate datetime NOT NULL
DEFAULT GetDate(),
InvoiceTotal money NOT NULL,
CONSTRAINT PKInvoice PRIMARY KEY (InvoiceID),
CONSTRAINT CKInvoiceMYOBInvoiceNumber CHECK (dbo.CheckInvoiceWithThisMYOBInvoic
eNumberOK(InvoiceID,MYOBInvoiceNumber)='OK')
);
------------ end of Invoice table ------------
GO
------------------ create Service table ------------------
CREATE TABLE Service(
ServiceID int IDENTITY(1,1) NOT NULL,
InvoiceID int NULL,
ProjectID int NOT NULL
,
Description varchar(255) NOT NULL,
StartDate datetime NULL,
DueDate datetime NULL,
PlannedPrice money NULL,
ActualPrice money NULL,
Status varchar(255) NOT NULL DEFAULT
'planned',
DateCompleted datetime NULL,
CONSTRAINT PKService PRIMARY KEY (ServiceID),
CONSTRAINT FKServiceInvoiceID FOREIGN KEY (InvoiceID) REFERENCES Invoice(Invoic
eID) ON DELETE NO ACTION ON UPDATE CASCADE,
CONSTRAINT FKServiceProjectID FOREIGN KEY (ProjectID) REFERENCES Project(Projec
tID) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT CKServiceDates CHECK ((DueDate>=StartDate) AND (DateCompleted>=Start
Date)),
CONSTRAINT CKServiceDescription CHECK (LEN(LTRIM(Description))>0),
CONSTRAINT CKServiceStatus CHECK (Status='planned' OR (Status='active' AND (Due
Date IS NOT NULL AND StartDate IS NOT NULL AND PlannedPrice IS NOT NULL)) OR (St
atus='completed' AND (DueDate IS NOT NULL AND StartDate IS NOT NULL AND PlannedP
rice IS NOT NULL AND DateCompleted IS NOT NULL AND ActualPrice IS NOT NULL)))
);
------------ end of Service table ------------
GO
------------------ create Activity table ------------------
CREATE TABLE Activity(
ActivityID int IDENTITY(1,1) NOT NULL,
AssignedEmployeeID int NULL,
ServiceID int
NOT NULL,
Description varchar(255) NOT NULL,
StartDate datetime NULL,
DueDate datetime NULL,
PlannedPrice money NULL,
HoursWorked real NOT NULL
DEFAULT 0,
BillingRate money NULL,
ActualPrice AS Cast(BillingRate*HoursWorked AS money
),
Status varchar(255) NOT NULL
DEFAULT 'planned',
DateCompleted datetime NULL,
CONSTRAINT PKActivity PRIMARY KEY (ActivityID),
CONSTRAINT FKActivityServiceID FOREIGN KEY (ServiceID) REFERENCES Service(Servi
ceID) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT FKActivityAssignedEmployeeID FOREIGN KEY (AssignedEmployeeID) REFERE
NCES Employee(EmployeeID) ON DELETE NO ACTION ON UPDATE NO ACTION,
CONSTRAINT CKActivityDates CHECK (DateCompleted>=StartDate),
CONSTRAINT CKActivityPrice CHECK (PlannedPrice>=0)
);

You might also like