Лабораториски Бази 3

You might also like

You are on page 1of 40

Ограничување на

вредностите на
податоците

Лабораториска вежба 3
Содржина
► Ограничување на вредностите на податоците
► Додавање и бришење на ограничувања
► Искористување на колоната IDENTITY
► Ограничување PRIMАRY KEY
► Ограничување UNIQUE
► Ограничување FOREIGN KEY
► Ограничување за валидност на податоците
 Ограничување CHECK
 Ограничување DEFAULT
► Глобални уникални идентификатори

► Задача
Ограничување на вредностите на податоците
► SQL server подржува два начина за реализирање на целоста на
податоците – процедурен и декларативен.
► Процедурниот се извршува преку тригери, зачувани процедури,
вредности по подразбирање (defaults) правила и т.н. Овој начин
е подобар но при изполнението се можно појава на грешки.
► Декларативниот начин е со помош на ограничувањата кој
преставува начин за управување на податоците со раширен SQL
код, кој се користи при создавање и промена на табелите.
► Системните процедури exec sp_helpconstraint ‘MyTable’ и exec
sp_help ‘MyTable’ ни дават информации за ограничувањата
во табелите.
► Имињата на ограничувањата треба да се уникатни.
► Конструкциите CREATE TABLE и ALTER TABLE во Transact-
SQL ни даваат повеќе возможности за додавање, бришење
на ограничувања за разлика од графичкиот интерфејс.
Додавање и бришење на ограничувања
► Ограничувањата се декларират на ниво колона или на
ниво табела. Ограничувањата кој користат повеќе од
една колона, се декларират на ниво табела.
Дефинирање на ограничувања при создавање на
табела:

CREATE TABLE [database_name.[owner]. | owner.]table_name


(
 {col_name datatype [null_option] [Identity_option]
                    [RowGUID_option] [col_constraint[,…]]
 |table_constraint
} [, …]
)
[ON {filegroup_name | [DEFAULT]}]
[TEXTIMAGE_ON {filegroup_name | [DEFAULT]}]
► Ограничувањето на колона е претпочитано поради тоа што
дефиницијата е полесна за читање. Ограничувањето на ниво
табела се користи само кога е неопходно, и е вклучено на
крајот на списокот од колони.

Пример:

CREATE TABLE MyDatabases..Employees


(EmployeesID int NOT NULL IDENTITY PRIMARY KEY,
FirstName varchar(25) NOT NULL,
LastName varchar(25) NOT NULL,
MB char(10) NULL CONSTRAINT unique_MB UNIQUE,
Salary money NOT NULL CHECK (Salary >0) DEFAULT 1000)
► Дефинирање на ограничувањата при променување на
табела:

