02.11. Projektovanje baza podataka
U prethodnoj školskoj godini ste imali predmet Baze podataka. U okviru tog predmeta ste prošli sve što je potrebno za ovaj čas.
Na jednom primeru (određuje se predlozima učenika na času) vršimo projektovanje manje baze podataka.
grupa 1: Baza energetskoh pića.
Analiza:
Postoji mnogo energetskih pića na tržištu. Jedno energetsko piće je proizveo jedan proizvođač, a jedan proizvođač može da u svom asortimanu ima više energetskih pića. Iz toga sledi da ćemo imati posebnu tabelu u koju ćemo da smestimo proizvođače i posebnu tabelu u koju ćemo da smestimo energetska pića.
Za proizvođača nam minimalno treba naziv proizvođača i njegova adresa (kao i proizvodjacID koji ga jedinstveno identifikuje - primary key)
Za energetska pića nam je potreban naziv pića, cena, proizvodjacID, vrsta pakovanja, količina koja se pakuje ..... ipak ne!
Vrsta pakovanja i količina koja se pakuje može da se ponovi za različita energetskih pića - na primer više njih može bit u konzervi od pola litra.Zbog toga ćemo kao posebnu tabelu postaviti Pakovanje koje u sebi minimalno ima vrstu i količinu (kao i pakovanjeID koji ga jedinstveno identifikuje - primary key je za tu tabelu a za energetska pića to je foreign key) .
Dijagram baze je u nastavku:

Grupa je izabrala da se koristi MS SQL Server, pa kreiramo bazu koju ćemo nazvati Epic, a da se vide SQL upiti se kreira ova baza i njene tabele kliknete da vidite/sakrijete
CREATE DATABASE Epic;
GO
USE Epic;
CREATE TABLE Proizvodjac
(
ProizvodjacID int PRIMARY KEY IDENTITY,
Naziv NVARCHAR(100),
Adresa NVARCHAR(100)
);
CREATE TABLE Pakovanje (
PakovanjeID int PRIMARY KEY IDENTITY,
Vrsta NVARCHAR(100),
Kolicina DECIMAL(5,2)
);
GO
CREATE TABLE Energetsko_pice
(
EnergetskoPiceID int PRIMARY KEY IDENTITY,
Naziv NVARCHAR(100),
ProizvodjacID int,
PakovanjeID int,
CONSTRAINT F1 FOREIGN KEY (ProizvodjacID) REFERENCES Proizvodjac(ProizvodjacID),
CONSTRAINT F2 FOREIGN KEY (Pakovanjeid) REFERENCES Pakovanje(PakovanjeID)
);
Napomena: Ako biste da umesto MS SQL Servera koristite MySQL, onda izbacite svaki GO, a umesto IDENTITY koristite AUTO_INCREMENT
Drugi deo bi bio da se svaka od tih tabela popuni sa podacima. To ćemo raditi iz aplikacije :
Kreirati windows forms aplikaciju u koju će se postaviti 2 textBox-a u koja se unose naziv i adresa proizvođača, kao i dugme za unos podataka. Pored toga postaviti comboBox koji bi se učitavao prilikom loada forme i prilikom bilo kakve izmene nad bazom. Slika forme je u nastavku:

Imena svih komponenti bi trebalo promeniti tako da se zna koji je za šta, ... ...
Dvoklikom na dugme generisaće se šablon - odgovor na događaj kilka na dugme, i tu pišemo naš programski kod u cilju pristupa bazi podataka. Prvo počinjemo povezivanjem na bazu. Biramo način preko Server Explorer-a: desni klik na Data Connections -> Add Connection pa se bira Microsoft SQL Server, pa se piše Server Name (ili može i tačka (.) ako je default instanca instalirana na računaru) i na dnu se bira naziv naše baze (epic)
Nakon što je kreirana konekcija ka bazi, dovoljno je kliknuti na tu konekciju u Server Exploreru i desni taster miša, properties - pa da se u prozoru za Property može kopirati konekcioni string - ako vas mrzi da tražite kako ono beše da se kreira konekcioni string
U programskom kodu, na vrhu, već znamo da treba da se doda using direktiva ... početak koda je sakriven iza sledećeg dugmića: prikaži/sakrij
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace projekat02novembar
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
SqlConnection konekcija = new SqlConnection("Data Source=.;Initial Catalog=epic;Integrated Security=True");
SqlCommand komanda = new SqlCommand();
private void btnUnosProizvodjaca_Click(object sender, EventArgs e)
{
if (txtAdresaProizvodjaca.Text != "" && txtNazivProizvodjaca.Text != "")
{
try
{
konekcija.Open();
komanda.CommandText = "INSERT INTO Proizvodjac(Naziv,Adresa) Values (@n,@a)";
komanda.Connection = konekcija;
komanda.Parameters.Clear();
komanda.Parameters.AddWithValue("@n", txtNazivProizvodjaca.Text);
komanda.Parameters.AddWithValue("@a",txtAdresaProizvodjaca.Text);
komanda.ExecuteNonQuery();
konekcija.Close();
}
catch (Exception zz)
{
MessageBox.Show(zz.Message);
}
}
else
{
MessageBox.Show("Nisu popunjena oba polja");
}
}
}
}
grupa 2: Baza bele tehnike
Analiza:
... biće dodato naknadno (bar je u planu), mada je priča slična kao u prethodnom primeru ....
...
Dijagram baze je u nastavku:

