Portál AbcLinuxu, 10. května 2025 17:14
1: Jan Novák; 2: Pavel Nový, bratr; 3: Jana Stará; 4: Jan Pil; 5: Lada Malá, sestra | 1: muž; 2: muž; 3: žena; 4: muž; 5: žena | 1: nosič; 2: tavič; 3: prodavačka; 4: vodák; 5: kuchařka
Tabulka neobsahuje primární klíč, ten bych asi generoval. Počet řádků by měl být do 100.000, sběr dat ještě probíhá.
Sloupce obvykle obsahují text poznámek, jednou příjmení, jedenkrát datum, to také ve formátu dne v týdnu (pondělí – neděle), jednou název obce.
Nemám s návrhem db zkušenosti, budu tedy moc rád pokud mne navedete rozumným směrem, děkuji předem všem.
Pepa
PS: není to žádný školní úkol, chci jen pomoci synovi zpracovat data resp. z nich něco vytáhnout, jde o jeho zájem nikoliv o školní zadání.
CREATE TABLE schuze ( schuze_id SERIAL PRIMARY KEY, datum TIMESTAMP WITH TIME ZONE NOT NULL ); CREATE TABLE osoba ( osoba_id SERIAL PRIMARY KEY, jmeno TEXT NOT NULL, prijmeni TEXT NOT NULL, zena BOOLEAN NOT NULL, cinnost_id INTEGER REFERENCES cinnost (cinnost_id) NOT NULL, poznamka TEXT ); CREATE TABLE osoba_na_schuzi ( osoba_id INTEGER REFERENCES osoba (osoba_id) NOT NULL, schuze_id INTEGER REFERENCES schuze (schuze_id) NOT NULL, PRIMARY KEY (osoba_id, schuze_id) ); CREATE TABLE cinnost ( cinnost_id SERIAL PRIMARY KEY, nazev_cinnosti TEXT NOT NULL UNIQUE );Přečtěte si Database normalization na anglicé Wikipedii (popř. české, tam je také pěkný článek). V relační databázi je snaha oddělit data od prezentace, takže například Vaše „jedenkrát datum, to také ve formátu dne v týdnu“ je nerozumné. Když dáte do databáze datum (s pomoci typu
TIMESTAMP WITH TIME ZONE
), je netřeba určovat den v týdnu. Databáze s tím snáz pracuje a až v SELECT
u nebo v aplikaci si z toho uděláte textové datum. (PostgreSQL to dělá i implicitně.)
Totéž platí pro činnosti – vyndáme je do samostatné tabulky a můžeme si tak činnost representovat číslem (tím usnadníme práci počítači) a můžeme přidávat informace k činnostem.
Osoby stejně tak máme zvlášť – pak můžeme zapsat to, že na jedné schůzce byla jedna a tatáž osoba. (Pokud to nevíte, tak použijte vazbu 1 (schůzka) : N (osob), tedy to, že se zbavíme osoba_na_schuzce
a schůzku referencujeme z osoby jako činnost.)
Kód jsem netestoval, je napsaný pro PostgreSQL.
Pokud uvedete bližší podrobnosti o datech a účelu, mohu poradit dále.
zena BOOLEAN NOT NULLDěláš si srandu? A pojmenovávat věci česky je znak amatérismu.
zena
. Může to být i muz
, nebo cokoliv (tedy např. i Vámi zmiňované „má ho“/„má ji“), co tazateli bude vyhovovat.
SELECT DISTINCT
z jpegu?
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.