ALTER TABLE [database_name.[owner]. | owner.]table_name


 [WITH CHECK | WITH NOCHECK]
{ ALTER COLUMN col_name new_datatype [null_option]
                                     [RowGUID_option]
 |ADD {col_name datatype [null_option] [Identity_option]
        [RowGUID_option] [col_constraint[,…]]
      |table_constraint
      } [, …]
 |DROP {COLUMN col_name|[CONSTRAINT] constraint_name}
[,…]
 |{CHECK|NOCHECK} CONSTRAINT {ALL | constraint_name [,
…]}
 |{ENABLE | DISABLE} TRIGGER {ALL | trigger_name [,…]}
► Кога се корист ALTER TABLE, табелите, кој се
променуваат веројатно имаат внесени податоци.
Можно е некој од тие податоци да не одговараат
на барањата на ограничувањата, кој се зададени.
Поради тоа SQL Server автоматски проверува во
постоечките податоци за некоректни податоци. Таа
проверка може да одземе време за исполнување,
при што во SQL Server има опција со која се
прескокнува оваа проверка. Со опцијата WITH
NOCHECK изразот ALTER TABLE забранува
проверка на ограничувањето за нов FOREIGN KEY и
CHECK ограничувања при при нивното додавање.
Тоа дозволува ограничувањата да бидат додавани,
дури и ако постојат податоци, кој ги нарушуваат.

► Опција по подразбирање е WITH CHECK.


► За забранување на постоечките ограничувања се
користи опцијата NOCHECK CONSTRAINT во
конструкцијата на ALTER TABLE. Ограничувањето
ќе остане забрането, додека не биде исполнета
командата ALTER TABLE со опцијата CHECK
CONSTRAINT.
► Опцијата NOCHECK нема ефект при
ограничувањата PRIMARY KEY, UNIQUE, DEFAULT.
► Тригерите можат да бидат разрешени или
забранети, кога се користат опциите ENABLE
TRIGGER и DISABLE TRIGGER во изразот ALTER
TABLE.
►  Ограниченијата можат да се додават, бришат,
разрешуват и забрануват во Management Studio
кога се искористи десен клик на некоја табела од
менито потоа Desigan при што ни се дава изгледот
на табелата по што со десен клик на некоја колона
може да зададеме некое ограничување.
► Кога се додава нова колона со ограничување или се
додава ново ограничување на ниво на табелата,
синтаксот користен за опис на колоните и
ограничувањата е точно како при конструкцијата
CREATE TABLE.

► Бршењето на ограничувањата се извршуваат на


следниот начин:

ALTER TABLE [database_name.[owner]. | owner.]table_name


DROP [CONSTRAINT] constraint_name

Пример:
ALTER TABLE MyDatabases..Employees
DROP CONSTRAINT unique_MB
Искористување на колоната IDENTITY
► ЕднаIDENTITY колона е специјална колона вo
табелата, автоматски се пополнува, и се
генерира секој пат, кога се додава нов запис во
табелата. Треба да се има во предвид следното
при користење на колона IDENTITY:
 може да има најмногу една колона IDENTITY во една
табела;
 колоната треба да користи целоброен тип
податоци(int, smallint, tinyint) или точен броен тип
податоци (numeric, decimal) без децимални делови,
т.е. колоната треба да содржи само цели броеви;
 колоната автоматски добива опција NOT NULL;
 колоната не може да се актуализира.
► Создавање на IDENTITY колона е со конструкцијата CREATE
TABLE или ALTER TABLE на следниот начин:
column_name datatype [null_option]
                     [IDENTITY [(seed, increment)]]
► Вредностите seed и increment се опции и oпределуват
соодветно првата вредност, која ќе се искористува и стапка
на зголемување за следните вредности во колоната. По
подразбирање се единици.
Пример:
1) Создавање на табела со неколку колони, првата од кои
ID е IDENTITY колона со почетна вредност и стапка 1:
CREATE TABLE IdentityExample1
( ID int IDENTITY NOT NULL,
FirstName varchar(25) NOT NULL,
LastName varchar(25) NOT NULL )
2) Создавање на табела со IDENTITY колона, на која изрично се
дефинирани почетната вредност и стапка:
CREATE TABLE IdentityExample2
( ID int NOT NULL IDENTITY(100, 5),
  FirstName varchar(25) NOT NULL,
  LastName varchar(25) NOT NULL )
 
3) Создавање на табела со IDENTITY колона со стапка на негативно
зголемување:
CREATE TABLE IdentityExample3
( ID int NOT NULL IDENTITY(0, -1),
  FirstName varchar(25) NOT NULL,
  LastName varchar(25) NOT NULL )

4) Додавање на колона IDENTITY во некоја табела


ALTER TABLE MyDatabase..MyTable
ADD id INT IDENTITY NOT NULL
► Кога пополнуваме редови од табела со колона IDENTITY со
помош на конструкцијата INSERT, колоната IDENTITY треба
да биде пропуштена од списокот на колони.
► Пример:

INSERT INTO IdentityExample1 (FirstName, LastName )


VALUES (‘AAAAA’,’BBBBB’)

► Опцијата IDENTITY_ INSERT дозволува изрично воведување