Grupa je izabrala da se koristi MS SQL Server, pa kreiramo bazu koju ćemo nazvati BT, a da se vide SQL upiti se kreira ova baza i njene tabele kliknete da vidite/sakrijete
CREATE DATABASE BT;
GO
USE BT;
CREATE TABLE Proizvodjac
(
ProizvodjacID int PRIMARY KEY IDENTITY,
Naziv NVARCHAR(100),
Adresa NVARCHAR(100)
);
CREATE TABLE Vrsta (
VrstaID int PRIMARY KEY IDENTITY,
Naziv NVARCHAR(100),
Boja NVARCHAR(100)
);
GO
CREATE TABLE Proizvod
(
ProizvodID int PRIMARY KEY IDENTITY,
Naziv NVARCHAR(100),
Cena DECIMAL(10,2),
ProizvodjacID int,
VrstaID int,
CONSTRAINT F1 FOREIGN KEY (ProizvodjacID) REFERENCES Proizvodjac(ProizvodjacID),
CONSTRAINT F2 FOREIGN KEY (VrstaID) REFERENCES Vrsta(VrstaID)
);
Napomena: Ako biste da umesto MS SQL Servera koristite MySQL, onda izbacite svaki GO, a umesto IDENTITY koristite AUTO_INCREMENT
Drugi deo bi bio da se svaka od tih tabela popuni sa podacima. To ćemo raditi iz aplikacije :
Kreirati windows forms aplikaciju u koju će se postaviti 2 textBox-a u koja se unose naziv i adresa proizvođača, kao i dugme za unos podataka. Pored toga postaviti comboBox koji bi se učitavao prilikom loada forme i prilikom bilo kakve izmene nad bazom. Slika forme je u nastavku:

Imena svih komponenti bi trebalo promeniti tako da se zna koji je za šta, ... ...
Dvoklikom na dugme generisaće se šablon - odgovor na događaj kilka na dugme, i tu pišemo naš programski kod u cilju pristupa bazi podataka. Prvo počinjemo povezivanjem na bazu. Biramo način preko Server Explorer-a: desni klik na Data Connections -> Add Connection pa se bira Microsoft SQL Server, pa se piše Server Name (ili može i tačka (.) ako je default instanca instalirana na računaru) i na dnu se bira naziv naše baze (epic)
Nakon što je kreirana konekcija ka bazi, dovoljno je kliknuti na tu konekciju u Server Exploreru i desni taster miša, properties - pa da se u prozoru za Property može kopirati konekcioni string - ako vas mrzi da tražite kako ono beše da se kreira konekcioni string
U programskom kodu, na vrhu, već znamo da treba da se doda using direktiva ... početak koda je sakriven iza sledećeg dugmića: prikaži/sakrij
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace BelaTehnika02nov
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
SqlConnection konekcija = new SqlConnection("Data Source=.;Initial Catalog=BT;Integrated Security=True");
SqlCommand komanda = new SqlCommand();
private void btnUnosProizvodjaca_Click(object sender, EventArgs e)
{
if(txtAdresaProizvodjaca.Text !="" && txtNazivProizvodjaca.Text !="")
{ // Unos novog proizvođača samo ako su oba polja popunjena !
komanda.Connection = konekcija;
komanda.CommandText = "INSERT INTO Proizvodjac(Naziv, adresa) values (@n, @a)";
komanda.Parameters.Clear();
komanda.Parameters.AddWithValue("@n", txtNazivProizvodjaca.Text);
komanda.Parameters.AddWithValue("@a", txtAdresaProizvodjaca.Text);
try
{
konekcija.Open();
komanda.ExecuteNonQuery();
MessageBox.Show("podaci uspešno uneseni");
konekcija.Close();
}
catch (Exception cc)
{
MessageBox.Show(cc.Message);
}
}
else
{
MessageBox.Show("Niste popunili oba potrebna polja");
}
}
}
}
Za dalji rad se radi slično kao u prethodnih par časova ... ali to nastavljamo sledeće nedelje ....
...
...