بسم الله الرحمن الرحيم

Download Report

Transcript بسم الله الرحمن الرحيم

‫بسم هللا الرحمن الرحيم‬
‫)‪Lecture (10&11‬‬
‫‪1‬‬
Chapter 8
SQL-99: SchemaDefinition, Constraints,
and Queries and Views
2
‫لغة االستفسارات الهيكلية‬
‫)‪Structured Query Language (SQL‬‬
‫• تعتبر اللغة االساسية لكل قواعد البيانات العالئقية‬
‫)‪(Standard for Relational DBs‬‬
‫• السبب الرئيسي في انتشار ونجاح النموذج العالئقي ‪.‬‬
‫• تضم كل اللغات لقواعد البيانات (‪ (Comprehensive DB Language‬وتشمل‬
‫‪DDL + DML + VDL Commands‬‬
‫• وتمتاز أيضا بأنها ‪ More Declarative‬أي أن المستخدم يمكن أن يحدد ما يريد‬
‫دون االهتمام بطريقة التنفيذ‪.‬‬
‫تمتاز بسهولة الـ ‪.( user Friendly syntax) syntax‬‬
‫• النتيجة من أوامر الـ ‪ SQL‬ال تمثل عالقة‪.‬‬
‫‪3‬‬
‫• تستخدم الـ ‪ SQL‬المصلحات التالية ‪table ,row, column:‬‬
‫‪4‬‬
DDL Commands in SQL
• Schema Definition:
• Specifies a new database schema by giving it a name.
• Create Schema <Schema name> Authorization
<Owner name>;
• Example:
• Create Schema FMS Authorization Ali;
FMS ‫إسم خارطة قاعدة البيانات‬
Ali ‫اسم ممتلك خارطة قاعدة البيانات‬
‫ ) ومنح الصالحيات‬drop, Modify, Insert,…( ‫ له الصالحيات‬Ali
.‫للمستخدمين‬
.domains ‫ الـ‬، ‫ المرئيات‬، ‫ القيود‬، ‫ هي الجداول‬Schema ‫عناصر الـ‬
5
•
•
•
•
:‫• إنشاء جدول (عالقة) جديد مع تحديد الصفات واسم العالقة والقيود‬
• CREATE TABLE: Specifies a new base relation by
giving it a name, and specifying each of its attributes and
their data types (INTEGER, FLOAT, DECIMAL(i,j),
CHAR(n), VARCHAR(n))
• A constraint NOT NULL may be specified on an attribute
6
:‫مثال‬
Create table FMS.Students
(StdNo varchar(6) Not Null,
StdName varchar(30) Not Null,
Address varchar(40),
CourseNo varchar(10),
Primary Key (stdNo),
Foreign Key(CourseNo) References Courses (CNo) );
Create table Courses
(CNo varchar(10) Not Null,
CName varchar(20) Not Null,
Dept varchar(30),
UNIQUE (CNAME),
Primary key(CNo));
. SQL Data Types ‫راجع الـ‬
7
•
Create Domain:
• Create Domain Names As char (30);
‫ مثال في تعريف الجدول‬char(30) ‫ بدال عن‬Domain ‫يمكن استخدام اسم الـ‬
: Students
StdName Names
Not Null;
• Domain definition with Check clause:
• Create domain D-Num AS integer Check (D-Num>0 AND DNum<21)
• In table definition: either
• Dno
INT not Null check(Dno>0 and Dno<21) ,
OR
• Dno
D-NUM,
8
• Specifying constraints on tuples using Check:
Example
• At the end of create table statement of department table
you can add check clause as following :
• Check (dept_create_date <=Mgr_start_date);
9
‫‪Default value:‬‬
‫• يمكن تحديد ‪ Default value‬للصفة ‪.‬في حالة عدم تحديد‬
‫قيمة للصفة في أي صف يتم وضع الـ‪Default value‬‬
‫المحددة للصفة وفي حالة عدم تحديد ‪Default value‬‬
‫توضع القيمة ‪. Null‬‬
‫• مثال في تعريف الـ‪:Course table‬‬
‫‪• Dept varchar(30) default 'Computer' ,‬‬
‫‪10‬‬
:‫تحديد الخيارات في حالة أن العالقة بها مفتاح خارجي‬
•
ON Delete
ON Update
• set Null
• cascade
• set default
:Student ‫• مثال في الجدول‬
• Foreign Key (CourseNo) References Courses (CNo)
ON Delete set Null
ON update Cascade;
11
Example
• CREATE TABLE EMP(
ENAME
VARCHAR(30)
NOT NULL,
ESSN
CHAR(9),
BDATE
DATE,
DNO
INTEGER DEFAULT 1,
SUPERSSN
CHAR(9),
PRIMARY KEY (ESSN),
FOREIGN KEY (DNO) REFERENCES DEPT
ON DELETE SET DEFAULT ON UPDATE
CASCADE,
FOREIGN KEY (SUPERSSN) REFERENCES EMP ON
DELETE SET NULL ON UPDATE CASCADE);
12
13
‫‪• Drop Schema:‬‬
‫;‪Drop Schema FMS Cascade‬‬
‫•‬
‫مسح الـ‪ Schema‬ومتابعة حذف كل الجداول ‪ ،‬المرئيات ‪ ،‬المجاالت وكل‬
‫القيود الخاصة بالخارطة‪.‬‬
‫;‬
‫‪• Drop Schema FMS Restrict‬‬
‫• منع حذف الخارطة إذا كانت تحتوي علي أي جداول (حذف الجداول أوال ثم‬
‫حذف الخارطة)‪.‬‬
‫‪14‬‬
Drop table:
Drop table Students Cascade ;
.‫ المرئيات التابعة له وكل القيود التابعة له‬، ‫مسح الجدول‬
Alter table:
‫• إضافة أو حذف عمود في الجدول (تغيير تعريف الجدول) وإضافة‬
.‫أوحذ ف قيود الجدول‬
Alter table FMS.Courses Drop Column Dept Cascade ;
Alter table FMS.Students Add Column DeptNo varchar(30);
varchar(6) ‫ بدالعن‬varchar(10) ‫ الي‬StdNo ‫• تغيير نوع‬
• Alter table FMS.Students Alter column StdNo
varchar(10)
15
Cont.
• Alter table company.department Alter column Mgr_ssn
Drop Default;
• Alter table company.employee Alter column Mgr_ssn
set Default ’123445’;
• Alter table company.employee Drop Constraint
EMPSUPERFK Cascade;
16
‫‪DML Commands in SQL‬‬
‫•‬
‫•‬
‫•‬
‫•‬
‫•‬
‫•‬
‫االستفسارات األساسية في ‪:SQL‬‬
‫األمر األساسي لالستفسار أو االسترجاع هو ‪Select Statement‬‬
‫الصورة العامة ‪:‬‬
‫‪SELECT‬‬
‫>‪<attribute list‬‬
‫‪FROM‬‬
‫>‪<table list‬‬
‫‪WHERE‬‬
‫;>‪<Condition‬‬
‫‪:attribute list‬الصفات المراد استرجاع قيمها بواسطة االستفسار‪.‬‬
‫‪ : table list‬الجداول الالزمة لتنفيذ االستفسار‪.‬‬
‫‪ : Condition‬الشرط أو الشروط ‪Boolean Expression‬والتي تحدد‬
‫الصفوف المسترجعة من االستفسار‪.‬‬
‫‪17‬‬
‫‪DML Commands in SQL‬‬
‫•‬
‫•‬
‫•‬
‫•‬
‫•‬
‫•‬
‫االستفسارات األساسية في ‪:SQL‬‬
‫األمر األساسي لالستفسار أو االسترجاع هو ‪Select Statement‬‬
‫الصورة العامة ‪:‬‬
‫‪SELECT‬‬
‫>‪<attribute list‬‬
‫‪FROM‬‬
‫>‪<table list‬‬
‫‪WHERE‬‬
‫;>‪<Condition‬‬
‫‪:attribute list‬الصفات المراد استرجاع قيمها بواسطة االستفسار‪.‬‬
‫‪ : table list‬الجداول الالزمة لتنفيذ االستفسار‪.‬‬
‫‪ : Condition‬الشرط أو الشروط ‪Boolean Expression‬والتي تحدد‬
‫الصفوف المسترجعة من االستفسار‪.‬‬
‫‪18‬‬
)1(‫مثال‬
: Student, Project ‫• من الجداول السابقة‬
Query 1:
. 90 ‫استرجع اسماء وأرقام الطالب الذين أرقام مشاريعهم أكبر من‬
SELECT StdNo, Stdname FROM Student
WHERE Project No>90;
Result:
19
Std No
96-32
96-22
96-24
stdname
Taha
Mohd
Mohd
Query 2:
‫ورقم‬96-14 ‫( إذا كان رقم الطالب‬Parea) ‫استرجع اسماء الطالب ونوعية مشاريعهم‬
. 23 ‫المشروع‬
SELECT Stdname, Parea
FROM Student, Project
StdNo WHERE=‘96-14’
AND p.No=’23’
AND projectNo = P.No;
Result:
Stdname
Ali
20
P.area
Cs
‫• يمكن استخدام (‪ ).‬اذا كانت الصفتين تحمالن نفس االسم في الجدولين مثال‬
‫‪ Student.PNo‬و ‪. Project.PNo‬‬
‫• كذلك ايضا يمكن استخدام اسماء مستعارة للجداول ‪ Aliases‬وعليه يمكن إعادة‬
‫كتابة االستفسار (باستخدام (‪ ).‬وأسماء مستعارة للجدولين) علي النحو التالي‪:‬‬
‫‪SELECT S.Stdname, P.Parea‬‬
‫‪FROM Student AS S, Project AS P‬‬
‫'‪WHERE S.StdNo = '96-14‬‬
‫'‪AND S.ProjectNo= '23‬‬
‫;‪AND S.ProjectNo = P.PNo‬‬
‫‪21‬‬
• Query (3):
SELECT * FROM Students;
Select * ≡ Select All
Student ‫وتعني استرجاع كل الجدول‬
• Query (4):
SELECT * FROM Student WHERE ProjectNo = ‘56';
‫ والصفوف التي‬Student ‫• يعني هذا االستفسار استرجاع كل أعمدة الجدول‬
ProjectNo= 56 ‫تحقق الشرط‬
22
‫‪• Query (5):‬‬
‫;‪SELECT PNo FROM Projects‬‬
‫• يعني هذا االستفسار استرجاع كل صفوف العمود ‪. PNo‬‬
‫‪23‬‬
Relational Database Schema--Figure 5.5
24
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
• For example, the result of Q11 may have duplicate
SALARY values where as Q11A does not have any
duplicate values
Q11:
Q11A:
25
SELECT
FROM
SELECT
FROM
SALARY
EMPLOYEE
DISTINCT SALARY
EMPLOYEE
SET OPERATIONS
• SQL has directly incorporated some set operations
• There is a union operation (UNION), and in some
versions of SQL there are 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
26
SET OPERATIONS
• SQL has directly incorporated some set operations
• There is a union operation (UNION), and in some
versions of SQL there are 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
27
SET OPERATIONS (cont.)
• Query : 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.
Q: (SELECT
DISTINCT PNUBER
FROM
PROJECT, DEPARTMENT,
EMPLOYEE
WHERE
DNUM=DNUMBER AND
MGRSSN=SSN AND LNAME='Smith')
UNION
(SELECT
DISTINCT PNUBER
FROM
WHERE
28
PROJECT, WORKS_ON, EMPLOYEE
PNUMBER=PNO AND
ESSN=SSN AND NAME='Smith');
First select retrieves the projects that involve smiths as a manager
of the department that controls the projects.
AGGREGATE FUNCTIONS
• Include COUNT, SUM, MAX, MIN, and AVG
• Query 15: Find the maximum salary, the minimum
salary, and the average salary among all employees.
Q15:
SELECT
MAX(SALARY),
MIN(SALARY), AVG(SALARY)
FROM EMPLOYEE
• Some SQL implementations may not allow more than
one function in the SELECT-clause
29
AGGREGATE FUNCTIONS (cont.)
• Query 16: Find the maximum salary, the minimum
salary, and the average salary among employees who
work for the 'Research' department.
Q16:
SELECT
MAX(SALARY),
MIN(SALARY), AVG(SALARY)
FROM
EMPLOYEE, DEPARTMENT
WHERE
DNO=DNUMBER AND
DNAME='Research'
30
AGGREGATE FUNCTIONS (cont.)
• Queries 17 and 18: Retrieve the total number of
employees in the company (Q17), and the number of
employees in the 'Research' department (Q18).
31
Q17:
SELECT
FROM
COUNT (*)
EMPLOYEE
Q18:
SELECT
FROM
WHERE
COUNT (*)
EMPLOYEE, DEPARTMENT
DNO=DNUMBER AND
DNAME='Research’
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
32
GROUPING (cont.)
• Query 20: For each department, retrieve the department
number, the number of employees in the department, and their
average salary.
Q20:
SELECT
DNO, COUNT (*), AVG (SALARY)
FROM
EMPLOYEE
GROUP BY
DNO
– In Q20, 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
33
34
GROUPING (cont.)
• Query 21: For each project, retrieve the project number,
project name, and the number of employees who work
on that project.
Q21:
SELECT
FROM
WHERE
GROUP BY
PNUMBER, PNAME, COUNT (*)
PROJECT, WORKS_ON
PNUMBER=PNO
PNUMBER, PNAME
– In this case, the grouping and functions are applied after
the joining of the two relations
35
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)
36
THE HAVING-CLAUSE (cont.)
• Query 22: 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.
Q22:
SELECT
PNUMBER, PNAME,
COUNT(*)
FROM PROJECT, WORKS_ON
WHERE
PNUMBER=PNO
GROUP BY PNUMBER, PNAME
HAVING
COUNT (*) > 2
37
• Read (8.4.5 ,8.5.1, 8.5.2)
38
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 27: Show the effect of giving all employees who
work on the 'ProductX' project a 10% raise.
Q27:
FNAME, LNAME, 1.1*SALARY
EMPLOYEE, WORKS_ON,
PROJECT
WHERE
SSN=ESSN AND
PNO=PNUMBER AND PNAME='ProductX’
39
SELECT
FROM
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 28: 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.
Q28:
SELECT
FROM
WHERE
ORDER BY
40
DNAME, LNAME, FNAME, PNAME
DEPARTMENT, EMPLOYEE,
WORKS_ON, PROJECT
DNUMBER=DNO AND SSN=ESSN
AND PNO=PNUMBER
DNAME, LNAME
ORDER BY (cont.)
• 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.
41
Summary of SQL Queries
A query in SQL can consist of up to six clauses, but only
the first two, SELECT and FROM, are mandatory. The
clauses are specified in the following order:
<attribute list>
SELECT
<table list>
FROM
<condition>]
[WHERE
<grouping attribute(s)>]
[GROUP BY
<group condition>]
[HAVING
<attribute list>] [ORDER BY
42
•
)2(‫مثال‬
‫ والتي تحتوي‬University ‫• لتكن لدينا خارطة قاعدة البيانات‬
:‫علي الجداول التالية‬
Students (StdNo, StdName, City)
Courses (CNo, CName, SemNo)
StdCourses (StdNo, CNo, Score)
43
:‫حالة قاعدة البيانات الحالية علي النحو التالي‬
Student StdNo
44
StdName
City
S1
Ali
S2
John
S3
Courses
CNo
CName
Sem
No
Kassala
CS23
OP.SYS
Juba
CS25
P.L
Osman
Khartoum
CS99
DB
S4
Abbas
Medani
S90
S.Methods
S5
Ammar
Obaied
P99
group
S6
Ahmed
Omdurman
A55
complex
1
1
2
2
1
2
StdCourse
45
StdNo
CNo
Score
S1
CS23
90
S2
CS99
80
S3
CS23
70
S4
CS25
60
S5
CS25
75
S6
CS99
70
S1
CS99
70
• Query (1):
Select * from Courses where SemNo = ‘1’
Order by CNo;
•Result:
46
CNo
CName
SemNo
CS23
OP.SYS
1
CS25
P.L
1
P99
Group
1
‫‪Query (2):‬‬
‫• استرجع اسماء الطالب وأسماء الكورسات فقط للطالب الذين‬
‫درجاتهم أعلي من ‪. 40‬‬
‫‪47‬‬
Select S. StdName ,C. CName
From Students as S, Courses as C , StdCourse
as SC
Where SC.Score >40
And SC.CNo = C.CNo
And SC.StdNo =S.Std.No;
48
‫‪• Query (3):‬‬
‫• استرجع اسماء الطالب وأرقامهم وأرقام كورساتهم والدرجات التي تحصل عليها‬
‫الطالب في هذه الكورسات‬
‫‪49‬‬
Select S.StdName , S.StdNo ,SC.CNo ,SC.Score
from Students as S, StdCourse as CS
where S.StdNo = SC.StdNo;
50
‫االستفسارات المتداخلة (‪ ) Nested Queries‬باستخدام ‪ IN‬و ‪)NOT IN‬‬
‫‪• Query(4):‬‬
‫• استرجع اسماء كل الطالب الذين يدرسون الكورس ‪ C23‬ويدرسون أيضا‬
‫الكورس ‪.C99‬‬
‫‪51‬‬
Select StdName from Students as S,
StdCourses as SC
where CNo = '23'
and S.StdNo = SC.StdNo
and StdName IN (Select StdName from
Students as S, StdCourses as SC
where CNo = '99' and S.StdNo = SC.StdNo);
52
•
•
53
-: Insert ‫• األمر‬
‫• يستخدم الضافة صف جديد للعالقة‬
Insert Into <table name> values;
:‫• أمثلة‬
Insert Into <Students> values ('02-15', 'Osman',
'23');
Insert Into <Students> (StdNo, StdName')
values ('03-20', 'Ali');
-: Delete ‫األمر‬
‫يستخدم لحذف صف من العالقة‬
•
Delete from <table name> where <condition>;
:1‫مثال‬
•
•
54
•
•
•
Delete from <Students> where StdNo = '96-14';
.‫حذف الصف األول من العالقة‬
:1‫مثال‬
•
•
Delete from Students;
Students ‫حذف جميع الصفوف بالعالقة‬
•
•
55
-: Update ‫األمر‬
.‫يستخدم لتعديل بعض القيم في صفوف العالقة‬
:‫مثال‬
Update Students Set ProjectNo = '99'
Where StdNo = '96-14';
•
•
•
‫المرئيات‬
‫)‪Views(virtual tables‬‬
‫• المرئية هي جدول يمكن تكوينه من عدد من الجداول الموجودة في‬
‫قاعدة البيانات (الجداول القاعدية ) أو المرئيات المعرفة سابقا وتنشأ‬
‫باستخدام استفسار‪.‬‬
‫‪• Single table can be derived from other tables‬‬
‫‪(other tables means base tables for DB or‬‬
‫‪previously defined views).‬‬
‫‪56‬‬
:‫مثال‬
R
57
S#
sname college
Sport
GBA
10
Ali
Sc
BB
3
15
Taha
Eng
FB
1.5
20
Zaki
Eng
BB
2.5
25
Satti
Edu
FB
3.2
30 Fatima
FMS
TT
2.5
Sc
TT
1.5
40
Dalia
VDL COMMAND IN SQL
SQL ‫• إنشاء المرئيات باستخدام أوامر‬
Create view <viewname> As Select ........
-:)1( ‫مثال‬
Create view basket As
Select sname ,GBA
From R where sport='BB';
RESULT:
58
basket
Sname
GBA
Ali
3
zaki
2.5
‫مثال(‪: )2‬‬
‫‪Sport‬‬
‫‪sname‬‬
‫‪#S‬‬
‫‪BB‬‬
‫‪Ali‬‬
‫‪10‬‬
‫‪TT‬‬
‫‪Dalia‬‬
‫‪40‬‬
‫‪Ws‬‬
‫‪Create view Ws As‬‬
‫‪Select s#,sname ,sport‬‬
‫;'‪From R where college='sc‬‬
‫•خارطة قاعدة البيانات تحتوى على الجداول القاعدية والمرئيات‪ ,‬وتعامل المرئية‬
‫كالجداول القاعدية‪ .‬اى تعامل المرئيات في المثال ‪1‬و‪ 2‬كالجدول القاعدي‪.‬‬
‫•يمكن ل ال ‪ DBMS‬ان يحتفظ بالمرئية ( ‪ (physically‬حقيقة أو تبقيها مجرد‬
‫استفسار وتنشأ حين السؤال عنها ‪.‬‬
‫‪59‬‬
‫فوائد استخدام المرئيات‬
‫‪-1‬تستخدم كوسيلة استفسار جاهزة للمستخدمين من غير المبرمجين‪.‬‬
‫‪-2‬لتحسين األداء ‪(improved of performance) .‬‬
‫‪- .3‬كوسيلة تأمين (‪)security‬‬
‫وذلك بإعطاء المستخدم االعمدة (الصفات) التي يحتاجها لعمله فقط‪.‬‬
‫‪60‬‬
‫تحديث المرئيات (‪)updating views‬‬
‫• تحدث الجداول القاعدية ويمكن عكس التحديث على المرئيات‬
‫بسهولة ‪.‬‬
‫• إذا أجرينا تحديث على المرئيات (اضافة‪,‬حذف‪,‬تغيير) ربما اليمكن‬
‫عكس التحديث بصورة صحيحة على الجداول القاعدية‪.‬فهنالك ‪:‬‬
‫‪ .1‬حاالت يمكن فيها تحديث المرئيات وعكس التحديث على الجداول‬
‫القاعدية‪.‬‬
‫‪ .2‬حاالت ال يمكن فيها تحديث المرئيات وعكس التحديث على‬
‫الجداول القاعدية‪.‬‬
‫‪61‬‬
‫• حاالت يمكن فيها تحديث المرئيات وعكس التحديث على‬
‫الجداول القاعدية‪:‬‬
‫‪ .1‬حينما يحوى تعريف المرئية على االختيار فقط‪.‬‬
‫• مثال‪-:‬‬
‫‪Create view science‬‬
‫‪as select * from R‬‬
‫;'‪where college='Sc‬‬
‫‪62‬‬
‫‪ .2‬حاالت اإلسقاط والتي تضم المفتاح االساسي(كالمرئية ‪ (ws‬باعتبار‬
‫ان ‪ S#‬هو مفتاح العالقة ‪ R‬ولكن قد تكون هنالك فراغات )‪)nulls‬‬
‫في الجداول القاعدية في حالة اإلضافة للمرئية‪.‬‬
‫‪63‬‬
‫•‬
‫حاالت ال يمكن فيها تحديث المرئيات وعكس التحديث على الجداول‬
‫القاعدية ‪:‬‬
‫‪.1‬‬
‫حاالت تؤدى إلى نتائج مبهمة (في حالة استخدام الدوال الحسابية أو عمليات المجموعات)‪.‬‬
‫‪T‬‬
‫‪AUB‬‬
‫‪9‬‬
‫‪5‬‬
‫‪4‬‬
‫‪7‬‬
‫‪8‬‬
‫‪6‬‬
‫‪Q‬‬
‫‪B‬‬
‫‪9‬‬
‫‪4‬‬
‫‪8‬‬
‫‪6‬‬
‫‪P‬‬
‫‪A‬‬
‫‪9‬‬
‫‪5‬‬
‫‪4‬‬
‫‪7‬‬
‫‪ )T‬عبارة عن مرئية‪,‬ماذا يحدث لو اضفنا ‪ 2‬لهذه المرئية؟ )‬
‫‪64‬‬
‫‪-2‬حاالت اإلسقاط التي ال تحتوي على المفتاح األساسي‪.‬‬
‫‪-3‬في حالة أن المرئية تكون مكونة نتيجة ربط بين عالقتين او اكثر‪.‬‬
‫‪65‬‬