на вредности во колоната IDENTITY при корустење на
конструкцијата INSERT која го има следниот вид:
SET IDENTITY_INSERT
[database_name.[owner]. | owner.]table_name {ON|OFF}
Пример:
SET IDENTITY_INSERT MyDatabases..IdentityExample1 ON
INSERT INTO IdentityExample1 (ID, FirstName, LastName )
VALUES (87, 'AAAAA','BBBBB')
Ограничување PRIMАRY KEY
► Ограничувањето PRIMARY KEY (ограничување
примарен клуч) се користи за подржување на целост на
објект. Може да биде дефинирано на ниво колона (за
примарен клуч, кој се состои од една колона) или на
ниво табела (за примарен клуч, кој се состои од повеќе
од една колона). При искористување на
ограничувањето PRIMARY KEY треба да се има во
предвид следното:
 Колоните, на кој содржат примарен клуч, не допуштат
вредност NULL.
 Во една табела може да има само един примарен клуч.
 Над колоните, кој содржат примарен клуч, се создава
автоматичен индекс.
► Создавање на примарен клуч во конструкцијата CREATE
TABLE или ALTER TABLE има следниот синтаксис:
[CONSTRAINT pk_name]
PRIMARY KEY [ CLUSTERED | NONCLUSTERED ]
[(col_name1 [, col_name2 [, …, col_name16]])]
Примери:
1) Создавање на табела Employees со ограничување примарен клуч
над колоната EmployeeID:
CREATE TABLE Employees
( EmployeeID int         NOT NULL IDENTITY PRIMARY KEY,
  FirstName  varchar(30) NOT NULL,
  LastName   varchar(30) NOT NULL,
  HireDate   datetime    NULL )
 
2) Создавање на табела Employees и додавање на ограничување
првичен клуч над колоната EmployeeID:
CREATE TABLE Employees
( EmployeeID int         NOT NULL IDENTITY,
  FirstName  varchar(30) NOT NULL,
  LastName   varchar(30) NOT NULL,
  HireDate   datetime    NULL )
 
ALTER TABLE Employees
ADD CONSTRAINT PK_Emplyees
    PRIMARY KEY (EmployeeID)
► 3) Создавање на табела EmployeeReview со примарен
клуч PK_Emplyees, составен од две колони EmployeeID
и ReviewDate:
CREATE TABLE EmployeeReview
( EmployeeID int      NOT NULL,
  ReviewDate datetime NOT NULL,
  PerformanceRank tinyint NOT NULL,
  Comments text NULL,
    CONSTRAINT PK_Emplyees
    PRIMARY KEY (EmployeeID, ReviewDate) )
 
► Ограничувањето PRIMARY KEY може да се зададе, кога се користи
прозорецот Design (Сл.1) на Management Studio со маркирање на
колоните, кој сакаме сакаме да се примарни клучови и потоа
притискаме десен клик и од менито избираме Set Primary Key (Сл.2)

Сл.1

Сл.2
Ограничување UNIQUE
► Ограничувањето за уникалност е слично на
ограничувањето примарен клуч, но треба да се
имат во предвит следните разлики:
 Колоните, кој се состојат со ограничување за
уникатност, можат да имат вредности NULL.
 Во една табела може да има нула, едно или повеќе
ограничувања за уникатност.
► Создавањето на ограничување за уникатност во
конструкцијата CREATE TABLE или ALTER TABLE
го има следниот синтаксис:
[CONSTRAINT unique_name]
UNIQUE [CLUSTERED | NONCLUSTERED]
[(col_name1 [, col_name2 [, …, col_name16]])]
Пример:
1) Создавање на табела Employees со колона MB, во која е
дефинирао ограничување за уникатност:
CREATE TABLE Employees
( EmployeeID int NOT NULL IDENTITY PRIMARY KEY,
  FirstName  varchar(30) NOT NULL,
  LastName   varchar(30) NOT NULL,
  HireDate   datetime    NULL,
  MB  char(10)    NULL UNIQUE )
 
2) Додавање на колона MB, во која е дефинирано
ограничување за уникатност, во веќе создадена табела
Employees:
ALTER TABLE MyDatabase..Employees
ADD MB char(10) NULL
    CONSTRAINT unique_mb UNIQUE (MB)
