--
--
DDL for Lab3; CS327E; Spring 2002
--
--
Set the default database. I have called it Lab3and4. In your case, it could
--
be dbuser10, for example.
--
USE
Lab3and4;
--
These are cleanup statements, and assume that all tables and RI are created --
from scratch. Make sure you use these statements with care.
ALTER
TABLE STUDSCORE DROP CONSTRAINT FK_ExamID;
ALTER
TABLE STUDSCORE DROP CONSTRAINT FK_Last4SSN;
ALTER
TABLE PROJECTGROUP DROP CONSTRAINT FK_SQLServerGroupID;
ALTER
TABLE STUDENT DROP CONSTRAINT FK_SQLServerUserID;
ALTER
TABLE STUDENT DROP CONSTRAINT FK_GroupID;
ALTER
TABLE STUDENT DROP CONSTRAINT FK_MajorID;
DROP
TABLE SQLSERVERACCT;
DROP
TABLE PROJECTGROUP;
DROP
TABLE STUDSCORE;
DROP
TABLE EXAM;
DROP
TABLE STUDMAJOR;
DROP
TABLE STUDENT;
--
-- Assume
that the EXAMDATA and STUDENTDATA tables already exist and
--
are populated.
--
--
--
Create the STUDENT table
--
Have used INTEGER for SSN, since in future, there might
--
be 2 students with same last 4 digits, and we may need to expand.
--
Instead of using fixed-length char, I use variable length
--
so disk space is not wasted. Also, a standard size of 40
--
chars suffices for my real world.
--
MajorID is SMALLINT as I don’t anticipate many Majors.
--
As a general note, I create PK only (and not FK) with the
--
CREATE TABLE statements, and then ADD FK with ALTER TABLE
--
statements. This way, I don’t have to remember which table
--
needs the FK first etc. It’s a matter of choice.
CREATE
TABLE STUDENT
(
Last4SSN
INTEGER PRIMARY KEY,
LastName
VARCHAR (40) NOT NULL,
FirstName
VARCHAR (40) NOT NULL,
Email
VARCHAR (255) NULL,
MajorID
SMALLINT,
GroupID
VARCHAR (40),
SQLServerUserID
VARCHAR (40)
);
--
Create the STUDMAJOR table
CREATE
TABLE STUDMAJOR
(
MajorID
SMALLINT PRIMARY KEY,
MajorDesc
VARCHAR (40)
);
--
Create the EXAM table
--
Note the default values
CREATE
TABLE EXAM
(
ExamID
VARCHAR (40) PRIMARY KEY,
ExamDesc
VARCHAR (255) NULL,
ExamMaxScore
DECIMAL (8,2) DEFAULT 100.00 NOT NULL,
ExamExtraCredits
DECIMAL (8,2) DEFAULT 0.00 NOT NULL,
ExamPcntOfTotal
DECIMAL (8,2) NOT NULL
);
--
Create the STUDSCORE table
--
Note the syntax for composite PK
CREATE
TABLE STUDSCORE
(
Last4SSN
INTEGER NOT NULL,
ExamID
VARCHAR (40) NOT NULL,
ExamScore
DECIMAL (8,2) DEFAULT 0.00 NOT NULL,
PRIMARY
KEY (Last4SSN, ExamID)
);
--
Create the PROJECTGROUP table
--
Note the data type for ProjectDesc
CREATE
TABLE PROJECTGROUP
(
GroupID
VARCHAR (40) PRIMARY KEY,
GroupName
VARCHAR (40) NULL,
ProjectDesc
VARCHAR (1000) NULL,
SQLServerGroupID
VARCHAR (40)
);
--
Create the SQLSERVERACCT table
--
Note the check constraint.
CREATE
TABLE SQLSERVERACCT
(
SQLServerID
VARCHAR (40) PRIMARY KEY,
SQLServerPswd
VARCHAR (40) CHECK
(
(SQLServerPswd IS NULL)
OR
((LEN (SQLServerPswd) <= 8) AND ((ASCII
(SQLServerPswd) BETWEEN 65 and 90) OR (ASCII (SQLServerPswd) BETWEEN 97 and
122)))
)
);
--
--
ADD all the FK
--
ALTER
TABLE STUDENT ADD CONSTRAINT FK_MajorID FOREIGN KEY (MajorID) REFERENCES
STUDMAJOR (MajorID)
ON
DELETE NO ACTION
ON
UPDATE CASCADE;
ALTER
TABLE STUDENT ADD CONSTRAINT FK_GroupID FOREIGN KEY (GroupID) REFERENCES
PROJECTGROUP (GroupID)
ON
DELETE NO ACTION
ON
UPDATE CASCADE;
ALTER
TABLE STUDENT ADD CONSTRAINT FK_SQLServerUserID FOREIGN KEY (SQLServerUserID)
REFERENCES SQLSERVERACCT (SQLServerID)
ON
DELETE NO ACTION
ON
UPDATE NO ACTION;
ALTER
TABLE PROJECTGROUP ADD CONSTRAINT FK_SQLServerGroupID FOREIGN KEY
(SQLServerGroupID) REFERENCES SQLSERVERACCT (SQLServerID)
ON
DELETE NO ACTION
ON
UPDATE NO ACTION;
ALTER
TABLE STUDSCORE ADD CONSTRAINT FK_Last4SSN FOREIGN KEY (Last4SSN) REFERENCES
STUDENT (Last4SSN)
ON
DELETE CASCADE
ON
UPDATE CASCADE;
ALTER
TABLE STUDSCORE ADD CONSTRAINT FK_ExamID FOREIGN KEY (ExamID) REFERENCES EXAM
(ExamID)
ON
DELETE CASCADE
ON
UPDATE CASCADE;
--
Populate all the tables
--
Note the use of DISTINCT
INSERT
INTO STUDMAJOR (MajorID, MajorDesc)
SELECT
DISTINCT MajorID, MajorDesc
FROM
STUDENTDATA;
INSERT
INTO SQLSERVERACCT (SQLServerID)
SELECT
DISTINCT SQLServerUserID
FROM
STUDENTDATA;
INSERT
INTO SQLSERVERACCT (SQLServerID)
SELECT
DISTINCT SQLServerGroupID
FROM
STUDENTDATA;
UPDATE
SQLSERVERACCT
SET
SQLServerPswd= SQLServerID;
INSERT
INTO PROJECTGROUP (GroupID, GroupName, ProjectDesc, SQLServerGroupID)
SELECT
DISTINCT GroupID, GroupName, ProjectDesc, SQLServerGroupID
FROM
STUDENTDATA;
INSERT
INTO STUDENT (Last4SSN, LastName, FirstName, Email, MajorID, GroupID,
SQLServerUserID)
SELECT
DISTINCT Last4SSN, LastName, FirstName, Email, MajorID, GroupID,
SQLServerUserID
FROM
STUDENTDATA;
INSERT
INTO EXAM (ExamID, ExamDesc, ExamMaxScore, ExamExtraCredits, ExamPcntOfTotal)
SELECT
DISTINCT ExamID, ExamDesc, ExamMaxScore, ExamExtraCredits, ExamPcntOfTotal
FROM
EXAMDATA;
INSERT
INTO STUDSCORE (Last4SSN, ExamID, ExamScore)
SELECT
STUDENTDATA.Last4SSN, EXAMDATA.ExamID, STUDENTDATA.Test1
FROM
STUDENTDATA, EXAMDATA
WHERE
EXAMDATA.ExamID='Test1';
INSERT
INTO STUDSCORE (Last4SSN, ExamID, ExamScore)
SELECT
STUDENTDATA.Last4SSN, EXAMDATA.ExamID, STUDENTDATA.Test2
FROM
STUDENTDATA, EXAMDATA
WHERE
EXAMDATA.ExamID='Test2';
INSERT
INTO STUDSCORE (Last4SSN, ExamID, ExamScore)
SELECT
STUDENTDATA.Last4SSN, EXAMDATA.ExamID, STUDENTDATA.Lab1
FROM
STUDENTDATA, EXAMDATA
WHERE
EXAMDATA.ExamID='Lab1';
INSERT
INTO STUDSCORE (Last4SSN, ExamID, ExamScore)
SELECT
STUDENTDATA.Last4SSN, EXAMDATA.ExamID, STUDENTDATA.Lab2
FROM
STUDENTDATA, EXAMDATA
WHERE
EXAMDATA.ExamID='Lab2';
INSERT
INTO STUDSCORE (Last4SSN, ExamID, ExamScore)
SELECT
STUDENTDATA.Last4SSN, EXAMDATA.ExamID, STUDENTDATA.Lab3
FROM
STUDENTDATA, EXAMDATA
WHERE
EXAMDATA.ExamID='Lab3';
INSERT
INTO STUDSCORE (Last4SSN, ExamID, ExamScore)
SELECT
STUDENTDATA.Last4SSN, EXAMDATA.ExamID, STUDENTDATA.Lab4
FROM
STUDENTDATA, EXAMDATA
WHERE
EXAMDATA.ExamID='Lab4';
INSERT
INTO STUDSCORE (Last4SSN, ExamID, ExamScore)
SELECT
STUDENTDATA.Last4SSN, EXAMDATA.ExamID, STUDENTDATA.Lab5
FROM
STUDENTDATA, EXAMDATA
WHERE
EXAMDATA.ExamID='Lab5';
INSERT
INTO STUDSCORE (Last4SSN, ExamID, ExamScore)
SELECT
STUDENTDATA.Last4SSN, EXAMDATA.ExamID, STUDENTDATA.Quiz1
FROM
STUDENTDATA, EXAMDATA
WHERE
EXAMDATA.ExamID='Quiz1';
INSERT
INTO STUDSCORE (Last4SSN, ExamID, ExamScore)
SELECT
STUDENTDATA.Last4SSN, EXAMDATA.ExamID, STUDENTDATA.Quiz2
FROM
STUDENTDATA, EXAMDATA
WHERE
EXAMDATA.ExamID='Quiz2';
INSERT
INTO STUDSCORE (Last4SSN, ExamID, ExamScore)
SELECT
STUDENTDATA.Last4SSN, EXAMDATA.ExamID, STUDENTDATA.ProjectProposal
FROM
STUDENTDATA, EXAMDATA
WHERE
EXAMDATA.ExamID='ProjectProposal';
INSERT
INTO STUDSCORE (Last4SSN, ExamID, ExamScore)
SELECT
STUDENTDATA.Last4SSN, EXAMDATA.ExamID, STUDENTDATA.ProjectLogical
FROM
STUDENTDATA, EXAMDATA
WHERE
EXAMDATA.ExamID='ProjectLogical';
INSERT
INTO STUDSCORE (Last4SSN, ExamID, ExamScore)
SELECT
STUDENTDATA.Last4SSN, EXAMDATA.ExamID, STUDENTDATA.ProjectDDL
FROM
STUDENTDATA, EXAMDATA
WHERE
EXAMDATA.ExamID='ProjectDDL';
INSERT
INTO STUDSCORE (Last4SSN, ExamID, ExamScore)
SELECT
STUDENTDATA.Last4SSN, EXAMDATA.ExamID, STUDENTDATA.ProjectPresentation
FROM
STUDENTDATA, EXAMDATA
WHERE
EXAMDATA.ExamID='ProjectPresentation';
INSERT
INTO STUDSCORE (Last4SSN, ExamID, ExamScore)
SELECT
STUDENTDATA.Last4SSN, EXAMDATA.ExamID, STUDENTDATA.ProjectDemo
FROM
STUDENTDATA, EXAMDATA
WHERE
EXAMDATA.ExamID='ProjectDemo';
INSERT
INTO STUDSCORE (Last4SSN, ExamID, ExamScore)
SELECT
STUDENTDATA.Last4SSN, EXAMDATA.ExamID, STUDENTDATA.ProjectReport
FROM
STUDENTDATA, EXAMDATA
WHERE
EXAMDATA.ExamID='ProjectReport';
INSERT
INTO STUDSCORE (Last4SSN, ExamID, ExamScore)
SELECT
STUDENTDATA.Last4SSN, EXAMDATA.ExamID, STUDENTDATA.ProjectUserScore
FROM
STUDENTDATA, EXAMDATA
WHERE
EXAMDATA.ExamID='ProjectUserScore';