Na 9 laboratorium zajmiemy się projektowaniem baz danych.

  1. Przeanalizujemy jak zaprojektowana jest baza employees.
  2. Stworzymy przykładową bazę danych ,,od zera"
  3. Omówimy podstawowe zasady jakie należy stosować przy projektowaniu baz danych.

Stwórzmy przykładową bazę danych - bazujemy na przykładzie z wykładu.

Przeanalizuj postaci normalne opisane na wykładzie i upewnij się, że rozumiesz dlaczego podzielilismy jedną dużą tabelę na kilka mniejszych. Jakie są korzyści z takiego rozbicia?

Jeśli zastanawiasz się czemu właśnie w taki sposób została zaprojektowana baza danych i dlaczego taka a nie inna normalizacja została zastosowana to przeczytaj np. to.

Składnię można podejrzeć w dokumentacji, lub wzorować się na bazie employees.

Najpierw tworzymy nową bazę. Możemy to zrobić z poziomu linii komend:

`ścieżka_do_mysql/mysql`
CREATE DATABASE nazwa_bazy;

Ewentualnie, ponieważ mamy już skonfigurowane połączenie z jakąś bazą mysql w DataGrip’ie, możemy połączyć się przez niego.

CREATE DATABASE nazwa_bazy;
USE nazwa_bazy;

Nasza baza nie powinna zawierać żadnych tabel:

SHOW TABLES;

Tworzymy tabele dla bazy z wykładu.

CREATE TABLE klienci (
    IDklient      INT             NOT NULL,
    NazwaKlienta  VARCHAR(40)       NOT NULL,
    Adres           VARCHAR(16)     NOT NULL,    
    KodPocztowy   VARCHAR(6),    
    Miasto              VARCHAR(16)     NOT NULL,    
    Wojewodztwo     VARCHAR(16)     NOT NULL,    
    PRIMARY KEY (IDklient)
);
CREATE TABLE produkty (
    KodProduktu         INT             NOT NULL,
    Nazwa                       VARCHAR(40)         NOT NULL,
    Producent               VARCHAR(20),    
    CenaJedn                    DECIMAL(5,2)        NOT NULL,
    PRIMARY KEY (KodProduktu)
    UNIQUE KEY (Nazwa)
);

Uzupełnienie bazy danych rekordami

INSERT INTO `klienci` VALUES (1,'Stanisław Salicki', 'Janiszewskiego 23/13', '50-372', 'Wrocław', 'Dolnośląskie'),
(2,'Mieczysław Waligóra', 'Korfantego 13/23', '40-002', 'Katowice', 'Śląskie');

Jaki jest błąd? Jak go naprawić?

Możemy też dokonać aktualizacji pewnych danych w tabeli:

UPDATE klienci
SET NazwaKlienta='Stanisław Sulicki', KodPocztowy='50-371'
WHERE NazwaKlienta='Stanisław Salicki'; 

Oraz usuwać rekordy z tabeli:

DELETE FROM klienci
WHERE Miasto='Katowice'; 

Zmiana tabeli

Powiedzmy, że chcemy, żeby ID klienta dodawało się w sposób automatyczny (chcemy mieć kolejne liczby naturalne). Komenda, którę chcemy uzyć to ALTER.

ALTER TABLE klienci MODIFY IDklient INT( 11 ) NOT NULL AUTO_INCREMENT;
DESC klienci;
ALTER TABLE klienci AUTO_INCREMENT = 10;
INSERT INTO klienci (NazwaKlienta, Adres,KodPocztowy,Miasto ,Wojewodztwo )
VALUES ('Jaroslaw Psikuta', 'Bryly 23/13', '01-002', 'Warszawa', 'Mazowieckie');

Ćwiczenia

  1. Skonstruuj kwerendy tworzące pozostałe dwie tabele. Pamiętaj o Foreign Key.
  2. Dodaj po przynajmniej jednym rekordzie do każdej tabeli.