
Tabele predstavljaju osnovnu komponentu u relacionim bazama podataka. One omogućavaju organizaciju i skladištenje podataka na način koji olakšava upravljanje podacima i dobijanje korisnih informacija. U ovoj lekciji ćemo prikazati osnove kreiranja SQL tabela, koristeći jednostavne primere kako bismo pojasnili osnovne koncepte.
Kreiranje SQL tabela uključuje definisanje strukture tabele, određivanje kolona i njihovih tipova podataka, kao i dodavanje ograničenja kako bi se osigurao integritet podataka.
Kroz praktične primere i korake, ova lekcija će vam omogućiti da samostalno kreirate strukturu tabela u svojim budućim projektima.
Primarni i strani ključ
Primarni ključ je jedinstvena kolona ili kombinacija kolona u tabeli koja jednoznačno identifikuje svaki red u toj tabeli.
Osnovna svrha primarnog ključa je da osigura integritet podataka tako što sprečava unos duplih ili null vrednosti u ključnoj koloni. Može da se koristi kao referenca u drugim tabelama za uspostavljanje veza između različitih tabela.
Strani ključ je kolona ili kombinacija kolona u jednoj tabeli koja uspostavlja vezu sa primarnim ključem u drugoj tabeli. Strani ključ obezbeđuje integritet između povezanih tabela, tako što osigurava da se ne može uneti vrednost stranog ključa koja ne postoji u povezanoj tabeli kao primarni ključ.
Ukratko, primarni ključ identifikuje jedinstvene redove u tabeli, dok strani ključ uspostavlja vezu između tabela i osigurava integritet podataka putem te veze.
Kreiranje tabele preko wizard-a
Desnim klikom označimo stavku Tables i izaberemo opciju New, zatim Table.

Pojaviće se prozor u kome je potrebno definisati kolone od kojih se sastoji tabela i tipove podataka za svaku od kolona.

Opcija Allow Nulls, ukoliko se označi, definiše da unos podataka za datu kolonu nije obavezan i da polje može ostati prazno. Obrnuto, ako se ne označi, znači da ta kolona uvek mora sadržati validnu vrednost i ne sme ostati prazna.

Nakon što smo definisali kolone, potrebno je odrediti primarni ključ, koji označava identifikaciju svakog reda u tabeli na jedinstven način. To praktično znači da se isti podatak ne može više puta ponoviti za datu kolonu.
Za primarni ključ postavićemo kolonu Customer_ID.
Desnim klikom označimo kolonu koja će predstavljati Primarni ključ i kliknemo na opciju Set Primary Key.

Klikom na dugme X pored naziva upita, pojaviće se prozor putem koga možemo sačuvati promene. Potrebno je kliknuti na opciju Yes.

U novootvorenom prozoru treba dodeliti naziv tabele.

U Object Explorer-u se može videti kreirana tabela.

Desnim klikom na tabelu Customer i izborom opcije Edit Top 200 Rows pojaviće se prozor putem koga se mogu uneti podaci u tabelu.


Podaci mogu biti uneti u tabelu i putem SQL upita:
INSERT INTO [dbo].[Customers]
([Customer_ID]
,[Customer_Name]
,[Address]
,[Postal_Code]
,[City])
VALUES
(‘00121’,
‘Customer1’,
‘Address 1’,
‘210041’,
‘New York’)
Pored toga, postoji mogućnost i importa podataka iz Excel fajla, što je objašnjeno u lekciji:
Kreiranje tabele preko SQL upita
Pored mogućnosti da se tabela kreira putem putem Wizard-a, možemo koristiti i SQL upite, gde putem jednostavnih upita možemo kreirati, brisati i menjati tabele u bazi podataka.
SQL sintaksa za kreiranje tabele
/*Customers Table*/
CREATE TABLE [dbo].[Customers](
[Customer_ID] [varchar](5) NOT NULL PRIMARY KEY,
[Customer_Name] [varchar](30) NOT NULL,
[Address] [varchar](50) NULL,
[Postal_Code] [nchar](10) NULL,
[City] [varchar](30) NULL
);
Za potrebe narednih primera i vežbi, kreiraćemo još 3 tabele putem SQL upita.
U ovim tabelama se pojavljuje i strani ključ. U tabeli Orders, strani ključ je Customer_ID koji povezuje tabele Orders i Customers. U tabeli Orders ne može da se pojavi šifra kupca tj. Customer_ID koji ne postoji u tabeli Customers.
/*Orders Table*/
CREATE TABLE [dbo].[Orders](
[Order_ID] [varchar](10) NOT NULL PRIMARY KEY,
[Customer_ID] [varchar](5) NOT NULL,
[Order_Date] [datetime] NULL,
CONSTRAINT FK_CustomerID FOREIGN KEY (Customer_ID) REFERENCES Customers(Customer_ID)
);
/*Products Table*/
CREATE TABLE [dbo].[Products](
[Product_ID] [varchar](5) NOT NULL PRIMARY KEY,
[Product_Name] [varchar](50) NOT NULL,
[Price] [decimal](10, 2) NOT NULL
);
/*Order_Details Table*/
CREATE TABLE [dbo].[Order_Details](
[Order_ID] [varchar](10) NOT NULL,
[Product_ID] [varchar](5) NOT NULL,
[Quantity] [int] NULL,
CONSTRAINT FK_OrderID FOREIGN KEY (Order_ID) REFERENCES Orders(Order_ID),
CONSTRAINT FK_ProductID FOREIGN KEY (Product_ID) REFERENCES Products(Product_ID)
);

SQL sintaksa za brisanje tabele
DROP TABLE [dbo].[Customers]
SQL sintaksa za izmenu tabele, tj. kolona u tabeli
/*Menjanje tipa podataka kolone “Customer_ID” u varchar(5) i postavljanje NOT NULL ograničenja*/
ALTER TABLE [dbo].[Customers]
ALTER COLUMN Customer_ID VARCHAR(5) NOT NULL;
/*Dodavanje primarnog ključa na kolonu “Customer_ID”*/
ALTER TABLE [dbo].[Customers]
ADD CONSTRAINT PK_Customers PRIMARY KEY (Customer_ID);
/*Menjanje tipa podataka kolone “Customer_Name” u varchar(30) i postavljanje NOT NULL ograničenja*/
ALTER TABLE [dbo].[Customers]
ALTER COLUMN Customer_Name VARCHAR(30) NOT NULL;
/*Menjanje tipa podataka kolone “Address” u varchar(50)*/
ALTER TABLE [dbo].[Customers]
ALTER COLUMN Address VARCHAR(50);
/*Menjanje tipa podataka kolone “Postal_Code” u nchar(10)*/
ALTER TABLE [dbo].[Customers]
ALTER COLUMN Postal_Code NCHAR(10);
/*Menjanje tipa podataka kolone “City” u varchar(30)*/
ALTER TABLE [dbo].[Customers]
ALTER COLUMN City VARCHAR(30);
