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

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:

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");
            }
        }
    }
}
Za dalji rad se radi slično kao u prethodnih par časova ... ali to nastavljamo sledeće nedelje ....



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

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:

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 ....

...
...

Last modified: Sunday, 2 November 2025, 3:32 PM