Sql (بخش اول - تاریخچه، نحوه ایجاد پایگاه داده، تعریف انواع داده ستون ها Data Definition Language)

1400/04/27

#Structured_Query_Language

زبان پرس و جوی ساختیافته ( #SQL ) برای مدیریت داده ها در #پایگاه_های_داده_رابطه_ای طراحی شده است. SQL ابتدا توسط IBM در اوایل دهه 1970 یعنی سال 1986 توسعه یافت. نسخه اولیه بنام ) SEQUEL Structured English Query Language)  برای تغییر و بازیافت داده های ذخیره شده در پایگاه داده رابطه ای IBM موسوم به سیستم R طراحی گردید، سپس در اواخر دهه 1970 شرکت Relational Software که در حال حاضر Oracle است اولین پیاده سازی تجاری SQL بنام Oracle V2 را برای کامپیوترهای VAX معرفی نمود.

بیشتر پایگاه های داده رابطه ای امروزی از قبیل Oracle، Sql Server، MySql، DB2، Informix و Access از SQL استفاده می نمایند.
در یک پایگاه داده رابطه ای زبان SQL برای موارد زیر استفاده می شود :
•    ایجاد پایگاه داده و ساختار جداول
•    عملیات پایه مدیریت داده شامل اضافه، حذف و اصلاح
•    اجرای پرس و جوهای پیچیده برای دسترسی به اطلاعات مفید

#ایجاد_پایگاه_داده
دستورات اصلی زبان SQL عبارتند از #Create_Database و Create/Alter/Drop Table. دستور Create برای ایجاد پایگاه داده و ساختار جداول استفاده می گردد.
مثال : ایجاد پایگاه داده SW
با دستور Create Database SW یک پایگاه داده بنام SW ایجاد می شود. پس از ایجاد پایگاه داده باید جداول آنرا ایجاد نماییم. شکل کلی دستور ایجاد جدول بشکل زیر است:

CREATE TABLE <tablename>
(
ColumnName, Datatype, Optional Column Constraint,
ColumnName, Datatype, Optional Column Constraint,
Optional table Constraints
);


#Tablename اسم جدول می باشد مانند Employee. هر فیلد اطلاعاتی در این دستور شامل سه بخش است:
1-    نام ستون ( #ColumnName )
2-    نوع داده ( #ColumnType )
3-    شرایط و محدودیت های اختیاری (Optional table Constraints)

ColumnName
نام ستون در جدول باید منحصربفرد باشد، نام و نام خانوادگی از مصادیق نام ستون هستند.

ColumnType
نوع داده همانطور که در زیر شرح داده شده است می تواند از نوع سیستمی یا تعریف شده توسط کاربر باشد و نوع اطلاعات نگهداری شده در آن ستون را مشخص می نماید.
 بیشتر نوع های داده دارای اندازه هستند مانند Char(35) و Numeric(8, 2)
Bit: داده صحیح شامل 0 یا 1 
Int: داده صحیح از  -2^31 (-2,147,483,648)تا  2^31 – 1 (2,147,483,647)  
SmallInt: داده صحیح از 2^15 (-32,768) تا 2^15 – 1 (32,767)
Tinyint : داده صحیح از 0 تا 255
Decimal: داده عددی با اعشار ثابت از -10^38 -1 تا  10^38
Numeric: مترادفی برای Decimal
Timestamp: مقدار عددی منحصربفرد در سطح پایگاه داده
Uniqueidentifier: شناسه منحصربفرد غیرمحلی (GUID)
Money: مقدار داده پولی از -2^63 (-922,337,203,685,477.5808) تا 2^63 – 1 (+922,337,203,685,477.5807) با دقت یک ده هزارم واحد پولی
Smallmoney: مقدار داده پولی از -214,748.3648 تا +214,748.3647 با دقت یک ده هزارم واحد پولی
Float: داده عددی با اعشار شناور از -1.79E + 308 تا 1.79E + 308 
Real: داد ه عددی با اعشار شناور از -3.40E + 38 تا 3.40E + 38
Datetime: داده زمان، ساعت و تاریخ از اول ژانویه 1753 تا 31 دسامبر 9999 با دقت یک سه هزارم ثانیه یا 3.33 میلی ثانیه
Smalldatatime: داده زمان، ساعت و تاریخ از اول ژانویه 1900 تا 6 ژوئن 2079 با دقت یک دقیقه
Char: داده حرفی با طول ثابت شامل حداکثر 8000 حرف
Varchar: داده حرفی با طول متغیر شامل حداکثر 8000 حرف
Text: داده حرفی با طول متغیر شامل حداکثر 2^31 – 1 (2,147,483,647) حرف
Binary: داده دودویی با طول ثابت شامل حداکثر 8000 بایت
Varbinary: داده دودویی با طول متغیر شامل حداکثر 8000 بایت
Image: داده دودویی با طول متغیر شامل حداکثر 2^31 – 1 (2,147,483,647) بایت

شرایط و محدودیت های اختیاری (Optional Column Constraints)
این شرایط عبارتند از NULL, NOT NULL, UNIQUE, PRIMARY KEY  و  DEFAULT که برای تعریف مقادیر رکوردها استفاده می شوند. شرط NULL نشان می دهد که مقدار خالی برای این ستون مجاز می باشد و شرط NOT NULL نشان می دهد که هنگام ایجاد رکورد جدید، مقدار این ستون نمی تواند خالی باشد. 
پس از اینکه تمام ستون های جدول تعریف شدند، یک محدودیت یا شرط با ذکر کلمه CONSTRAINT تعریف می گردد. در مثال بالا برای تعریف کلید اصلی عبارت زیر استفاده می شود:
CONSTRAINT EmployeePK PRIMARY KEY(EmployeeNo)
دستور کامل ایجاد جدول Employees در پایگاه داده SW به این صورت می باشد :

USE SW
CREATE TABLE EMPLOYEES (
EmployeeNo CHAR(10) NOT NULL UNIQUE,
DepartmentName CHAR(30) NOT NULL DEFAULT “Human Resources”,
FirstName CHAR(25) NOT NULL,
LastName CHAR(25) NOT NULL,
Category CHAR(20) NOT NULL,
HourlyRate CURRENCY NOT NULL,
TimeCard LOGICAL NOT NULL,
HourlySalaried CHAR(1) NOT NULL,
EmpType CHAR(1) NOT NULL,
Terminated LOGICAL NOT NULL,
ExemptCode CHAR(2) NOT NULL,
Supervisor LOGICAL NOT NULL,
SupervisorName CHAR(50) NOT NULL,
BirthDate DATE NOT NULL,
CollegeDegree CHAR(5) NOT NULL,
CONSTRAINT Employee_PK PRIMARY KEY(EmployeeNo);

به همین صورت جداول Department، Project و assignment تعریف می گردند :

USE SW
CREATE TABLE DEPARTMENT (
DepartmentName Char(35) NOT NULL,
BudgetCode Char(30) NOT NULL,
OfficeNumber Char(15) NOT NULL,
Phone Char(15) NOT NULL,
CONSTRAINT DEPARTMENT_PK PRIMARY KEY(DepartmentName);

USE SW
CREATE TABLE PROJECT (
ProjectID Int NOT NULL IDENTITY (1000,100),
ProjectName Char(50) NOT NULL,
Department Char(35) NOT NULL,
MaxHours Numeric(8,2) NOT NULL DEFAULT 100,
StartDate DateTime NULL,
EndDate DateTime NULL,
CONSTRAINT ASSIGNMENT_PK PRIMARY KEY(ProjectID));

USE SW
CREATE TABLE ASSIGNMENT (
ProjectID Int NOT NULL,
EmployeeNumber Int NOT NULL,
HoursWorked Numeric(6,2) NULL);

سایر محدودیت های جدول به این شرح تعریف می گردند :

IDENTITY constraint
این محدودیت برای تعریق مقادیر منحصربفرد افزایشی استفاده می شود. این محدودیت اغلب با محدودیت #PRIMARY_KEY بکار می رود. ای ویژگی به ستون هایی با نوع داده tinyint، smallint، int، decimal  و  numericاختصاص می یابد. 
•    ایجاد اعداد متوالی
•    عدم اجرای یکپارچگی موجودیت ها
•    تنها یک ستون می تواند این ویژگی را داشته باشد
•    نوع داده  باید integer، numeric یا decimal باشد
•    ستون با این ویژگی قابل تغییر نیست
•    ستون نمی تواند شامل مقدار NULL یا تهی باشد
برای مثال به تعریف جدول هتل در پایگاه داده HOTEL توجه نمایید:

CREATE TABLE tblHotel (
HotelNo Int IDENTITY (1,1),
Name Char(50) NOT NULL,
Address Char(50) NULL,
City Char(25) NULL(

 

UNIQUE constraint
این ومحدودیت از ورود مقادی تکراری در ستون جلوگیری می نماید. 
•    هر دو محدودیت PK و UNIQUE برای اجرای یکپارچگی موجودیت ها استفاده می شوند.
•    محدودیت های چندگانه از این نوع می تواند در یک جدول تعریف شوند.
•    وقتی این محدودیت به یک جدول اضافه شود، داده های موجود همیشه معتبر می باشند.
•    این محدودیت روی ستون هایی با مقادیر NULL می تواند اعمال شود
شکل کلی نگارش این محدودیت بصورت زیر است:

[CONSTRAINT constraint_name]
UNIQUE [CLUSTERED | NONCLUSTERED]
(col_name [, col_name2 […, col_name16]])
[ON segment_name]


برای مثال به این دستور توجه نمایید:

CREATE TABLE EMPLOYEES (
EmployeeNo CHAR(10) NOT NULL UNIQUE(

FOREIGN KEY constraint
این محدودیت ستون یا ترکیب چند ستون را مشخص می کند که مقادیرشان با ستون PRIMARY KEY از جدول دیگر مطابقت داشته باشد.
•    مقدار FK بطور خودکار با تغییر مقدار ستون PK در جدول وابسته بروزرسانی می گردد
•    محدودیت FK باید به محدودیت PK یا UNIQUE در جدول دیگر اشاره کند
•    تعداد ستون های FK باید با PK یا UNIQUE در جدول دیگر برابر باشد
•    درصورت استفاده از WITH NOCHECK وجود مقادیر در جدول دیگر بررسی نمی گردد
•    هیچ ایندکسی روی ستون های FK ساخته نمی شود
شکل کلی محدودیت بصورت زیر است: 

[CONSTRAINT constraint_name]
[FOREIGN KEY (col_name [, col_name2 […, col_name16]])]
REFERENCES [owner.]ref_table [(ref_col [, ref_col2 […, ref_col16]])]


در مثال فوق فیلد HotelNo در جدول tblRoom یک FK به فیلد HotelNo در جدول tblHotel می باشد:

USE HOTEL
GO
CREATE TABLE tblRoom (
HotelNo Int NOT NULL ,
RoomNo Int NOT NULL,
Type Char(50) NULL,
Price Money NULL,
PRIMARY KEY (HotelNo, RoomNo),
FOREIGN KEY (HotelNo) REFERENCES tblHotel)

CHECK constraint
این شرط مقادیر وارد شده در جدول را محدود می کند ازقبیل شرط های استفاده شده برای جستجوها با جزء WHRER
شکل کلی این محدودیت به این صورت است:


[CONSTRAINT constraint_name]
CHECK [NOT FOR REPLICATION] (expression)


در این مثال فیلد Type به مقادیر ‘Single’، ‘Double’، ‘Suite’ ،  ‘Executive’ محدود می شود:

USE HOTEL
GO
CREATE TABLE tblRoom (
HotelNo Int NOT NULL,
RoomNo Int NOT NULL,
Type Char(50) NULL,
Price Money NULL,
PRIMARY KEY (HotelNo, RoomNo),
FOREIGN KEY (HotelNo) REFERENCES tblHotel
CONSTRAINT Valid_Type
CHECK (Type IN (‘Single’, ‘Double’, ‘Suite’, ‘Executive’)))


دومین مثال روی تاریخ استخدام یا مقدار حقوق می باشد:

GO
CREATE TABLE SALESREPS (
Empl_num Int Not Null
CHECK (Empl_num BETWEEN 101 and 199),
Name Char (15),
Age Int CHECK (Age >= 21),
Quota Money CHECK (Quota >= 0.0),
HireDate DateTime,
CONSTRAINT QuotaCap CHECK ((HireDate < “01-01-2004”) OR (Quota <=300000)))

DEFAULT constraint
اگر برای ستون مقدار وارد نشده باشد بطور خودکار با این مقدار پیش فرض تکمیل می گردد. هر ستون فقط یک DEFAULT دارد
شکل کلی این محدودیت به این صورت است:


[CONSTRAINT constraint_name]
DEFAULT {constant_expression | niladic-function | NULL}
[FOR col_name]


مثلا برای مقدار پیش فرض ستون شهر به ‘Vancouver’ از دستور زیر استفاده می کنیم:


USE HOTEL
ALTER TABLE tblHotel
Add CONSTRAINT df_city DEFAULT ‘Vancouver’ FOR City

ALTER TABLE
از این دستور برای افزودن یا حذف محدودیت ها استفاده می گردد همچنین می توان ستونی از جدول حذف یا به آن اضافه نمود. با افزودن محدودیت جدید تمام داده های موجود اعتبار سنجی می شوند.
به مثال زیر توجه نمایید:


USE HOTEL
GO
ALTER TABLE tblHotel
ADD CONSTRAINT unqName UNIQUE (Name)
ADD
ColumnName int IDENTITY(seed, increment)

DROP TABLE
یک جدول را بطور کامل از پایگاه داده حذف می نماید. برای مثال 
DROP TABLE tblHotel

#Database

0 265
دیدگاه کاربران
0 دیدگاه
شما هم دیدگاه خود را ارسال کنید