فيلد

در مدل رابطه‌اي تعدادي رابطه وجود دارد كه با موجوديتي بنام جدول هم عرض است و از تعدادي پرس و جو (Query) تشكيل شده است و نياز به يك زبان پرس و جو داده داريم. معروف‌ترين زبان پرس و جو موجود SQL نام دارد. ابتدا Relation زير را در نظر مي‌گيريم.                                                                                                                                                                                                   

 

 


كليد اصلي

Primary Key

Sid

Name

Email

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 است را حذف می کند.

Delete

From   student   S                 

Where  S.name = ‘ Smith’

 

 

سؤال : حال امتحان كنيد كه اگر خط آخر را ننويسيم چه اتفاقي خواهد افتاد؟

جواب : اين دستور كليه ركوردهايي كه ايجاد شده است را حذف خواهد كرد.

 

دانشجویی که شماره دانشجویی اش برابر 53688 را به سنش یکی اضافه و از معدل آن یک واحد کم میکند

دستور update

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)

  1. حتماً بايد مقدار داشته باشد (not null)
  2. حتماً بايد يكتا باشد (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

 

Sid

 


S Name

Term no

gpa

age

 

 

Sid

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

 

 

 

اضافه كردن ركورد

براي اينكه به جدول Student ركورد جديد اضافه كنيم كافي است همان دستورات ايجاد ركورد را در قسمت Query نوشته و ركورد جديد را ايجاد نمائيم ولي اگر بخواهيم به جدول Detail ركورد جديد اضافه كنيم بايد اين نكته را فراموش نكنيم كه فيلد مربوط به كليد خارجي (Sid) در جدول Detail به هيچ عنوان نبايد خالي بمانيد و حتماً بايد مقداردهي شود.

 

دستور ساخت جدول Detail

 

براي ساخت جدول Detail به روش زير عمل مي‌كنيم.

Create   table Enrolled( Sid   char (20) ,

                                        Cid    char (10) ,

                                        Cname        char (20) ,

 

اين فرمان بدين معني است كه دو فيلد نامبرده شده مجموعاً با هم يكتا هستند و به آن Super Key مي‌گويند.

 

                                        No     real ,

                                     Unit       integer ,

                                       Primary key (Cid , Sid) ,

                                       Foreign key (Cid) references Course

                         Foreign key (Sid) references Student);

حذف ركورد

اگر بخواهيم ركوردي را از جدول Detail حذف كنيم فرمان حذف را مانند مثالهاي گفته شده نوشته و اجرا مي‌كنيم و حذف صورت مي‌گيرد ولي اگر بخواهيم از جدول Master ركوردي را حذف كنيم ابتدا بايد ببينيم كه اين ركورد به ركوردي از جدول Detail مرتبط شده است يا خير؟ اگر مرتبط نشده باشد كه مانند حذف ركورد بصورت عادي عمل كرده و اجرا مي‌كنيم ولي اگر اين ركورد به ركوردي از جدول Detail مرتبط شده باشد سه حالت زير بوجود مي‌آيد كه ما ابتدا در هنگام ساختن جدول Detail بايد يكي از اين سه فرمان را نوشته تا هنگام حذف نيز آن دستور اجرا گردد. اين سه حالت عبارتند از :

  1. No Action : در اين حالت اجازه حذف ركورد مرتبط شده داده نخواهد شد.
  2. Cascade : در اين حالت علاوه بر ركورد اصلي در جدول Master كليه ركوردهاي مرتبط شده با آن در جدول Detail نيز حذف خواهد شد.
  3. 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 كردن نيز مانند حذف بايد سه حالت قبل را در نظر گرفته و در قسمت ساخت جدول براي آن تعريف نمائيم.

  1. No Action : در اين حالت اجازه Update كردن ركورد مرتبط شده داده نخواهد شد.
  2. Cascade : در اين حالت بر روي فيلد كليد اصلي در جدول Detail اثر گذاشته و آنرا عوض خواهد كرد.
  3. 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

 

Sid

Cid

Grade

S1

C1

A

S1

C2

C

S2

C1

A

S1

C3

3

S2

C2

D

 

Gpa

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 باشد.

 

 

خروجی query  فوق به صورت فوق می باشد.

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 هستند.

    

 

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 به صورت به صورت زیر عمل نمود:

  1. کلیه description att. ها به عنوان فیلد تعریف می شوند.
  2. کلیدهای اصلی نهادهای مرتبط (ssn,did) به عنوان فیلد تعریف می شود.
  3. کلید اصلی جدول می شود مجموعه کلیدهای اصلی نهادهای مرتبط
  4. به هر یک از کلیدهای اصلی نهادهای مرتبط یک کلید خارجی تعریف می شود.

-  برای ترجمه E.R مقابل وقتی محدودیت یک به چند وجود دارد:

  1. کلیه description att. ها به عنوان فیلد تعریف می شوند.
  2. کلیدهای اصلی نهادهای مرتبط (ssn,did) به عنوان فیلد تعریف می شود.
  3. کلید اصلی جدول می شود کلید اصلی نهادی که فلش به سمت آن است.
  4. به هر یک از کلیدهای اصلی نهادهای مرتبط یک کلید خارجی تعریف می شود.

روش دوم:

کلیه نهادهایی که رابطه (      ) ندارند مستقیماً از روش های گفته شده تبدیل به جدول می شوند(emp). برای رابطه باقیمانده و نهادهایی که رابطه (      ) دارند(manage,dep) به صورت زیر عمل می کنیم:

 

  1. برای این دو نهاد و رابطه باقیمانده روی هم رفته یک جدول درست می کنیم.
  2. کلیه description att. و att. های نهاد مورد نظر را به عنوان فیلد به جدول اضافه می کنیم.
  3. کلید اصلی نهاد (dep) به عنوان کلید اصلی جدول در نظر گرفته می شود.
  4. کلید اصلی کلیه نهادهای مرتبط به عنوان کلید خارجی به این جدول اضافه می شود.

-  اگر E.R محدودیت یک به چند داشت به صورت زیر عمل می کنیم:

  1. برای این دو نهاد و رابطه باقیمانده روی هم رفته یک جدول درست می کنیم.
  2. کلیه description att. و att. های نهاد مورد نظر را به عنوان فیلد به جدول اضافه می کنیم.
  3. کلید اصلی نهاد (dep) به عنوان کلید اصلی جدول در نظر گرفته می شود.
  4. کلید اصلی کلیه نهادهای مرتبط به عنوان کلید خارجی به این جدول اضافه می شود.
  5. در هنگام تعریف کلیدهای اصلی نهادهای دیگر به صورت زیر عمل می کنیم:

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 هم باید از بین برود.

                                                    Primary  key  (Pname,ssn),

                                                    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)کلیه ی (فیلدهای) نهاد فرزند (1 و 2) به عنوان فلید در جدول درج شود.

  1. کلید اصلی کلاس پدر (ssn) به عنوان کلید اصلی کلاس فرزند در جدول درج شود.
  2. کلید اصلی کلاس پدر (ssn) بعنوان کلید خارجی به کلاس پدر در کلاس فرزند درج شود.
  3. روی کلیدهای خارجی 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 است به صورت زیر عمل می شود:

  1. Key  att. of  emp(ssn)
  2. Key  att.  of  sponsers(pid,did)
  3. deocriptive  att.  of  monitors
  4. بر اساس چند به چند بودن رابطه (در حالت کلی . هرگونه محدودیت) کلید اصلی مانیتور تعریف می شود
  5. Foreign  key  (ssn)  refrences   emp

Foreign  key  (pid)  refrences   sponsers

Foreign  key  (did)  refrences   sponsers

 

View (ديدگاهexternal schema)

 

براي view مي‌توان دو تعريف نمود :

  1. view در حقيقت جدولي است كه سطرهاي آن بصورت فيزيكي ذخيره نمي‌شوند.
  2. 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

  1. استقلال داده (Data Independence) : فرض مي‌كنيم جدول اطلاعات قبل را داشته و چندين View مختلف براي آن تعريف كرده‌ايم. اگر بخواهيم تغييراتي به جدول اصلي بدهيم بعنوان مثال بخواهيم سه فيلد ديگر به آن اضافه كنيم در اينصورت تغييراتي در Viewهاي ساخته شده رخ نخواهد داد و آنها دچار مشكل نخواهند شد يعني در اصل Viewهاي ساخته شده مستقل عمل مي‌كنند.
  2. امنيت (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 نيز مانند دستور بالا خواهد بود.