В изготвения проект се разглежда работата в магазин от веригата Virgin Megastoresр намиращ се във търговски комплекс в Абу Даби. Предмета на дейност на магазина е продажба на билети, книги, CD, DVD, компютърен софтуеър и др. Разглеждаме SQL база данни за улесняване на персонала при търсене и намиране на определени артикули в базата данни на магазина.
Релационен модел на ДБ
Този модел позволява моделиране на данните. Релацията е група от колонии редове събрани във структура на таблица. Данните се запазват в редове. Всеки ред представлява запис от свързани данни.
Фиг 4-1 предлага преглед на типовете ограниченя, които могат да бъдат създадени. Най – отгре са разположени трите вида команди . Както показва Фиг. 4-1 съществуват 5 различни типа команди: NOT NULL, UNIQUE,
PRIMARY KEY, FOREIGN KEY CHECK. В SQL език UNIQUE команди и PRIMARY
KEY са двете, считащи се за универсални команди, а FOREIGN KEY команди се считат като справочни команди.
PRIMARY KEY или Първичен Ключ Обикновено това е номер. Това поле е първичният ключ на таблицата. В първичният ключ не се допускат повторения на стойности, защото по този начин би се нарушила уникалността на записа.
Ако полето на първичния ключ на една таблица се съдържа и в друга таблица, за втората то е вторичен ключ.
Преди да се създаде с помощта на компютъра базата от данни, тя трябва да се проектира. Проектирането включва основно броя и вида на таблицата, както и полетата, които ще съдържат всяка таблица. Трябва да се вземат предвид някои съществени особености на релационните база от данни, така че да се постигне максимална простота на работа с данните при пълно съответствие с изискванията на заданието към БД. Преди всичко, всички полета в таблицата трябва да зависят само от първичният ключ, а не от съдържанието на други полета. С други думи, след определянето на полето за първичен ключ, всички останали полета са свързани единствено с него.
Както бе споменато Add UNIQUE и PRIMARY KEY също както UNIQUE са част от уникалните SQL ограничения, позволяващи съществуването на единствини стойности в определена колона, и двата вида могат да бъдат приложени за една или повече колони, и и двата типа могат да бъдат определени като ограничение за колона или таблица. Всъщност PRIMARY KEY, има 2 ограниения, които могат да се приложат само за:
● Колона, която е определена само със първчен ключ PRIMARY KEY не може да съдържа нулеви стойности. Няма значение дали колоната е дефинирана като NOT NULL или не, колоната не може да съдържа нулеви стойности заради първичния ключ (PRIMARY KEY).
● За всякя таблица може да бъде зададен само един първичен ключ (PRIMARY KEY).
Причината за тези ограничения е ролата, която изпълнява Първичния ключ в таблицата (уникален идентификатор). Всяка колона на таблицата трябва да е уникална. Това е важно защото SQL не може да направи разлика между две колони които са еднакви, и така не може да се ъпдейтва или изтрива едната колона без да се направи същото и със другата. Първичния ключ за една Дата База (ДБ) се избира от създаващия ДБ от няколко налиични ключа, наречениcandidatekey . Това представлява набор от една или повече колони, които определят всеки ред.
Например Фиг. 4-4, при нея едиствния подходящ candidatekey във таблица CD_ARTISTS е колоната ARTIST_ID. Така всяка стойност на колоната ще бъде уникална, дори стойностите във колоните ARTIST_NAME и AGENCY да се дублират, реда ще бъде уникален, защото стойността на ARTIST_ID е уникална.
За да е определи Първичния ключ трябва да се използва PRIMARY KEY constraint за да се определи коя колона ще служи за Първичен Ключ.
Например за да се определи Първичния ключ за таблица 4-4 се използва сленото:
CREATE TABLE CD_ARTISTS
( ARTIST_ID INT PRIMARY KEY,
ARTIST_NAME VARCHAR(60),
AGENCY_ID INT );
Този метод създава първичен ключ за колоните ARTIST_ID и ARTIST_NAME.
FOREIGN KEY или Външен Ключ Външния Ключ се различава от първичния по това, че се отнася за начина по който данните от една таблица са свързани с данните от друга таблица.
На Фиг. 4-5,е показано как FOREIGN KEY трябва да бъде конфигуриран в колоната PUBLISHER_ID във таблицата CD_TITLES.
Когато се създава Външен Ключ трябва да се има впредвид следното:
● Използваните колони трябва да се дефинират първо със UNIQUE или PRIMARY KEY
● FOREIGN KEY може да бъде създаден като колона или таблица. Ако е създаден като колона, може да се включи само една колона. А ако е създаден като таблица може да включва една или повече колони.
Ако искаме да добавим външен ключ към колоната ще използваме следната команда:
{ | } [ NOT NULL ]
REFERENCES [ ( ) ]
[ MATCH { FULL | PARTIAL | SIMPLE } ]
[ ]
Или
CREATE TABLE CD_TITLES
( CD_TITLE_ID INT,
CD_TITLE VARCHAR(60),
PUBLISHER_ID INT REFERENCES CD_PUBLISHERS );
Ако искаме да представим външния ключ като таблица използваме:
[ CONSTRAINT ]
CREATE TABLE Създаване на таблица ARTISTS CREATE TABLE ARTISTS
( ARTIST_ID INT,
ARTIST_NAME VARCHAR(60),
ARTIST_DOB DATE,
POSTER_IN_STOCK BOOLEAN );
Създаване на таблици 1. Първата таблица, която създаваме е COMPACT_DISCS. Тя включва 3 колони, 2 от които са INT тип и една VARCHAR(60). Тази таблица ще съдаржа данни за дисковете в наличност. Колоната COMPACT_
DISC_ID ще съдаржа номерата на всяко описано CD. Колоната CD_TITLE ще съдържа действителните имена на CD-та. Колоната LABEL_ID ще съдаржа номера идентифициращи компанията издател.
CREATE TABLE COMPACT_DISCS
( COMPACT_DISC_ID INT,
CD_TITLE VARCHAR(60),
LABEL_ID INT );
3. Последната таблица, която ще създадем е MUSIC_TYPES. Тя включва колоната TYPE_ID, която идентифицира всякя категория музика; и колоната TYPE_NAME, която показва истинските имена на категориите музика.
CREATE TABLE MUSIC_TYPES
( TYPE_ID INT,
TYPE_NAME VARCHAR(20) );
ALTER TABLE С командата ALTER TABLE мжем а моделираме таблицата по различен начин , примерен модел:
ALTER TABLE
ADD [COLUMN]
| ALTER [COLUMN]
{ SET DEFAULT | DROP DEFAULT }
| DROP [COLUMN] { CASCADE | RESTRICT }
1. Създаваме таблица с име COMPACT_DISC_TYPES, която ще включва колони COMPACT_DISC_ID и TYPE_ID. И двете колони ще са от типа INT.
CREATE TABLE COMPACT_DISC_TYPES
( COMPACT_DISC_ID INT,
TYPE_ID INT );
2 . Изтриваме таблицата от ДБ
DROP TABLE COMPACT_DISC_TYPES CASCADE;
3. Възтановяваме таблицата отново, но този път ще съдържа и трета колона, с име CD_TITLE от типа VARCHAR(60).
CREATE TABLE COMPACT_DISC_TYPES
( COMPACT_DISC_ID INT,
CD_TITLE VARCHAR(60),
TYPE_ID INT );
4. Изтриваме колоната CD_TITLE
ALTER TABLE COMPACT_DISC_TYPES
DROP COLUMN CD_TITLE CASCADE ;
5. Таблицата COMPACT_DISC_TYPESсега съдържа колоните COMPACT_DISC_ID и TYPE_ID.
DELETE От всички клаузи DELETE е най-простата. Съдържа общо 2 команди, от които само едната е главна.
DELETE FROM
[ WHERE ]
Клаузата DELETE FROM изисква да се покаже от къде точно трябва да се изтрие информацията. Каузата WHERE, която е подобна на тази от UPDATE, изисква да се посочат определени условия. Ако не се прибави WHERE във командата DELETE, ще се изтрият всички редове в таблицата. В тази клауза могат да се изтриват само редове.
Като приложим DELETE за таблицата CD_INVENTORY за да изтрием всички редове използваме:
DELETE FROM CD_INVENTORY;
Ако изкаме да изтрием само опеделена част от таблицата, трябва да включим клаузата WHERE. Например да изтрием редовете където стойността на MUSIC_TYPE е Country:
DELETE FROM CD_INVENTORY
WHERE MUSIC_TYPE = 'Country';
INSERT INTO INSERT INTO ни позволявя да добавяме различна информация в таблиците от ДБ.
“Inserting Values from a SELECT Statement”
INSERT INTO
[ ( [ { , } . . . ] ) ]
VALUES ( [ { , } . . . ] )
Когато използваме Insert командата, трябва да се спазват следните правила:
● Ако имената на колоната не са означени във клаузата INSERT INTO, тогава за всяка колона трябва да има отделна стойност, и те трябва да са във същия ред във който са дефинирани в таблицата.
● Ако имената на колоните са посочени във командата INSERT INTO, тогава трябва да има точно една стойност за посочена колона, и тези стойности трябва да са във същия ред, в който са дефинирани във INSERT INTO.
● Ттрябва да се въведат стойности за всяка колона в таблицата, освен в колоните, които позволяват нулеви или null сойности или имат дефинирани стойности.
● Трябва да се използва командата NULL (or null) като стойност в VALUES клауза, за да се посочат нулеви стойности за всяка колона, която позволава.
Използваме таблицата CD_INVENTORY:
CREATE TABLE CD_INVENTORY
( CD_NAME VARCHAR(60) NOT NULL,
MUSIC_TYPE VARCHAR(15),
PUBLISHER VARCHAR(50) DEFAULT 'Independent' NOT NULL,
IN_STOCK INT NOT NULL );
Тук се поставят стойности за всяка комона от таблицата CD_INVENTORY
INSERT INTO CD_INVENTORY
Тук имаме само три стойности, но ни липсва четвъртата, която е MUSIC_TYPE.
INSERT INTO CD_INVENTORY
VALUES ( 'Out Of Africa', null, 'MCA Records', 29 );
За PUBLISHER, и IN_STOCK колоните на таблицата CD_INVENTORY са следните:
INSERT INTO CD_INVENTORY ( CD_NAME, PUBLISHER, IN_STOCK )
VALUES ( 'Fundamental', 'Capitol Records', 34 );
INSERT INTO CD_INVENTORY ( CD_NAME, MUSIC_TYPE, IN_STOCK )
VALUES ( 'Orlando', 'Soundtrack', 5 );
Може да се добавят всички 5 колони наведнъж със клаузата INSERT INTO. Но за това се изисква да се спазват тония брой на стойностите, същия ред на колоните. Следващия пример с INSERT добавя стойностите във всички колони от таблицата CD_INVENTORY:
INSERT INTO CD_INVENTORY ( CD_NAME, MUSIC_TYPE, PUBLISHER, IN_STOCK )
VALUES ( 'Court and Spark', 'Pop', 'Asylum Records', 22 );
SELECT Клаузата SELECT като цяло изглежда по следния начин:
SELECT [ DISTINCT | ALL ] { * |