► Ограничувањето UNIQUE може да се зададе, кога се
искористи прозорецот Design на (Сл.1) на Management Studio
со маркирање на колоните, кој сакаме сакаме да се примарни
клучови и потоа притискаме десен клик и од менито
избираме Indexes/Key (Сл.3) потоа се отвора прозор како на
слика 4 каде натискаме Add и во Type избираме Unique Key и
соодветно ги мене и другите параметри.

Сл.3 Сл.4
Ограничување FOREIGN KEY
► Ограничувањето FOREIGN KEY (ограничувањето
надворешен клуч) се користи за подржување на
целоста на врските помеѓу табелите. При користење
на ограничувањето FOREIGN KEY треба да се има во
предвид следното:
 Надворешниот клуч треба да се однесува кон
примарниот клуч или ограничувањето за уникатност
во реферираната табела. Надворечниот клуч може да
реферира иста табела (рекурсивна релација) или
друга табела во истата база. За референција кон
табела од друга база се користи тригер.
 Бројот на колоните во надворешниот клуч треба да е
ист со бројот на колоните во примарниот клуч (или
ограничувањето за уникалност) во реферираната
табела. Типовете на колоните исто треба да се
еднакви.
 Никакви индекси не се создават автоматски над
колоните, кој учествуваат во надворешниот клуч.
► Значењето на ограничувањето надворешен клуч е да контролира податоците,
кој се чуват во реферираштата и реферираната табела. Родителските записи не
можат да бидат избришани, ако постојат подчинени соодветни записи;
родителскиот клуч не може да се променува, ако има соодветни записи во
подчинената табела; не може да се додава запис во подчинената табела, ако
надворешниот клуч не е иста со ниедна примарна вредност.
► Создавањето на надворешен клуч во конструкцијата CREATE TABLE или
ALTER TABLE го има следниот синтаксис:
[CONSTRAINT fk_name]
[FOREIGN KEY (col_name1 [, col_name2 [, …, col_name16]])]
REFERENCES referenced_table_name
(ref_col_name1 [, ref_col_name2 [, …, ref_col_name16]])
1) Создавање на табела EmployeeReview со надворешен клуч, кој ја
референцира табелата Employees.
CREATE TABLE EmployeeReview
( EmployeeID int NOT NULL
              REFERENCES Employees(EmployeeID),
  ReviewDate datetime NOT NULL,
  PerformanceRank tinyint NOT NULL,
  Comments text NULL,
    CONSTRAINT PK_EmployeeReview
        PRIMARY KEY (EmployeeID, ReviewDate) )
2) Овој пример покажува како да се создаде рекурсивна релација. Табелата
Employees има референција кон себе си. На ограничувањето е дадено име
FK_ManagerID.
CREATE TABLE Employees
( EmployeeID int NOT NULL IDENTITY PRIMARY KEY,
  FirstName varchar(30) NOT NULL,
  LastName varchar(30) NOT NULL,
  HireDate datetime NULL,
  ManagerID int NULL,
     CONSTRAINT FK_ManagerID
       FOREIGN KEY (ManagerID)
       REFERENCES Employees (EmployeeID) )
3) Додавање на ограничување FOREIGN KEY кон постојна табела.
CREATE TABLE EmployeeReview
( EmployeeID int NOT NULL,
  ReviewDate datetime NOT NULL,
  PerformanceRank tinyint NOT NULL,
  Comments text NULL,
    CONSTRAINT PK_EmployeeReview
    PRIMARY KEY (EmployeeID, ReviewDate) )
 
ALTER TABLE EmployeeReview
ADD CONSTRAINT FK_EmployeeReview
    FOREIGN KEY (EmployeeID)
    REFERENCES Employees (EmployeeID)
► Во SQL Server можат само да се гледат постоечките
ограничувања надворешен клуч од проектниот изглед на табела.
Кога се искористи прозорецот Design на (Сл.1) на Management
Studio. Десен клик на колона Relationships (Сл.4) дава можност за
преглед на ограничувањата надворешен клуч (Сл.5) на избраната
табела потоа Add.

