Na 9 laboratorium zajmiemy się projektowaniem baz danych.
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)
);
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';
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');