Professional Documents
Culture Documents
Case PhysicalDD
Case PhysicalDD
Organization Name
Gemilang Tuition Center
Part
4
Physical Database Design
Introduction
Physical database design methodology is the third phase in the process of designing
the database. It is a process to produce the implementation of database architecture
will be implemented on secondary storage. It involves the process to reflect the storage
structure and access methods to be used by the system efficiently and effectively.
This design process involves several stages, which the steps that need to be
implemented are as follows:
Step 3 - Translate logical data model for target DBMS
Domain Name
Domain DOB
Domain ICNo
Domain Email
Domain Address
Domain PhoneNo
Domain DateHired
Domain YearOfServices
Domain Salary
Domain JobStatusID
Domain GenderID
Domain RaceID
Domain FamilyID
Domain BranchID
Domain DepartmentID
Domain DesignationID
Domain StatusOfMarriageID
Domain ReligionID
Employee(
EmpID
EmployeeID
NOT NULL
Name
Name
NOT NULL
DOB
DOB
NOT NULL
ICNo
ICNo
NOT NULL
Address
Address
NOT NULL
PhoneNo
PhoneNo
NOT NULL
DateHired
DateHired
NOT NULL
YearOfServices
YearOfServices
Salary
Salary
NOT NULL
JobStatusID
JobStatusID
NOT NULL
GenderID
GenderID
NOT NULL
RaceID
RaceID
NOT NULL
FamilyID
FamilyID
NOT NULL
BranchID
BranchID
NOT NULL
DepartmentID
DepartmentID
NOT NULL
DesignationID
DesignationID
NOT NULL
StatusOfMarriageID
StatusOfMarriageID
NOT NULL
ReligionID
ReligionID
NOT NULL
Transact-SQL syntax
CREATE TABLE [dbo].[Employee](
[EmpID] [varchar](6) NOT NULL,
[Name] [varchar](100) NOT NULL,
[DOB] [datetime] NULL,
[ICNo] [varchar](12) NULL,
[Email] [varchar](100) NULL,
[Address] [nvarchar](255) NULL,
[PhoneNo] [nchar](10) NULL,
[DateHired] [datetime] NULL,
[YearOfServices] AS (floor(datediff(day,[DateHired],getdate())/
(365.25))),
[Salary] [smallmoney] NOT NULL,
[JobStatusID] [varchar](2) NOT NULL,
[GenderID] [varchar](1) NOT NULL,
[RaceID] [varchar](2) NOT NULL,
[BranchID] [varchar](5) NOT NULL,
[DepartmentID] [varchar](5) NOT NULL,
[DesignationID] [varchar](5) NOT NULL,
[StatusOfMarriageID] [varchar](2) NOT NULL,
[ReligionID] [varchar](2) NOT NULL,
CONSTRAINT [PK_Employee] PRIMARY KEY CLUSTERED
(
[EmpID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
ALTER TABLE [dbo].[Employee] WITH CHECK ADD
[FK_Employee_Branch] FOREIGN KEY([BranchID])
REFERENCES [dbo].[Branch] ([BranchID])
ON UPDATE CASCADE
CONSTRAINT
CONSTRAINT
Family
Domain FamilyID
Domain EmpID
Domain RelationshipD
Domain Name
Domain Address
Domain PhoneNo
FamilyID
FamilyID
NOT NULL
EmpID
EmployeeID
NOT NULL
RelationshipID
RelationshipID
NOT NULL
Name
Name
NOT NULL
Address
Address
NOT NULL
PhoneNo
PhoneNo
NOT NULL
Family(
Transact-SQL syntax
CREATE TABLE [dbo].[Family](
[FamilyID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
ALTER TABLE [dbo].[Family] WITH CHECK ADD
[FK_Family_Employee] FOREIGN KEY([EmpID])
REFERENCES [dbo].[Employee] ([EmpID])
ON UPDATE CASCADE
CONSTRAINT
Designation
Domain DesignationID
Domain DesignationName
Domain EmploymentTypeID
Designation(
DesignationID
DesignationID
NOT NULL
DesignationName
DesignationName
NOT NULL
EmploymentTypeID
EmploymentTypeID
NOT NULL
Transact-SQL syntax
CREATE TABLE [dbo].[Designation](
[DesignationID] [varchar](5) NOT NULL,
[DesignationName] [varchar](50) NOT NULL,
[EmploymentTypeID] [varchar](2) NOT NULL,
CONSTRAINT [PK_Designation] PRIMARY KEY CLUSTERED
(
[DesignationID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
ALTER TABLE [dbo].[Designation] WITH CHECK ADD CONSTRAINT
[FK_Designation_EmploymentType] FOREIGN KEY([EmploymentTypeID])
REFERENCES [dbo].[EmploymentType] ([EmploymentTypeID])
ON UPDATE CASCADE
Job Status
Domain JobStatusID
Domain JobStatus
JobStatusID
JobStatusID
NOT NULL
JobStatus
JobStatus
NOT NULL
JobStatus(
Transact-SQL syntax
CREATE TABLE [dbo].[JobStatus](
[JobStatusID] [varchar](2) NOT NULL,
[JobStatus] [varchar](20) NOT NULL,
CONSTRAINT [PK_JobStatus] PRIMARY KEY CLUSTERED
(
[JobStatusID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
Race
Domain RaceID
Domain Race
RaceID
RaceID
NOT NULL
Race
Race
NOT NULL
Race(
Transact-SQL syntax
CREATE TABLE [dbo].[Race](
[RaceID] [varchar](2) NOT NULL,
[Race] [varchar](20) NOT NULL,
CONSTRAINT [PK_Race] PRIMARY KEY CLUSTERED
(
[RaceID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
Gender
Domain GenderID
Domain Gender
Gender(
GenderID
GenderID
NOT NULL
Gender
Gender
NOT NULL
Transact-SQL syntax
CREATE TABLE [dbo].[Gender](
[GenderID] [varchar](1) NOT NULL,
[Gender] [varchar](20) NOT NULL,
CONSTRAINT [PK_Gender] PRIMARY KEY CLUSTERED
(
[GenderID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
Branch
Domain BranchID
Domain BranchName
Domain Address
Domain HeadOfBranch
Department(
BranchID
BranchID
NOT NULL
BranchName
BranchName
NOT NULL
Address
Address
NOT NULL
HeadOfBranchID
HeadOfBranchID
NOT NULL
Transact-SQL syntax
CREATE TABLE [dbo].[Branch](
[BranchID] [varchar](5) NOT NULL,
[BranchName] [varchar](100) NOT NULL,
[Address] [nvarchar](255) NULL,
[HeadOfBranchID] [varchar](6) NOT NULL,
CONSTRAINT [PK_Branch] PRIMARY KEY CLUSTERED
(
[BranchID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
ALTER TABLE [dbo].[Branch] WITH CHECK ADD CONSTRAINT
[FK_Branch_HOB] FOREIGN KEY([HeadOfBranchID])
REFERENCES [dbo].[Employee] ([EmpID])
StatusOfMarriage
Domain StatusOfMarriageID
Domain Status
StatusOfMarriage(
StatusOfMarriageID
StatusOfMarriageID
NOT NULL
Status
Status
NOT NULL
Transact-SQL syntax
CREATE TABLE [dbo].[StatusOfMarriage](
[StatusOfMarriageID] [varchar](2) NOT NULL,
[StatusOfMarriage] [varchar](20) NOT NULL,
CONSTRAINT [PK_StatusOfMarriage] PRIMARY KEY CLUSTERED
(
[StatusOfMarriageID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
Religion
Domain ReligionID
Domain Religion
ReligionID
ReligionID
NOT NULL
Religion
Religion
NOT NULL
Religion(
Transact-SQL syntax
CREATE TABLE [dbo].[Religion](
[ReligionID] [varchar](2) NOT NULL,
[Religion] [varchar](50) NOT NULL,
CONSTRAINT [PK_Religion] PRIMARY KEY CLUSTERED
(
[ReligionID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
FamilyRelationship
Domain FamilyRelationshipID
Domain Relationship
FamilyRelationship (
RelationshipID
RelationshipID
NOT NULL
Relationship
Relationship
NOT NULL
Transact-SQL syntax
CREATE TABLE [dbo].[FamilyRelationship](
[RelationshipID] [varchar](2) NOT NULL,
[Relationship] [varchar](15) NOT NULL,
CONSTRAINT [PK_FamilyRelationship] PRIMARY KEY CLUSTERED
(
[RelationshipID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
EmploymentType
Domain EmploymentTypeID
Domain Type
EmploymentTypeID (
EmploymentTypeID
EmploymentTypeID
NOT NULL
Type
EmploymentType
NOT NULL
Transact-SQL syntax
CREATE TABLE [dbo].[EmploymentType](
[EmploymentTypeID] [varchar](2) NOT NULL,
[Type] [varchar](50) NOT NULL,
CONSTRAINT [PK_EmploymentType] PRIMARY KEY CLUSTERED
(
[EmploymentTypeID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
SubjectExpert
Domain SubjectExpertID
Auto number
Domain EmpID
Domain SubjectLevelID
Domain SinceDate
Domain YearsExperience
SubjectExpert (
SubjectExpertID
SubjectExpertID
NOT NULL
EmpID
EmpID
NOT NULL
SubjectLevelID
SubjectLevelID
NOT NULL
SinceDate
Date
NOT NULL
Transact-SQL syntax
CREATE TABLE [dbo].[SubjectExpert](
[SubjectExpertID] [int] IDENTITY(1,1) NOT NULL,
[EmpID] [varchar](6) NOT NULL,
[SubjectLevelID] [varchar](10) NOT NULL,
[SinceDate] [datetime] NOT NULL,
[YearsExperience] AS (floor(datediff(day,[SinceDate],getdate())/
(365.25))),
CONSTRAINT [PK_SubjectExpert] PRIMARY KEY CLUSTERED
(
[SubjectExpertID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
ALTER TABLE [dbo].[SubjectExpert] WITH CHECK ADD CONSTRAINT
[FK_SubjectExpert_SubjectLevel] FOREIGN KEY([SubjectLevelID])
REFERENCES [dbo].[SubjectLevel] ([SubjectLevelID])
ON UPDATE CASCADE
ALTER TABLE [dbo].[SubjectExpert] WITH CHECK ADD CONSTRAINT
[CK_SinceDate] CHECK ((floor(datediff(day,[SinceDate],getdate())/
(365.25))>=(2)))
SubjectTeach
Domain EmpID
Domain SubjectLevelID
Domain YearSession
SubjectTeach (
EmpID
EmpID
NOT NULL
SubjectLevelID
SubjectLevel
NOT NULL
Date
Date
NOT NULL
Description
Decription
NOT NULL
Transact-SQL syntax
CREATE TABLE [dbo].[SubjectTeach](
[EmpID] [varchar](6) NOT NULL,
[SubjectLevelID] [varchar](10) NOT NULL,
[YearSession] [int] NOT NULL CONSTRAINT [DF_SubjectTeach_year]
DEFAULT (datepart(year,getdate())),
CONSTRAINT [PK_SubjectTeach_1] PRIMARY KEY CLUSTERED
(
[EmpID] ASC,
[SubjectLevelID] ASC,
[YearSession] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
ALTER TABLE [dbo].[SubjectTeach] WITH CHECK ADD CONSTRAINT
[FK_SubjectTeach_SubjectLevel] FOREIGN KEY([SubjectLevelID])
REFERENCES [dbo].[SubjectLevel] ([SubjectLevelID])
ON UPDATE CASCADE
EmpQualification
Domain EmpID
Domain QualificationID
Domain QualificationName
Domain InstitutionName
Domain YearAttended
Integer
Domain HighestFlag
bit
EmpQualification (
EmpID
EmpID
NOT NULL
QualificationID
Qualification
NOT NULL
QualificationName
Qualification
NOT NULL
InsitutationName
InsitutationName
NOT NULL
YearAttended
YearAttended
NOT NULL
HighestFlag
HighestFlag
NOT NULL
Transact-SQL syntax
CREATE TABLE [dbo].[EmpQualification](
[EmpID] [varchar](6) NOT NULL,
[QualificationID] [varchar](6) NOT NULL,
[QualificationName] [nvarchar](100) NOT NULL,
[InstitutionName] [nvarchar](100) NULL,
[YearAttended] [int] NULL,
[HighestFlag] [bit] NOT NULL CONSTRAINT
[DF_EmpQualification_HighestFlag] DEFAULT ((1)),
CONSTRAINT [PK_EmpQualification] PRIMARY KEY CLUSTERED
(
[EmpID] ASC,
[QualificationID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
ALTER TABLE [dbo].[EmpQualification] WITH CHECK ADD
[FK_EmpQualification_Employee] FOREIGN KEY([EmpID])
REFERENCES [dbo].[Employee] ([EmpID])
ON UPDATE CASCADE
ON DELETE CASCADE
CONSTRAINT
SubjectLevel
Domain SubjectLevelID
Domain SubjectID
Domain LevelID
Domain Description
SubjectLevel (
SubjectLevelID
SubjectLevel
NOT NULL
SubjectID
Subject
NOT NULL
LevelID
Level
NOT NULL
Description
Description
NOT NULL
Transact-SQL syntax
CREATE TABLE [dbo].[SubjectLevel](
[SubjectLevelID] [varchar](10) NOT NULL,
[SubjectID] [varchar](6) NOT NULL,
[LevelID] [varchar](6) NOT NULL,
[Description] [varchar](50) NOT NULL,
CONSTRAINT [PK_SubjectLevel] PRIMARY KEY CLUSTERED
(
[SubjectLevelID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
ALTER TABLE [dbo].[SubjectLevel] WITH CHECK ADD
[FK_SubjectLevel_Level] FOREIGN KEY([LevelID])
REFERENCES [dbo].[Level] ([LevelID])
ON UPDATE CASCADE
CONSTRAINT
Subject
Domain SubjectlID
Domain Subject
Subject (
SubjectID
SubjectID
NOT NULL
Subject
Subject
NOT NULL
Transact-SQL syntax
CREATE TABLE [dbo].[Subject](
[SubjectID] [varchar](6) NOT NULL,
[Subject ] [varchar](50) NOT NULL,
CONSTRAINT [PK_Subject] PRIMARY KEY CLUSTERED
(
[SubjectID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
Level
Domain LevelID
Domain Level
Level (
LevelID
LevelID
NOT NULL
Level
Level
NOT NULL
Transact-SQL syntax
CREATE TABLE [dbo].[Level](
[LevelID] [varchar](6) NOT NULL,
[Level] [nvarchar](50) NOT NULL,
CONSTRAINT [PK_Level] PRIMARY KEY CLUSTERED
(
[LevelID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
Qualification
Domain QualificationID
Domain QualificationName
Qualification (
QualificationID
QualificationName
QualificationID
NOT NULL
QualificationName
NOT NULL
Transact-SQL syntax
CREATE TABLE [dbo].[Qualification](
[QualificationID] [varchar](6) NOT NULL,
[Description] [nvarchar](50) NOT NULL,
CONSTRAINT [PK_Qualification] PRIMARY KEY CLUSTERED
(
[QualificationID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
Constraint 1: Only teachers who have at least 2 years teaching experience for the
respective subject and level will be considered as an Expert for that particular
subject and level.
CONSTRAINT [CK_SinceDate]
CHECK((floor(datediff(day,[SinceDate],getdate())/(365.25))>=(2)))
The following INSERT statement should fail with the error shown below.
Constraint 2: Teacher is not allowed to teach more than 5 subjects level in one year
session
This constraint is implemented by using triggers
Create TRIGGER [CheckNoOfTeacherSubjectTeach] ON [dbo].[SubjectTeach]
FOR INSERT
AS
IF EXISTS (SELECT EmpID
FROM [SubjectTeach]
GROUP BY EmpID, YearSession
HAVING COUNT(*) > 5)
BEGIN
RAISERROR('You cannot add more than 5 subject level for each teacher in
one session!',16,1)
ROLLBACK
RETURN
END
The following INSERT statement should fail with the error shown below.
A
I
R U D I R U D I R U D I R U D
Employee
X X X
JobStatus
Race
Gender
Family
FamilyRelationshi
p
Branch
Department
Designation
EmploymentType
StatusOfMarriage
Religion
Level
Subject
SubjectLevel
SubjectExpert
SubjectTeach
Qualification
EmpQualification
X
X
avg = 200
max = 300
avg = 10
max = 20
Transaction by year
avg = 10
max = 20
Em
0..1 0..3
is a
0..1
1..*
teachrefers tore
0..*
1..1
1..*
1..1
refers to
Subj
1..
refe
JOBSTATUS
RACE
GENDER
FAMILY
FAMILYRELATIONSHIP
BRANCH
DESIGNATION
EMPLOYMENTTYPE
9.
STATUSOFMARRIAGE
10. RELIGION
11.
LEVEL
12. SUBJECT
13. QUALIFICATION
B+ Tree
The second structure is the organization selected B + Tree. The purpose of selecting
B+Tree file organization because it is quite efficient in achieving the data based on the
range given to achieve the data. B + Tree file organization also has a dynamic structure
during data growth up in a relationship. Apart from these factors, B + Tree chosen for
Microsoft SQL Serverwill place the data in the organization B + Tree, if a particular
relationship has a tuple that is classified as clustered.
Here is a relation that used the B+Tree file organization:
1. EMPLOYEE
2. SUBJECTEXPERT
3. SUBJECTTEACH
4. EMPQUALIFICATION
5. SUBJECTLEVEL
6. DEPARTMENT
Attribute: DepartmentID
CLUSTERED: Yes
UNIQUE: Yes
DESIGNATION
ii
Attribute: DesignationID
CLUSTERED: Yes
UNIQUE: Yes
Coordinator view can view teacher records including personal data (except
salary column), qualification, subject teached and subject expert.
Teacher view can view their own personal data, family, qualification, subject
teached and subject expert
Staff view can view their own personal data, family and qualification
GO
GRANT
GO
GRANT
GO
GRANT
GO
GRANT
GO
GRANT
GO
GRANT
GO
GRANT
GO
GRANT
GO
GRANT
GO
GRANT
GO