Dobieranie typów kolumn do projektu tabeli — ćwiczenia interaktywne na przykładzie różnych scenariuszy baz danych.
Wybór właściwego typu danych dla każdej kolumny to jeden z najważniejszych kroków projektowania bazy. Zły dobór prowadzi do marnowania miejsca, błędów w obliczeniach i problemów z sortowaniem.
TEXT, jeśli wystarczy VARCHAR(200). Nie używaj INT, jeśli zakres mieści się w TINYINT.
Projekt VetClinic — system obsługi gabinetu weterynaryjnego. Encje i ich atrybuty wymagające doboru typów:
ENUM('nowe','w toku','zamknięte')
CHAR(11)
TINYINT
DATETIME
TEXT
DECIMAL(10,2)
CREATE TABLE — tabela ZWIERZĘTAklienci zawiera 4 błędnie dobrane typy.
Kliknij każdą linię, która zawiera błąd — zaznaczone linie podświetlą się.
Następnie sprawdź rozwiązanie.
Kliknij linie zawierające błędy (możesz kliknąć kilka).
CREATE TABLE dla tabeli WIZYTYwizyty.
Pamiętaj o:
zwierzeta.koszt (wartość pieniężna).oplacona jako wartości logicznej.diagnoza — może być długim tekstem.-- Tabela wizyt w klinice weterynaryjnej CREATE TABLE wizyty ( wizyta_id INT PRIMARY KEY AUTO_INCREMENT, zwierze_id INT NOT NULL, data_wizyty DATETIME NOT NULL, diagnoza TEXT, koszt DECIMAL(8,2) CHECK(koszt >= 0), oplacona TINYINT(1) DEFAULT 0, FOREIGN KEY(zwierze_id) REFERENCES zwierzeta(zwierze_id) );
ENUM i CHECK do ograniczeń danychprzesylki w firmie kurierskiej powinna zawierać:
status mogącą przyjąć wartości: nadana, w trasie, doręczona, zwrot — użyj ENUM.waga_kg z wartością większą od 0 — użyj CHECK.ubezpieczona jako wartość logiczną z domyślnym: NIE.CREATE TABLE przesylki ( id INT PRIMARY KEY AUTO_INCREMENT, nr_listu VARCHAR(15) NOT NULL UNIQUE, waga_kg DECIMAL(6,2) CHECK(waga_kg > 0), wartosc DECIMAL(10,2) CHECK(wartosc >= 0), status ENUM('nadana', 'w trasie', 'doreczona', 'zwrot') DEFAULT 'nadana', ubezpieczona TINYINT(1) DEFAULT 0 );
INF.03 PROJEKT — DOBÓR TYPÓW
Zaprojektuj tabelę pracownicy dla systemu HR małej firmy. Tabela powinna zawierać co najmniej 8 kolumn.
Wymagania:
CREATE TABLE pracownicy ( id INT PRIMARY KEY AUTO_INCREMENT, imie VARCHAR(40) NOT NULL, nazwisko VARCHAR(50) NOT NULL, pesel CHAR(11) UNIQUE NOT NULL, data_zatrudnienia DATE NOT NULL, wynagrodzenie DECIMAL(10,2) CHECK(wynagrodzenie >= 4300.00), stanowisko ENUM('junior', 'mid', 'senior', 'kierownik') NOT NULL, email VARCHAR(100) UNIQUE NOT NULL, zatrudniony TINYINT(1) DEFAULT 1 );
DATE jest lepsze niż VARCHAR(20) dla dat?CHAR(n) od VARCHAR(n)?DECIMAL, a nie FLOAT?ENUM?Postęp: 0 / 8