Сл.4 Сл.5
► Друг начин за создавање е прикажан на слика
6, кога ке се рашри дрвото на сите елементи во
базата и на keys десен клик (сл.6), при што се
отвора прозорец (сл.7) од каде менаџираме.

Сл.6

Сл.7
► Друга начин за додавање на надворешен клуч е преку Database Diagrams
(сл.8) по што се отвора прозорец (сл.9) од каде ги избираме табелите по
што ни се покажуват табелите и доколко некоја релација. Десен клик на
некоја табела ни ги дава опциите(сл.10) и со кликање и влечење на некој
колона на некоја табела кон некоја друга ни дава можност да поставиме
клуч (сл.11).

Сл.8 Сл.9

Сл.10
Сл.11
Ограничување за валидност на податоците
► Ова ограничување се користи за одржување на целосна
облас во SQL Server преку осигурување на валидни
вредности. Извршува се на два начина: со проверка на
вредностите на колоните и преку вредностите по
подразбирање кај колоните.
Ограничување CHECK
► Ограничувањето CHECK осигурува начин за SQL Server
да потврдува вредностите во колона (или колони),
когато се додава или променува ред. При искористување
на ограничувањето CHECK треба да се има во предвид
следното:
 Правилата за валидност на податоците во ограничувањето
CHECK треба да се логички изрази.
 Ограничувањето CHECK може да се однесува кон други колони
во истата табела.
► Создавање на ограничување CHECK во конструкцијата
CREATE TABLE или ALTER TABLE го има следниот
синтаксис:
[CONSTRAINT check_constraint_name]
CHECK (check_expression)
1) Создавање на табела со ограничување CHECK, декларирано на
ниво табела со име valid_manager, според кое никој служител не
може да нема началник, освен служител со идентификатор 1, кој
се предполага, дека е директор.
CREATE TABLE Employees
( EmployeeID int NOT NULL IDENTITY PRIMARY KEY,
  FirstName varchar(30) NOT NULL,
   LastName varchar(30) NOT NULL,
  HireDate datetime NULL,
  ManagerID int NULL
       CONSTRAINT FK_ManagerID
         FOREIGN KEY
         REFERENCES Employees (EmployeeID),
       CONSTRAINT valid_manager
         CHECK (ManagerID IS NOT NULL OR EmployeeID = 1) )
 
2) Додавање на ограничувањето end_of_month, кое гарантира, дека не може
да се прават промени во табелата после 28 во месецот. Тоа ограничување
никога не се обраќа кон колона од табелата.
ALTER TABLE Employees
ADD CONSTRAINT end_of_month
     CHECK (DATEPART(day, GETDATE())<28)
3) Забрана на ограничувањето end_of_month.
ALTER TABLE Employees
NOCHECK CONSTRAINT end_of_month
4) Бришење на ограничувањето end_of_month.
ALTER TABLE Employees
DROP CONSTRAINT end_of_month
► Ограничувањето CHECK може да се додаде и кога се користи
прозореца Design вo SQL Server Management Studio. Check
Constraints (Сл.12) дава можност за дефинирање на
ограничувањето CHECK на избраната табела по што се отвара
прозор како на сликата 13.

Сл.12 Сл.13
Ограничување DEFAULT
► Ограничувањето DEFAULT (ограничување по
подразбирање) се користи, когато се додава нов ред во
табела. Ако колоната има ограничување DEFAULT и
корисникот не дава изрично вредност за колоната,
тогаш се користи вредност од ограничувањето. При
користење на ограничувањето DEFAULT треба да се
има во предвид следното:
 Само едно ограничување DEFAULT може да се зададе за
дадена колона.
 Тоа ограничување не може да се зададе за колона со својство
IDENTITY или за колона од тип timestamp.
► Создавање на ограничување DEFAULT во
конструкцијата CREATE TABLE или ALTER TABLE го има
следниот синтаксис:
[CONSTRAINT default_constraint_name]
DEFAULT {constant_value | niladic_function | NULL}
[FOR column_name]
► При додавање на колона со ограничување DEFAULT преку
конструкцијата ALTER TABLE може да се искористат
клучовите зборови WITH VALUES, за пополнување на
постоечки редове со соодветна вредност:
ALTER TABLE table_name
ADD column_name datatype [null_option]
[ [CONSTRAINT default_constraint_name]
   DEFAULT {constant_value | niladic_function | NULL}
  [WITH VALUES] ]
