Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 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) );