4th Sem DBMS LAB Manual
4th Sem DBMS LAB Manual
2023-2024
Database Management Laboratory
BCS403
TABLE OF CONTENTS
Sl.NO Experiments
1 Create a table called Employee & execute the following.
Employee(EMPNO,ENAME,JOB, MANAGER_NO, SAL, COMMISSION)
1. Create a user and grant all permissions to the user.
2. Insert the any three records in the employee table contains attributes EMPNO,ENAME JOB,
MANAGER_NO, SAL, COMMISSION and use rollback. Check the result.
3. Add primary key constraint and not null constraint to the employee table.
4. Insert null values to the employee table and verify the result.
2 Create a table called Employee that contain attributes EMPNO,ENAME,JOB, MGR,SAL & execute
the following.
1. Add a column commission with domain to the Employeetable.
2. Insert any five records into the table.
3. Update the column details of job
4. Rename the column of Employ table using alter command.
5. Delete the employee whose Empno is 105.
3 Queries using aggregate functions (COUNT,AVG,MIN,MAX,SUM),Group by,Orderby.
Employee(E_id, E_name, Age, Salary)
1. Create Employee table containing all Records E_id, E_name, Age, Salary.
2. Count number of employee names from employeetable
3. Find the Maximum age from employee table.
4. Find the Minimum age from employeetable.
5. Find salaries of employee in Ascending Order.
6. Find grouped salaries of employees.
4 Create a row level trigger for the customers table that would fire for INSERT or UPDATE or
DELETE operations performed on the CUSTOMERS table. This trigger will display the salary
difference between the old & new Salary.
CUSTOMERS(ID,NAME,AGE,ADDRESS,SALARY)
5 Create cursor for Employee table & extract the values from the table. Declare the variables
, Open the cursor & extrct the values from the cursor. Close the cursor.
Employee (E_id, E_name, Age, Salary)
6 Write a PL/SQL block of code using parameterized Cursor, that will merge the data available in the
newly created table N_RollCall with the data available in the table O_RollCall. If the
data in the first table already exist in the second table then that data should be skipped.
7 Install an Open Source NoSQL Data base MangoDB & perform basic CRUD(Create, Read,
Update & Delete) operations. Execute MangoDB basic Queries using CRUD operations.
Course outcomes (Course Skill Set):
At the end of the course, the student will be able to:
● Describe the basic elements of a relational database management system
● Design entity relationship for the given scenario.
● Apply various Structured Query Language (SQL) statements for database manipulation.
● Analyze various normalization forms for the given application.
● Develop database applications for the given real-world problem.
● Understand the concepts related to NoSQL databases.
Assessment Details (both CIE and SEE)
The weightage of Continuous Internal Evaluation (CIE) is 50% and for Semester End Exam (SEE) is 50%. The minimum
passing mark for the CIE is 40% of the maximum marks (20 marks out of 50) and for the SEE minimum
passing mark is 35% of the maximum marks (18 out of 50 marks). A student shall be deemed to have
satisfied the academic requirements and earned the credits allotted to each subject/ course if the student
secures a minimum of 40% (40 marks out of 100) in the sum total of the CIE (Continuous Internal
Evaluation) and SEE (Semester End Examination) taken together.
CIE for the theory component of the IPCC (maximum marks 50)
● IPCC means practical portion integrated with the theory of the course.
● CIE marks for the theory component are 25 marks and that for the practical component is 25 marks.
● 25 marks for the theory component are split into 15 marks for two Internal Assessment Tests (Two
Tests, each of 15 Marks with 01-hour duration, are to be conducted) and 10 marks for other assessment
methods mentioned in 22OB4.2. The first test at the end of 40-50% coverage of the syllabus and the
second test after covering 85-90% of the syllabus.
● Scaled-down marks of the sum of two tests and other assessment methods will be CIE marks
for the theory component of IPCC (that is for 25 marks).
● The student has to secure 40% of 25 marks to qualify in the CIE of the theory component of IPCC.
CIE for the practical component of the IPCC
● 15 marks for the conduction of the experiment and preparation of laboratory record, and 10 marks for
the test to be conducted after the completion of all the laboratory sessions.
● On completion of every experiment/program in the laboratory, the students shall be evaluated
including viva-voce and marks shall be awarded on the same day.
● The CIE marks awarded in the case of the Practical component shall be based on the continuous
evaluation of the laboratory report. Each experiment report can be evaluated for 10 marks. Marks of all
experiments’ write-ups are added and scaled down to 15 marks.
● The laboratory test (duration 02/03 hours) after completion of all the experiments shall be conducted
for 50 marks and scaled down to 10 marks.
● Scaled-down marks of write-up evaluations and tests added will be CIE marks for the laboratory
component of IPCC for 25 marks.
● The student has to secure 40% of 25 marks to qualify in the CIE of the practical component of the IPCC.
DAYANANDA SAGAR ACADEMY OF TECHNOLOGY & MANAGEMENT
(Affiliated to Visvesvaraya Technological University,Belagavi & Approved by AICTE,New Delhi)
Opp. Art of Living, Udayapura, Kanakapura Road, Bangalore – 560082
DEPARTMENT OF INFORMATION SCIENCE & ENGINEERING
Accredited by NBA, New Delhi
To strive at creating the institution a center of highest caliber of learning, so as to create an overall
intellectual atmosphere with each deriving strength from the other to be the best of engineers, scientists
with management &design skills.
To serve its region, state, the nation and globally by preparing students to make
meaningful contributions in an increasing complex global society challenges.
To encourage, reflection on and evaluation of emerging needs and priorities with state of art
infrastructure at institution.
To support research and services establishing enhancements in technical, health, economic, human and
cultural development.
To establish inter disciplinary center of excellence, supporting/ promoting student’s implementation.
To increase the number of Doctorate holders to promote research culture on campus.
To establish IIPC, IPR, EDC, innovation cells with functional MOU’s supporting student’s quality
growth.
DAYANANDA SAGAR ACADEMY OF TECHNOLOGY & MANAGEMENT
(Affiliated to Visvesvaraya Technological University,Belagavi & Approved by AICTE,New Delhi)
Opp. Art of Living, Udayapura, Kanakapura Road, Bangalore – 560082
DEPARTMENT OF INFORMATION SCIENCE & ENGINEERING
Accredited by NBA, New Delhi
QUALITY POLICY
Impart magnificent learning atmosphere establishing innovative practices among the students aiming to
strengthen their software application knowledge and technical skills.
PEO1: Graduates shall have successful careers as information science engineers and will be able to lead and
manage teams across the globe.
PEO2: Graduates shall be professional in engineering practice and shall demonstrate good problem solving,
communication skills and contribute to address societal issues.
PEO3: Graduates shall be pursuing distinctive education, entrepreneurship and research in an excellent
environment which helps in the process of life-long learning.
DAYANANDA SAGAR ACADEMY OF TECHNOLOGY & MANAGEMENT
(Affiliated to Visvesvaraya Technological University,Belagavi & Approved by AICTE,New Delhi)
Opp. Art of Living, Udayapura, Kanakapura Road, Bangalore – 560082
DEPARTMENT OF INFORMATION SCIENCE & ENGINEERING
Accredited by NBA, New Delhi
SEMESTER: IV
Course Outcomes
At the end of the course the student will be able to:
CO4 Implementation application using database concepts for real time requirements
through mini projects.
DBMS Lab Manual
INTRODUCTION TO SQL
REQUIREMENTS:
DATA TYPES
Numeric: NUMBER, NUMBER(s,p), INTEGER, INT, FLOAT, DECIMAL
Character: CHAR(n), VARCHAR(n), VARCHAR2(n), CHAR VARYING(n)
Bit String: BLOB, CLOB
Boolean: true, false, and null
Date and Time: DATE (YYYY-MM-DD) TIME( HH:MM:SS)
Timestamp: DATE + TIME
USER Defined types
CREATE SCHEMA
Specifies a new database schema by giving it a name
CREATE TABLE
Specifies a new base relation by giving it a name, and specifying each of its attributes and
their data types
Syntax of CREATE Command:
CREATE TABLE <table name>( <AttributeA1><Data TypeD1> [<
Constarints>],<Attribute A2><Data Type D2> [< Constarints>],
…….
<Attribute An><Data Type Dn> [< Constarints>],
[<integrity-constraint1>, <integrity-constraint k> ] );
- A constraint NOT NULL may be specified on an
attribute A constraint NOT NULL may be specified on an
attribute Ex: CREATE TABLE DEPARTMENT (
DNAME VARCHAR(10) NOT NULL,
DNUMBER INTEGER NOT NULL,
MGRSSN CHAR(9), MGRSTARTDATE CHAR(9) );
Specifying the unique, primary key attributes, secondary keys, and referential integrity
constraints (foreign keys).
Ex: CREATE TABLE DEPT ( DNAME
VARCHAR(10) NOT NULL,
DNUMBER INTEGER NOT NULL,
MGRSSN CHAR(9),
MGRSTARTDATE CHAR(9),
PRIMARY KEY (DNUMBER),
UNIQUE (DNAME),
FOREIGN KEY (MGRSSN) REFERENCES EMP(SSN));
ALTER TABLE:
Used to add an attribute to/from one of the base relations drop constraint -- The new
attribute will have NULLs in all the tuples of the relation right after the command is
executed; hence, the NOT NULL constraint is not allowed for such an attribute.
Example: ALTER TABLE EMPLOYEE ADD JOB VARCHAR2 (12);
The database users must still enter a value for the new attribute JOB for each
EMPLOYEE tuple. This can be done using the UPDATE command.
In Q2, there are two join conditions The join condition DNUM=DNUMBER relates a project to
its controlling department The join condition MGRSSN=SSN relates the controlling department
to the employee who manages that department
UNSPECIFIED WHERE-clause
A missing WHERE-clause indicates no condition; hence, all tuples of the relations in the
FROM-clause are selected. This is equivalent to the condition WHERE TRUE Example:
Note: It is extremely important not to overlook specifying any selection and join conditions inthe
WHERE-clause; otherwise, incorrect and very large relations may result
USE OF *
To retrieve all the attribute values of the selected tuples, a * is used, which stands for all the
attributes
Examples:
Retrieve all the attribute values of EMPLOYEES who work in department 5.
Q1a: SELECT * FROM EMPLOYEE WHERE DNO=5
Retrieve all the attributes of an employee and attributes of DEPARTMENT he works in for
every employee of ‘Research’ department.
USE OF DISTINCT
SQL does not treat a relation as a set; duplicate tuples can appear. To eliminate duplicate
tuples in a query result, the keyword DISTINCT is used
Example: the result of Q1c may have duplicate SALARY values whereas Q1d does not have any
duplicate values
SET OPERATIONS
SQL has directly incorporated some set operations such as union operation (UNION), set
difference (MINUS) and intersection (INTERSECT) operations. The resulting relations of these
set operations are sets of tuples; duplicate tuples are eliminated from the result. The set
operations apply only to union compatible relations; the two relations must have the same
attributes and the attributes must appear in the same order
Query 5: Make a list of all project numbers for projects that involve an employee whose
last name is 'Smith' as a worker or as a manager of the department that controls the
project.
Q5: (SELECT PNAME FROM PROJECT, DEPARTMENT, EMPLOYEE WHERE
DNUM=DNUMBER AND MGRSSN=SSN AND LNAME='Smith')
UNION
NESTING OF QUERIES
A complete SELECT query, called a nested query, can be specified within the WHERE-
clause of another query, called the outer query. Many of the previous queries can be specified in
an alternative form using nesting
Query 6: Retrieve the name and address of all employees who work for the 'Research'
department.
Note: In Q8, the correlated nested query retrieves all DEPENDENT tuples related to
anEMPLOYEE tuple. If none exist, the EMPLOYEE tuple is selected
EXPLICIT SETS
It is also possible to use an explicit (enumerated) set of values in the WHERE-clause
rather than a nested query
Query 9: Retrieve the social security numbers of all employees who work on project
number 1, 2, or 3.
Note: If a join condition is specified, tuples with NULL values for the join attributes are
notincluded in the result
AGGREGATE FUNCTIONS
Include COUNT, SUM, MAX, MIN, and AVG
Query 11: Find the maximum salary, the minimum salary, and the average salary among
all employees.
Q11: SELECT MAX (SALARY), MIN(SALARY), AVG(SALARY)
FROM EMPLOYEE
Note: Some SQL implementations may not allow more than one function in the SELECT-clause
Query 12: Find the maximum salary, the minimum salary, and the average salary among
employees who work for the 'Research' department.
Q12: SELECT MAX (SALARY), MIN(SALARY), AVG(SALARY) FROM
EMPLOYEE, DEPARTMENT WHERE DNO=DNUMBER AND DNAME='Research'
Queries 13 and 14: Retrieve the total number of employees in the company (Q13), and the
number of employees in the 'Research' department (Q14).
Q13: SELECT COUNT (*) FROM EMPLOYEE
Q14: SELECT COUNT (*) FROM EMPLOYEE, DEPARTMENT
GROUPING
In many cases, we want to apply the aggregate functions to subgroups of tuples in a
relation
Each subgroup of tuples consists of the set of tuples that have the same value for the
grouping attribute(s)
The function is applied to each subgroup independently
SQL has a GROUP BY-clause for specifying the grouping attributes, which must also
appear in the SELECT-clause
Query 15: For each department, retrieve the department number, the number of
employees in the department, and their average salary.
Q15: SELECT DNO, COUNT (*), AVG (SALARY)
FROM EMPLOYEE GROUP BY DNO
In Q15, the EMPLOYEE tuples are divided into groups. Each group having the same
value for the grouping attribute DNO
The COUNT and AVG functions are applied to each such group of tuples separately
The SELECT-clause includes only the grouping attribute and the functions to be applied
on each group of tuples
A join condition can be used in conjunction with grouping
Query 16: For each project, retrieve the project number, project name, and the number of
employees who work on that project.
Q16: SELECT PNUMBER, PNAME, COUNT (*)
THE HAVING-CLAUSE
Sometimes we want to retrieve the values of these functions for only those groups that
satisfy certain conditions. The HAVING-clause is used for specifying a selection condition on
groups (rather than on individual tuples)
Query 17: For each project on which more than two employees work, retrieve the project
number, project name, and the number of employees who work on that project.
Q17: SELECT PNUMBER, PNAME, COUNT
(*) FROM PROJECT, WORKS_ON WHERE
PNUMBER=PNO GROUP BY PNUMBER,
PNAME
SUBSTRING COMPARISON
The LIKE comparison operator is used to compare partial strings. Two reserved
characters are used: '%' (or '*' in some implementations) replaces an arbitrary number of
characters, and '_' replaces a single arbitrary character.
Query 18: Retrieve all employees whose address is in Houston, Texas. Here, the value of the
ADDRESS attribute must contain the substring 'Houston,TX‘ in it.
Q18: SELECT FNAME, LNAME
FROM EMPLOYEE WHERE ADDRESS LIKE '%Houston,TX%'
Query 19: Retrieve all employees who were born during the 1950s.
Here, '5' must be the 8th character of the string (according to our format for date), so the
BDATE value is ' 5_', with each underscore as a place holder for a single arbitrary
character.
Q19: SELECT FNAME, LNAME
FROM EMPLOYEE WHERE BDATE LIKE '_ 5_’
Note: The LIKE operator allows us to get around the fact that each value is considered atomic
and indivisible. Hence, in SQL, character string attribute values are not atomic
ARITHMETIC OPERATIONS
The standard arithmetic operators '+', '-'. '*', and '/' (for addition, subtraction,
multiplication, and division, respectively) can be applied to numeric values in an SQL query
result
Query 20: Show the effect of giving all employees who work on the 'ProductX' project a
10% raise.
Q20: SELECT FNAME, LNAME, 1.1*SALARY
FROM EMPLOYEE, WORKS_ON, PROJECT
WHERE SSN=ESSN
AND PNO=PNUMBER AND PNAME='ProductX’
ORDER BY
The ORDER BY clause is used to sort the tuples in a query result based on the values of
some attribute(s)
Query 21: Retrieve a list of employees and the projects each works in, ordered by the
employee's department, and within each department ordered alphabetically by employee
last name.
Q21: SELECT DNAME, LNAME, FNAME, PNAME
FROM DEPARTMENT, EMPLOYEE, WORKS_ON, PROJECT
WHERE DNUMBER=DNO
AND SSN=ESSN
AND PNO=PNUMBER
ORDER BY DNAME, LNAME
The default order is in ascending order of values. We can specify the keyword DESC if
we want a descending order; the keyword ASC can be used to explicitly specify ascending order,
even though it is the default
Ex: ORDER BY DNAME DESC, LNAME ASC, FNAME ASC
Query 22: Retrieve the names of all employees who have two or more dependents.
Q22: SELECT LNAME, FNAME FROM
EMPLOYEE
There are three SQL commands to modify the database: INSERT, DELETE, and UPDATE.
INSERT
Note: The DEPTS_INFO table may not be up-to-date if we change the tuples in either
theDEPARTMENT or the EMPLOYEE relations after issuing the above. We have to create a
view (see later) to keep such a table up to date.
DELETE
Removes tuples from a relation. Includes a WHERE-clause to select the tuples to be
deleted
Referential integrity should be enforced
Tuples are deleted from only one table at a time (unless CASCADE is specified on a
referential integrity constraint)
A missing WHERE-clause specifies that all tuples in the relation are to be deleted; the
table then becomes an empty table
The number of tuples deleted depends on the number of tuples in the relation that satisfy
the WHERE-clause
Examples:
1: DELETE FROM EMPLOYEE WHERE LNAME='Brown’;
2: DELETE FROM EMPLOYEE WHERE SSN='123456789’;
3: DELETE FROM EMPLOYEE WHERE DNO IN (SELECT DNUMBER
FROM DEPARTMENT WHERE DNAME='Research');
UPDATE
Used to modify attribute values of one or more selected tuples
A WHERE-clause selects the tuples to be modified
An additional SET-clause specifies the attributes to be modified and their new values
Each command modifies tuples in the same relation
Referential integrity should be enforced
Example1: Change the location and controlling department number of project number 10
to'Bellaire' and 5, respectively.
UPDATE PROJECT
SET PLOCATION = 'Bellaire', DNUM = 5 WHERE PNUMBER=10;
Example2: Give all employees in the 'Research' department a 10% raise in salary.
UPDATE EMPLOYEE
SET SALARY = SALARY *1.1
WHERE DNO IN (SELECT DNUMBER FROM DEPARTMENT
WHERE DNAME='Research');
SQL TRIGGERS
Objective: to monitor a database and take initiate action when a condition occurs
Triggers are nothing but the procedures/functions that involve actions and fired/executed
automatically whenever an event occurs such as an insert, delete, or update operation or
pressing a button or when mouse button is clicked
VIEWS IN SQL
A view is a single virtual table that is derived from other tables. The other tables could be
base tables or previously defined view.
Allows for limited update operations Since the table may not physically be stored
Allows full query operations
A convenience for expressing certain operations
A view does not necessarily exist in physical form, which limits the possible update
operations that can be applied to views.
LAB EXPERIMENTS
ROLLBACK;
4.Add primary key constraint and not null constraint to the employee table
ALTER TABLE Employee
ADD CONSTRAINT PK_Employee PRIMARY KEY (EMPNO);
5. Insert null values into the employee table and verify the result
OUTPUT:
2. Create a table called Employee that contain attributes EMPNO, ENAME, JOB, MGR, SAL
and execute the following.
1. Add a column commission with domain to the Employee table.
2. Insert any five records into the table.
3. Update the column details of job
4. Rename the column of Employ table using alter command.
5. Delete the employee whose Empno is 105.
1. Create the Employee table with attributes EMPNO, ENAME, JOB, MGR, SAL
Select*from Employee;
OUTPUT:
35
50000.00 1
45000.00 1
60000.00 1
52000.00 1
55000.00 1
4.Create a row level trigger for the customers table that would fire for INSERT or UPDATE or DELETE operations
performed on the CUSTOMERS table. This trigger will display the
salary difference between the old & new Salary. CUSTOMERS(ID,NAME,AGE,ADDRESS,SALARY)
IF DELETING THEN
old_salary := NVL(:OLD.SALARY, 0);
new_salary := 0;
END IF;
-- Increment sequence
SELECT salary_diff_seq.NEXTVAL INTO NULL FROM DUAL;
Dept. Of ISE, DSATM 2023-2024 Page 24
DBMS Lab Manual BCS403
END;
/
5.Create cursor for Employee table & extract the values from the table. Declare the variables
,Open the cursor & extract the values from the cursor. Close the cursor.
Employee(E_id, E_name, Age, Salary).
DECLARE
-- Declare variables to hold values from the cursor
v_E_id Employee.E_id%TYPE;
v_E_name Employee.E_name%TYPE;
v_Age Employee.Age%TYPE;
v_Salary Employee.Salary%TYPE;
6.Write a PL/SQL block of code using parameterized Cursor, that will merge the data available in the newly created
table N_RollCall with the data available in the table O_RollCall. If the data in the first table already exist in the
second table, then that data should be skipped.
delimiter //
create procedure p3(in r1 int)
begin
declare r2 int;
declare exit_loop boolean;
declare c1 cursor for select roll_no from o_rollcall
where roll_no>r1;
declare continue handler for not found set
exit_loop=true;
open c1;
e_loop:loop
fetch c1 into r2;
if not exists(select * from n_rollcall where
roll_no=r2)
then
insert into n_rollcall select * from o_rollcall where
roll_no=r2;
end if;
if exit_loop
then
close c1;
leave e_loop;
end if;
end loop e_loop;
end
//
call p3(3);
select * from n_rollcall;
call p3(0);
select * from n_rollcall;
Dept. Of ISE, DSATM 2023-2024 Page 26
DBMS Lab Manual BCS403
insert into o_rollcall values('6','Patil','Kolhapur');
call p3(4);
OUTPUT:
Roll
Name Address
no
4 Kalpesh Dhule
5 Abhi Satara
1 Hitesh Nandura
1 Hitesh Nandura
2 Piyush MP
3 Ashley Nsk
6 Patil Kolhapur
7. Install an Open Source NoSQL Data base MangoDB & perform basic CRUD(Create, Read, Update & Delete) operations.
Execute MangoDB basic Queries using CRUD operations.
Installation:
1. Download the MongoDB Installer:
Visit the official MongoDB download center:
URL: https://www.mongodb.com/try/download/community
Select the appropriate version (latest stable is recommended for most cases).
Under "Platform," choose "Windows."
For "Package," select "MSI."
Click "Download."
6. Verify Installation
Read Operation
Click on a specific collection to view its contents.
To filter the contents, enter the query in the filter box.
Update Operation
Select the desired collection and click on Update button to modify the values of a record. Set new values for the desired fields.
Delete Operation
Click on the Delete button to delete records of a specific collection.
Viva Questions
1. What is SQL?
Structured Query Language
2. What isdatabase?
A database is a logically coherent collection of data with some inherent meaning,
representing some aspect of real world and which is designed, built and populated with data
for a specificpurpose.
3. What isDBMS?
It is a collection of programs that enables user to create and maintain a database. In other
words it is general-purpose software that provides the users with the processes of defining,
constructing and manipulating the database for various applications.
4. What is a Databasesystem?
The database and DBMS software together is called as Database system.
5. Advantages ofDBMS?
Redundancy iscontrolled.
Unauthorized access isrestricted.
Providing multiple userinterfaces.
Enforcing integrityconstraints.
Providing backup andrecovery.
6. Disadvantage in File ProcessingSystem?
Data redundancy &inconsistency.
Difficult in accessingdata.
Dataisolation.
Dataintegrity.
Concurrent access is notpossible.
SecurityProblems.
7. Describe the three levels of dataabstraction?
There are three levels of abstraction:
Physical level: The lowest level of abstraction describes how data arestored.
Logical level: The next higher level of abstraction, describes what data are stored in
database and what relationship among those data.
fully functional dependency if removal of any attribute A from X means that the dependency
does not hold anymore.
31. What is2NF?
A relation schema R is in 2NF if it is in 1NF and every non-prime attribute A in R is fully
functionally dependent on primary key.
32. What is3NF?
A relation schema R is in 3NF if it is in 2NF and for every FD X A either of the
following istrue
X is a Super-key ofR.
A is a prime attribute ofR.
In other words, if every non prime attribute is non-transitively dependent on primary key.
33. What is BCNF (Boyce-Codd NormalForm)?
A relation schema R is in BCNF if it is in 3NF and satisfies additional constraints that for
every FD X A, X must be a candidate key.
34. What is4NF?
A relation schema R is said to be in 4NF if for every Multivalued dependency X Y
that holds over R, one of following istrue
X is subset or equal to (or) XY =R.
X is a superkey.
35. What is5NF?
A Relation schema R is said to be 5NF if for every join dependency {R1, R2, ...,Rn} that
holds R, one the following is true
Ri = R for somei.
The join dependency is implied by the set of FD, over R in which the left side is key ofR.
36. What is Domain-Key NormalForm?
A relation is said to be in DKNF if all constraints and dependencies that should hold on the
constraint can be enforced by simply enforcing the domain constraint and key constraint on the
relation.