Пример: Нека е создадена по следниот начин табелата:
CREATE TABLE Customers
( CustomerID int NOT NULL IDENTITY
        CONSTRAINT PK_customers PRIMARY KEY,
  CustomerName varchar(50) NOT NULL,
  Address varchar(50) NULL,
  City varchar(25) NULL,
  PhoneNumber char(15) NULL )
Во неа се воведени редови, по кое е неопходно да се додаде
колона CurrentBalance и да се пополни со вредност 0:
ALTER TABLE Customers
ADD CurrentBalance money NOT NULL
    CONSTRAINT DF_CurrentBalance
     DEFAULT 0 WITH VALUES
 
► Ограничувањето DEFAULT може да се додаде и кога се користи
прозорецот Design - Column Properties(Сл.14).

Сл.14
Глобални уникални идентификатори
► Ако една програма треба да генерира идентифицирашта колона,
која е уникатна во рамките на целата база, треба да се користи
својството ROWGUIDCOL, тип податоци uniqueidentifier и функција
NewID(). Својството ROWGUIDCOL на колона од тип uniqueidentifier
се задава, ако таа ќе се користи за идентификатор на ред.

► Пример:
CREATE TABLE Employees
( EmployeeID uniqueidentifier NOT NULL ROWGUIDCOL
             DEFAULT NewID(),
  FirstName varchar(25) NOT NULL,
  LastName varchar(25) NOT NULL )
 
► За да се додаде или избрише својство ROWGUIDCOL за постоечка
колона од тип uniqueidentifier, се користи конструкција ALTER
TABLE по следниот начин:
ALTER TABLE table_name
ALTER COLUMN column_name {ADD | DROP} ROWGUIDCOL
Пример:
CREATE TABLE Employees
( EmployeeID uniqueidentifier NOT NULL DEFAULT NewID(),
  FirstName varchar(25) NOT NULL,
  LastName varchar(25) NOT NULL )
 
ALTER TABLE Employees
ALTER COLUMN EmployeeID ADD ROWGUIDCOL
► Задача 1. Да се создаде база, која да чува информација, неопходна на
една фирма за продажба на определени продукти, за да може по-лесно и
по-ефикасно да се управува залихите и да се следат продажбите. За секој
продукт се чува информација за наименовањето му; вид (категорија);
доставувач; доставна цена; залихи количество; дали продажбата на тој
продукт е прекината или не; количество, което се отчитува за критично за
соодветен продукт (т.е. Покажува неопходност од нова доставка). За
продавниците на фирмата се чува информација за име; адрес; град;
телефонски број; факс; e-mail; Web адрес. За служителите се подржува
информација за имиња; должност; ЕГН; продавниците, во кој работи;
дата на влез; дата на излез; телефонски број; адреса; град; e-mail. За
доставувачите на стоки се чува информација за името на фирмата-
доставувач; име за контакт; должност на служителот, чието име е
зачувано; адрес; телефонски број; факс; e-mail; Web адрес. За клиентите
се поддържа информация за име на фирмата-клиент; име за контакт;
должност; адреса; телефонски број; факс; e-mail; Web адрес; Bulstat;
даночен број(за да е можно издавање на фактури). За продажбите се
подржува информација за клиент; служител; дата на продажба; општа
сума на продажба; продукти, закупени со дадена продажба; продадено
количество од соодветен продукт; продажна цена; попус како и процент
од продажната цена за купување на големо количество од даден продукт;
попус како и за процент од целата сума за купување на вредност над
дадена сума или за клиенти со годишна сума на пазарување над дадена
сума.
Решение:

Базата може да се создаде со следната T-SQL конструкција:


