مدل رابطهاي (Relational)
فيلد |
كليد اصلي Primary Key |
Sid |
Name |
|
Age |
Gpa |
50000 |
David |
David@CS |
19 |
2.3 |
|
|
53666 |
Jones |
Jones@CS |
18 |
3.4 |
|
53688 |
Smith |
Smith@math |
17 |
3.1 |
Record |
10123 |
Smith |
Smith@magic |
16 |
2.8 |
|
Relation Schema |
|
|
Student (sid:String , name:String , age:Integer , gpa:Real
? اگر schema های یک جدول را کنار یکدیگر بگذاریم می شود D.B.schema
هر table یا Relation دو خصوصیت براش تعریف می شود:
- تعداد فيلدهاي جدول : Degrees
- تعداد ركوردهاي جدول : Cordiality
يكي از ويژگيهاي جدول اين است كه ترتيب ركوردها و ترتيب فيلدها در جدول مهم نيست.
Relation D.B
مجموعهاي از Schema يا جدولهاي مجزا است كه با هم تركيب شده و داراي رابطه باشند.
دستورات SQL
1.1ايجاد جدول
Create table student ( sid char (20) ,
name char (30) ,
email char (20) ,
age integer ,
gpa real )
1.2افزودن ركورد
Insert
Into student S
Values ( S.sid = ‘5000’ ,
S.name = ‘David’ ,
S.email = ‘David@CS’ ,
S.age = 19 ,
S.gpa = 2.3 )
و يا اينكه
Insert
Into student (sid , name , email , age , gpa)
Values (‘5000’ , ‘David’ , ‘David@CS’ , 19 , 2.3 )
و هر بار بعد از نوشتن كدهاي مربوطه روي علامت ! كليك ميكنيم تا برنامه مربوطه Run شود.
1.3حذف ركورد
از جدول student تمام فیلدهایی که اسمشان برابر smith است را حذف می کند. |
From student S
Where S.name = ‘ Smith’
سؤال : حال امتحان كنيد كه اگر خط آخر را ننويسيم چه اتفاقي خواهد افتاد؟
جواب : اين دستور كليه ركوردهايي كه ايجاد شده است را حذف خواهد كرد.
دانشجویی که شماره دانشجویی اش برابر 53688 را به سنش یکی اضافه و از معدل آن یک واحد کم میکند |
Update student S
Set S.age=S.age+1,S.gpa=S.gpa-1
Where S.sid=53688
1.4پرس و جو
بعنوان مثال ميخواهيم افرادي كه سن آنها بيش از 18 سال است يك واحد از آنها كم شده و از 1% به معدل آنها اضافه گردد.
Update student S
Set S.age = S.age – 1 , S.gpa = S.gpa + 0.1
Where S.age > = 18
ساخت كليد اصلي (Primary Key)
- حتماً بايد مقدار داشته باشد (not null)
- حتماً بايد يكتا باشد (unique)
كليدهايي كه يكتا هستند ولي لزوماً پر نيستند را Candidate Key ميگويند و از بين آنها يك كليد اصلي تعريف ميكنيم. بنابراين در مرحله اول يعني ساخت جدول بدينصورت كليد اصلي را معرفي ميكنيم.
Create table student ( sid char (20) ,
Name char (30) ,
Email char (20) ,
Age integer ,
Gpa real ,
primary key (sid) )
نكته : ركوردها بوسيله كليد اصلي شناخته ميشوند.
محدودیت روی کلید key constraint :
Super key : یک مجموعه ای از فیلدها که primary key توش باشد. (مثل sid و name)
فرض کنید sid کلید اصلی باشد حال جدول را به صورت زیر تعریف می کنیم:
Create table (sid …
.
.
age? وname در این جدول روی هم یکتا هستند |
Unique(name,age)
Constraint Studentkey PRIMARYKEY (sid));
می توانیم Constraint Studentkey را ننویسیم (نام Studentkey را برای کلید اصلی sid تعریف می کند.)
مثال : E - R كارمندان يك اداره را بصورت Query بنويسيد.
Create table EMP ( ssn char (20) ,
Name char (30) ,
Lot char (30) ,
Primary key (ssn) )
Create table Dep ( did char (20) ,
dname char (30) ,
budget integer ,
primary key (did) )
Create table Duration (from string ,
To string )
كليد خارجي (Foreign Key)
براي ساخت يك Data Base احتياج به چندين جدول مختلف داريم كه اين جداول به نوعي با يكديگر مرتبط
هستند. اين جداول با يك فيلد به نام كليد خارجي با يكديگر ارتباط پيدا ميكنند.
Master Detail
Table Student Foreign Key Enrolled
|
S Name |
Term no |
gpa |
age |
|
|
Cid |
C Name |
No |
Unit |
||||
1220 |
A |
3 |
2.5 |
15 |
|
1220 |
D3 |
D |
P |
15.5 |
3 |
|||
1530 |
B |
4 |
3.5 |
20 |
|
1570 |
E4 |
E |
* |
16 |
2 |
|||
1570 |
C |
5 |
4.0 |
18 |
|
1220 |
F11 |
F |
P |
13 |
1 |
|||
1620 |
K |
7 |
3.8 |
20 |
|
1530 |
H5 |
H |
+ |
12 |
3 |
|||
|
|
|
|
|
|
1570 |
I16 |
I |
* |
11 |
3 |
|||
|
|
|
|
|
|
1530 |
F15 |
F |
+ |
14 |
1 |
|||
|
|
|
|
|
|
1530 |
E18 |
E |
+ |
13 |
2 |
اضافه كردن ركورد
براي اينكه به جدول Student ركورد جديد اضافه كنيم كافي است همان دستورات ايجاد ركورد را در قسمت Query نوشته و ركورد جديد را ايجاد نمائيم ولي اگر بخواهيم به جدول Detail ركورد جديد اضافه كنيم بايد اين نكته را فراموش نكنيم كه فيلد مربوط به كليد خارجي (Sid) در جدول Detail به هيچ عنوان نبايد خالي بمانيد و حتماً بايد مقداردهي شود.
دستور ساخت جدول Detail
براي ساخت جدول Detail به روش زير عمل ميكنيم.
Create table Enrolled( Sid char (20) ,
Cid char (10) ,
Cname char (20) ,
اين فرمان بدين معني است كه دو فيلد نامبرده شده مجموعاً با هم يكتا هستند و به آن Super Key ميگويند.
|
Unit integer ,
Primary key (Cid , Sid) ,
Foreign key (Cid) references Course
Foreign key (Sid) references Student);
حذف ركورد
اگر بخواهيم ركوردي را از جدول Detail حذف كنيم فرمان حذف را مانند مثالهاي گفته شده نوشته و اجرا ميكنيم و حذف صورت ميگيرد ولي اگر بخواهيم از جدول Master ركوردي را حذف كنيم ابتدا بايد ببينيم كه اين ركورد به ركوردي از جدول Detail مرتبط شده است يا خير؟ اگر مرتبط نشده باشد كه مانند حذف ركورد بصورت عادي عمل كرده و اجرا ميكنيم ولي اگر اين ركورد به ركوردي از جدول Detail مرتبط شده باشد سه حالت زير بوجود ميآيد كه ما ابتدا در هنگام ساختن جدول Detail بايد يكي از اين سه فرمان را نوشته تا هنگام حذف نيز آن دستور اجرا گردد. اين سه حالت عبارتند از :
- No Action : در اين حالت اجازه حذف ركورد مرتبط شده داده نخواهد شد.
- Cascade : در اين حالت علاوه بر ركورد اصلي در جدول Master كليه ركوردهاي مرتبط شده با آن در جدول Detail نيز حذف خواهد شد.
- Constant : در اين حالت بعد از حذف ركورد مرتبط شده در جدول Master كليد خارجي كليه ركوردهاي مرتبط شده با آن ركورد در جدول Detail با يك مقدار default پر خواهد شد كه اين مقدار default نيز بايد قبلاً تعريف شده باشد.
نكته : شايد يك جدول Detail از چندين فيد Foreign Key تشكيل شده باشد كه در اينصورت براي تعريف نوع حذف بايد براي هر كدام از آنها جداگانه فرمان حذف را بعد از دستور
Foreign Key بنويسيم. بعنوان مثال اگر دو جدول Master به نامهاي Student و Teacher داشته باشيم بايد اينگونه فرمان حذف را بنويسيم.
Foreign Key (Sid) references Student
On Delete no action
Foreign Key (Sid) references Teacher
On Delete Cascade
در اينصورت براي جدول Student حالت حذف را no action و براي جدول Teacher حالت حذف را Cascade در نظر ميگيرد.
نكته : حذف از جدول Detail مشكلي ندارد به شرط آنكه خود آن جدول ، پدر (Master) جدول ديگري نباشد.
Update
كليه قوانيني كه براي حذف ركورد گفته شد در اين قسمت نيز اجرا خواهد شد. اگر بخواهيم از جدول اصلي ركوردي را Update كنيم ابتدا بايد ببينيم كه اين ركورد به ركوردي از جدول Detail مرتبط شده است يا خير؟ اگر مرتبط نشده باشد كه هيچ ولي اگر مرتبط باشد و ما فرمان Update را اجرا كنيم كليه ركوردهاي مرتبط با اين ركورد در جدول Detail با مشكل مواجه خواهند شد بنابراين براي Update كردن نيز مانند حذف بايد سه حالت قبل را در نظر گرفته و در قسمت ساخت جدول براي آن تعريف نمائيم.
- No Action : در اين حالت اجازه Update كردن ركورد مرتبط شده داده نخواهد شد.
- Cascade : در اين حالت بر روي فيلد كليد اصلي در جدول Detail اثر گذاشته و آنرا عوض خواهد كرد.
- Constant : در اين حالت مانند قبل حالت پيش فرض را در نظر ميگيرد.
نكته : فرمان و دستورهاي Update را مانند حذف بايد بعد از تعريف كليد اصلي بنويسيم مانند :
Foreign Key (Sid) references Student
On Delete no action
On Update cascade
پیش فرض برای update و delete و insert مقدار no action است.
تبديل E - R به Data Base
مثال: نام دانشجویان و شماره درس آنها بطوریکه دانشجو آن درس را نمره A گرفته باشد.
Select S.Sname , E.Cid
From student S , Enrolled E
Where S.Sid=E.Sid and E.Grade=’A’
Enrolled |
Student |
Sid |
Sname |
Login |
Age |
|
|||||||||||||||||||
S1 |
N1 |
L1 |
10 |
‘A’ |
|||||||||||||||||||
S2 |
N2 |
L2 |
18 |
‘C’ |
Enrolled * student :
Sid |
Sname |
Login |
Age |
Gpa |
Sid |
Cid |
Grade |
S1 |
N1 |
L1 |
10 |
‘A’ |
S1 |
C1 |
A |
S1 |
N1 |
L1 |
10 |
‘A’ |
S1 |
C2 |
C |
S1 |
N1 |
L1 |
10 |
‘A’ |
S2 |
C1 |
A |
S1 |
N1 |
L1 |
10 |
‘A’ |
S1 |
C3 |
B |
S1 |
N1 |
L1 |
10 |
‘A’ |
S2 |
C4 |
D |
S2 |
N2 |
L2 |
18 |
‘C’ |
S1 |
C1 |
A |
S2 |
N2 |
L2 |
18 |
‘C’ |
S1 |
C2 |
C |
S2 |
N2 |
L2 |
18 |
‘C’ |
S2 |
C1 |
A |
S2 |
N2 |
L2 |
18 |
‘C’ |
S1 |
C3 |
B |
S2 |
N2 |
L2 |
18 |
‘C’ |
S2 |
C4 |
D |
با شرط یک جدول فیلتر شده و فقط رکوردهایی در ضرب دکارتی باقی می مانند که S.Sid برابر E.Sid است. و در آخر بین رکوردهای باقی مانده آنها را در خروجی نمایش می دهد که نمره درس آنها A باشد.
|
Cid |
Sname |
C1 |
N1 |
C1 |
N2 |
اگر در query به ما گفته باشد نام دانشجویانی که حداقل یک درسشان را نمره ‘A’ گرفته باشند به همراه شماره درس مورد نظر . با همین دستور فوق قابل حل است.
می خواهیم E.R را تبدیل به R.D.B کنیم
ssn |
name |
lot |
Create table Emp (ssn char(10), name char(20), lot integer, PRIMARY KEY (ssn)); |
emp |
emp |
Relationship هم قابل تبدیل به جدول می باشد.
did |
since |
ssn |
emp |
Works-IN |
dep |
Works-IN |
emp |
location |
capacity |
add |
add |
capacity |
Create table Works-IN( ssn char(10),
did integer,
add char(30),
since date,
PRIMARY KEY (ssn,did,add),
FOREIGN KEY (ssn) refrences emp,
FOREIGN KEY (did) refrences dep,
FOREIGN KEY (add) refrences location);
name |
ssn |
emp |
supervisor |
lot |
Reports-to |
subordinate |
emp |
Create table Reports-to(supervisor_ssn char(11),
subordinate_ssn char(11),
PRIMARY KEY(supervisor_ssn, subordinate_ss),
FOREIGN KEY(subordinate_ss) Refrences emp(ssn),
FOREIGN KEY(supervisor_ssn) Refrences emp(ssn));
ssn |
since |
did |
did |
since |
ssn |
dep |
manage |
emp |
manage |
emp |
روش ۱ ) در این روش ۳ تا جدول داریم.
Create table manage(ssn char(20),
did char(20),
since date,
PRIMARY KEY (did),
FORIEGN KEY(did) Refrences dep,
FOREIGN KEY(ssn) Refrences emp);
روش 2) یک جدول درست می کنیم برای emp به روش های قبل و یک جدول برای dep و manage که در کل 2 جدول میشود.
Create table dept_manager(did char(20),
.
سایر فیلدهای dep |
.
since date,
ssn char(20),
PRIMARY KEY (did),
FOREIGN KEY (SSN) Refrences emp);
since |
ssn |
did |
did |
since |
ssn |
dep |
manage |
emp |
manage |
emp |
از روش اول نمی توانیم محدودیتش را ارضاء کنیم و باید حتماً از روش دوم استفاده کنیم.
Create table dept_manager(did char(20),
سایر فیلدهای dep |
چون رابطه الزام آور است |
چون رابطه الزام آور است
|
|
.
ssn char(20) NOT NULL,
PRIMARY KEY(did),
FOREIGN KEY(ssn) Refrences emp);
- برای ترجمه E.R مقابل وقتی هیچ محدودیتی وجود ندارد :
می توان نهادها را مستقیماً از روش گفته شده تبدیل به جدول کرد و سپس برای ترجمه رابطه manage به صورت به صورت زیر عمل نمود:
- کلیه description att. ها به عنوان فیلد تعریف می شوند.
- کلیدهای اصلی نهادهای مرتبط (ssn,did) به عنوان فیلد تعریف می شود.
- کلید اصلی جدول می شود مجموعه کلیدهای اصلی نهادهای مرتبط
- به هر یک از کلیدهای اصلی نهادهای مرتبط یک کلید خارجی تعریف می شود.
- برای ترجمه E.R مقابل وقتی محدودیت یک به چند وجود دارد:
- کلیه description att. ها به عنوان فیلد تعریف می شوند.
- کلیدهای اصلی نهادهای مرتبط (ssn,did) به عنوان فیلد تعریف می شود.
- کلید اصلی جدول می شود کلید اصلی نهادی که فلش به سمت آن است.
- به هر یک از کلیدهای اصلی نهادهای مرتبط یک کلید خارجی تعریف می شود.
روش دوم:
کلیه نهادهایی که رابطه ( ) ندارند مستقیماً از روش های گفته شده تبدیل به جدول می شوند(emp). برای رابطه باقیمانده و نهادهایی که رابطه ( ) دارند(manage,dep) به صورت زیر عمل می کنیم:
- برای این دو نهاد و رابطه باقیمانده روی هم رفته یک جدول درست می کنیم.
- کلیه description att. و att. های نهاد مورد نظر را به عنوان فیلد به جدول اضافه می کنیم.
- کلید اصلی نهاد (dep) به عنوان کلید اصلی جدول در نظر گرفته می شود.
- کلید اصلی کلیه نهادهای مرتبط به عنوان کلید خارجی به این جدول اضافه می شود.
- اگر E.R محدودیت یک به چند داشت به صورت زیر عمل می کنیم:
- برای این دو نهاد و رابطه باقیمانده روی هم رفته یک جدول درست می کنیم.
- کلیه description att. و att. های نهاد مورد نظر را به عنوان فیلد به جدول اضافه می کنیم.
- کلید اصلی نهاد (dep) به عنوان کلید اصلی جدول در نظر گرفته می شود.
- کلید اصلی کلیه نهادهای مرتبط به عنوان کلید خارجی به این جدول اضافه می شود.
- در هنگام تعریف کلیدهای اصلی نهادهای دیگر به صورت زیر عمل می کنیم:
ssn char(20) not null
foreign key(ssn) refrences emp
نکته: نهاد ضعیف را حتماً از روش دوم استفاده کنید.
ssn |
since |
Pname |
مثال :
depentes |
policy |
emp |
policy |
depentes |
Create table depents_policy ( Pname char(20),
کلیه فیلدهای باقیمانده depentes |
.
.
since date,
ssn char(20) not null,
|
نهاد emp که از بین برود نهاد ضعیف depentes هم باید از بین برود. |
Foreign key (ssn) refrences emp
on delete cascade);
رابطه سلسله مراتبی
ssn |
lot |
name |
emp |
Hourly_worked |
contractid |
ISA |
Hourly_wage |
Hourly_emps |
Contract_emps |
lot |
ssn |
contractid |
ISA |
Hourly-Worked |
Hourly-wage |
Hourly-emps |
روش یک :
- نهاد پدر به عنوان یک جدول جداگانه تعریف می شود.
برای تعریف کلاسها (نهادها)ی فرزند به دو صورت امکان پذیر است :
- برای هر نهاد فرزند یک جدول جداگانه به صورت زیر تعریف شود:
1-1)کلیه ی (فیلدهای) نهاد فرزند (1 و 2) به عنوان فلید در جدول درج شود.
- کلید اصلی کلاس پدر (ssn) به عنوان کلید اصلی کلاس فرزند در جدول درج شود.
- کلید اصلی کلاس پدر (ssn) بعنوان کلید خارجی به کلاس پدر در کلاس فرزند درج شود.
- روی کلیدهای خارجی on delete cascade لحاظ شود.
Create table H_emps (Hourly_ wage integer,
Hourly_worked integer,
ssn char(20),
Primary key (ssn),
Foreign key (ssn) refrences emp
on delete casecade);
مزیت: می توان کارمندانی را که هم جزو کلاس ساعتی و هم جزو قراردادی هستند را ذخیره کند.
عیب: کارمندانی که جزو هیچ کدام نیستند را نمی تواند ذخیره کند.
روش دو :
فیلدهای مشترک که در کلاس پدر قرار دارند با فیلدهای هریک از فرزندان یک جدول را تشکیل می دهند.(در کل دو جدول داریم و کلید خارجی هم نداریم)
H_work |
H_wge |
lot |
name |
ssn |
|
|
|
|
|
contractid |
lot |
name |
ssn |
|
|
|
|
در این روش برای query گرفتن نیازی به ضرب ندارد ولی افزونگی داده داریم.
- برای ترجمه aggregation کلیه ی نهادهای مستقل به صورتی که قبلاً گفته شد به جدول تبدیل می شود.
emp |
until |
monitors |
since |
… |
did |
… |
pid |
dep |
sponsers |
projects |
lot |
name |
ssn |
monitors |
until |
projects |
sponsers |
since |
dep |
برای رابطه ای که درگیر aggregation است به صورت زیر عمل می شود:
- Key att. of emp(ssn)
- Key att. of sponsers(pid,did)
- deocriptive att. of monitors
- بر اساس چند به چند بودن رابطه (در حالت کلی . هرگونه محدودیت) کلید اصلی مانیتور تعریف می شود
- Foreign key (ssn) refrences emp
Foreign key (pid) refrences sponsers
Foreign key (did) refrences sponsers
View (ديدگاهexternal schema)
براي view ميتوان دو تعريف نمود :
- view در حقيقت جدولي است كه سطرهاي آن بصورت فيزيكي ذخيره نميشوند.
- view ميتواند بعنوان يك Table پايه براي تعريف Query يا ديدگاه بر روي آن استفاده شود.
مثال : با توجه به جداول ذيل يك ديگاه تعريف كنيد كه اطلاعات دانشجوياني كه معدل آنها بيشتر از 3.5 است را داشته باشد.
Table Student Course
Sid |
S Name |
Term no |
gpa |
age |
|
Sid |
Cid |
C Name |
No |
Unit |
|
1220 |
A |
3 |
2.5 |
15 |
|
1220 |
D3 |
D |
P |
15.5 |
3 |
1530 |
B |
4 |
3.5 |
20 |
|
1570 |
E4 |
E |
* |
16 |
2 |
1570 |
C |
5 |
4.0 |
18 |
|
1220 |
F11 |
F |
P |
13 |
1 |
1620 |
K |
7 |
3.8 |
20 |
|
1530 |
H5 |
H |
+ |
12 |
3 |
|
|
|
|
|
|
1570 |
I16 |
I |
* |
11 |
3 |
|
|
|
|
|
|
1530 |
F15 |
F |
+ |
14 |
1 |
|
|
|
|
|
|
1530 |
E18 |
E |
+ |
13 |
2 |
Create View B – Student
As Select *
From Student
Where gpa > 3.5
حال ميخواهيم ببينيم كه فرق بين View و Query در چيست؟ يعني در حقيقت اين عمل را با Query هم ميتوانيم انجام دهيم ولي بايد ببينيم كه View چه امتيازي نسبت به Query دارد.
دلايل وجود View
- استقلال داده (Data Independence) : فرض ميكنيم جدول اطلاعات قبل را داشته و چندين View مختلف براي آن تعريف كردهايم. اگر بخواهيم تغييراتي به جدول اصلي بدهيم بعنوان مثال بخواهيم سه فيلد ديگر به آن اضافه كنيم در اينصورت تغييراتي در Viewهاي ساخته شده رخ نخواهد داد و آنها دچار مشكل نخواهند شد يعني در اصل Viewهاي ساخته شده مستقل عمل ميكنند.
- امنيت (Security) : همان قابليت دسترسي است. بعنوان مثال ميخواهيم از جدول مذكور اطلاعاتي مانند نام و شماره دانشجويي و سن در اختيار كليه دانشجويان قرار گيرد. براي اينكار يك View تعريف كرده و مشخصات فوق را در آن نمايش ميدهيم. بدينصورت كليه دانشجويان اطلاعات فوقالذكر را بدون آنكه به جدول اصلي دسترسي داشته باشند رؤيت خواهند نمود.
Create View G – Student
As Select sid , name , age
From Student
Table Student Course
Sid |
S Name |
Term no |
gpa |
age |
|
Sid |
Cid |
C Name |
No |
Unit |
Term |
|
1220 |
A |
3 |
2.5 |
15 |
|
1220 |
D3 |
D |
P |
15.5 |
3 |
2 |
1530 |
B |
4 |
3.5 |
20 |
|
1570 |
E4 |
E |
* |
16 |
2 |
3 |
1570 |
C |
5 |
4.0 |
18 |
|
1220 |
F11 |
F |
P |
13 |
1 |
2 |
1620 |
K |
7 |
3.8 |
20 |
|
1530 |
H5 |
H |
+ |
12 |
3 |
1 |
|
|
|
|
|
|
1570 |
I16 |
I |
* |
11 |
3 |
1 |
|
|
|
|
|
|
1530 |
F15 |
F |
+ |
14 |
1 |
2 |
|
|
|
|
|
|
1530 |
E18 |
E |
+ |
13 |
2 |
3 |
جدول قبل را با فرض اينكه يك فيلد ترم نيز داشته باشيم در نظر گرفته و يك View ديگر ساخته و تعريف ميكنيم كه نام ، شماره دانشجويي و نام دروس انتخابي را به همراه ترم آن نمايش دهد.
Create View C – Student
As Select S.name , S.sid , C.cname
From Student S , Course C
Where S.sid = C.cid and C.Term = 3
تأثير اعمال ايجاد ، حذف و پرس و جو بر روي View
1) Insert
براي اضافه كردن ركورد به جدول View سه حالت وجود دارد :
الف) اگر View داراي كليد اصلي باشد مشكل خاصي بوجود نميآيد.
ب) اگر View داراي شرط باشد كه در اين حالت دو احتمال وجود دارد. يكي اينكه ركوردي كه ميخواهيم اضافه كنيم شرط View را دارا باشد در اينصورت علاوه بر اينكه ركورد مورد نظر بر روي Table اصلي اضافه ميگردد بلكه بر روي View نيز اضافه شده و نمايش داده خواهد شد ولي اگر ركورد مورد نظر جزو شرط View نباشد در اينصورت ركورد اضافه شده در جدول اصلي داخل View نمايش داده نخواهد شد.
ج) اگر Primary Key عضو View نباشد و بخواهيم ركوردي اضافه كنيم كه قسمتPrimary Key آن خالي يا Null باشد در اينصورت اجازه Insert داده نخواهد شد.
2) Delete
اگر ركوردي از View حذف شود از جدول اصلي نيز حذف خواهد شد.
3) Update
اگر Update بر روي فيلدهايي باشد كه شرط View براي آنها تعريف نشده باشد در اينصورت مشكلي بوجود نخواهد آمد ولي اگر فرمان Update شرط View را نقض كند آن ركورد از جدول View حذف خواهد شد ولي در جدول اصلي Update خواهد شد. و اگر update منجر به نقض شرط نگردد ، update امکان پذیر است.
فرض ميكنيم جدول قبلي را در اختيار داريم.
Table Student Course
Sid |
S Name |
Term no |
gpa |
age |
|
Sid |
Cid |
C Name |
No |
Unit |
Term |
|
1220 |
A |
3 |
2.5 |
15 |
|
1220 |
D3 |
D |
P |
15.5 |
3 |
2 |
1530 |
B |
4 |
3.5 |
20 |
|
1570 |
E4 |
E |
* |
16 |
2 |
3 |
1570 |
C |
5 |
4.0 |
18 |
|
1220 |
F11 |
F |
P |
13 |
1 |
2 |
1620 |
K |
7 |
3.8 |
20 |
|
1530 |
H5 |
H |
+ |
12 |
3 |
1 |
|
|
|
|
|
|
1570 |
I16 |
I |
* |
11 |
3 |
1 |
|
|
|
|
|
|
1530 |
F15 |
F |
+ |
14 |
1 |
2 |
|
|
|
|
|
|
1530 |
E18 |
E |
+ |
13 |
2 |
3 |
يك جدول ديگر نيز با مشخصات زير ايجاد ميكنيم Club |
||||||||||||
Sid |
Club |
Field |
Maharat |
|
|
|
|
|
|
|
|
|
1220 |
F |
A |
5 |
|
|
|
|
|
|
|
|
|
1570 |
H |
B |
3 |
|
|
|
|
|
|
|
|
|
1530 |
I |
C |
6 |
|
|
|
|
|
|
|
|
حال ميخواهيم دانشجوياني را پيدا كنيم كه هم داراي معدل بالا بوده و هم در يك كلوپ ورزشي عضو هستند.
Create View Active – Student
As Select S.Sid , S.name , C1.name , C.Club , C.Maharat
From Student S , Club C , Course 1
Where S.Sid = C.Sid and C.Maharat > 5 and C1.Sid = S.Sid and C1.No > 18
حذف جدول
بوسيله دستور زير براي حذف جدول عمل ميكنيم :
Drop Table نام جدول
اگر جدول مورد نظر با جدولهاي ديگر در ارتباط باشد با دستور بالا حذف نشده و بايد براي حذف آن از دستور زير استفاده كنيم :
Drop Table نام جدول Restrict
با اجراي اين دستور جدول مورد نظر حذف خواهد شد. حال اگر دستور زير را اجرا كنيم علاوه بر اينكه جدول مورد نظر ميشود بلكه تمام جدولها و Viewهايي كه در ارتباط با آن ساخته شدهاند نيز حذف خواهند شد.
Drop Table نام جدول Cascade
نكته : تمام فرمانهاي بالا كه براي حذف جدول گفته شد براي View نيز قابل اجرا ميباشد يعني براي حذف جدول View نيز بايد از فرمانهاي بالا استفاده كرده و فقط بجاي كلمه Table بايد از كلمه View استفاده كنيم.
اضافه كردن فيلد به جدول
با اجراي دستور زير يك فيلد با مشخصات ذكر شده به جدول مورد نظر اضافه خواهد شد.
Alter Table نام جدول
Add Column نام فيلد char (10)
نكته : دستور اضافه كردن فيلد به جدول View نيز مانند دستور بالا خواهد بود.