CREATE DATABASE MyDatabase
ON
( NAME = MyDatabase_data,
  FILENAME = 'd:\data_students\MyDatabase_data.mdf',
  SIZE = 3MB,
  MAXSIZE = UNLIMITED,
  FILEGROWTH = 1MB )
LOG ON
( NAME = MyDatabase_log,
  FILENAME = 'd:\data_students\MyDatabase_log.ldf',
  SIZE = 1MB,
  MAXSIZE = UNLIMITED,
  FILEGROWTH = 1MB )
Табелите, кој се неопходни, се Products, Categories, Suppliers, Employees,
Customers, Sales, SaleDetails. Тие ги имат следните колони:
Табели Колони
Products ProductID, ProductName, CategoryID, SupplierID, Price, Stock,
ReorderLevel, Discontinued

Categories CategoryID, CategoryName, Notes

Suppliers SupplierID, CompanyName, ContactName, ContactTitle, Address, City,


PostalCode, PhoneNumber, FaxNumber, EmailAddress, WebAddress

Employees EmployeeID, FirstName, Surname, LastName, Title, EGN, StoreID,


HireDate, TerminationDate, ManagerEmpID, PhoneNumber, Address,
City, EmailAddress
Stores StoreID, StoreName, Address, City, PostalCode, PhoneNumber,
FaxNumber, EmailAddress, WebAddress

Customers CustomerID, CompanyName, ContactName, ContactTitle, Address,


City, PostalCode, PhoneNumber, FaxNumber, EmailAddress,
WebAddress, Bulstat, TaxNumber, CurrentBalance
Sales SaleID, CustomerID, EmployeeID, SaleDate, TotalForSale, Discount

SaleDetails SaleID, ProductID, Quantity, Price, Discount


Забележка: Зема се во предвид дека еден продукт се доставува од
точно еден доставувач, т.е. Релацијата помеѓу табелата Suppliers и
Products е “едно кон многу”. Освен тоа во базата не е осигурена
возможност за детално следење на отделните доставки на
различни продукти. Табелите во разгледанат база ќе се искористи
во сите останати примери, како целта е во таа да се даде на
основниот смисол, което бара да се избегне непотребно
усложнување на моделот на базата.
Релациите меѓу табелите се покажани на следната слика:
Задача 2. Да се разработи проект на база податоци, кој ке се користи од
агенцијата за вработување. Во агенцијата се примат молби за вработување
од тие што барат работа и се подржува информацијаза слободните места,
предложени од работодавачите. Некој од служителите во агенцијата барат
кандидати со калификација за слободните работни места, а другите барат
слободни работни места за регистрираните кандидати. Кога се открие
совпаѓање, кандидаот добива известување за контакт со работодавачот.
Ако кандидатот биде приман, служителот кој го регистрирал кандидатот и
служителот кој го регистрирал работодавачот си го делат К-15. Да се
определат табелите кој се барат за дефинирање на база на податоци.

Решение: Проектот на базата на податоци може да се претстави со следната


шема.
Во проектот се вклучени следните основни табели:
Jobs содржи информации за слободните работни места – опис на
должноста, плата, број слободни места. Содржи колона EmployerID, за
која е дефинирано ограничување надворешен клуч и е насочен кон
табелата Employers за да се определи кој работодавател нуди работа.
Recruiters има информација за сите служители во агенцијата.
Employers има податоци за работодавачите кој нудат сободни места. За
да се определи кој служител го регистрирал работодавачот во
табелата е создадена колона RecruiterID која е адворешен клуч кој е
насочен кон табелата Recruiters.
Applicants содржи податоци за кандидаите за слободните места – име,
адреса, клалификација CV и т.н. Создадена е колона RecruiterID
надворешен клуч насочен кон табелата Recruiters (така се определува
кој служител го регистрирал кандидато). За да се одбележува дали
некој кандидат е приман во табелата е дефиниран надворешен клуч
кој е насочен кон табелата Jobs.
Aplications содржи информација за декларираните од кандидатот
посакувани должности, плата, раборно време и т.н. Се состои од
надворешен клуч ApplicationID насочен кон Applicants.

You might also like