Autor Zpráva
Snipo
Profil
Čaute, mama ma poprosila či by som jej nemohol spraviť nejaký inventarizačný systém ktorý by jej uľahčil robotu a nemusela by všetko písať do papierov. Jej hlavná požiadavka bola aby sa mohla kedykoľvek do toho pozrieť a zistiť nejaké údaje, takže jasná voľba bola pre mňa vytvoriť nejakú webovú aplikáciu. Čítal som veľa článkov a normalizácií a pod. čo sa týka MySQL databázy no neviem či som všetko pochopil a som v tom dosť nováčik. Bol by som rád keby ste opravili chyby v mojom návrhu a poprípade upozornili na niektoré zlé návyky a pod.

Teraz k problému. Cieľom je navrhnúť databázu pre portál ktorá musí spĺňať tieto podmienky:
- na portál sa môže registrovať viac užívateľov
- každý užívateľ vlastní iba jeden sklad pod ktorým sú len určité triedy ktoré si užívateľ sám pridá
- po registrácií môže užívateľa aktivovať len administrátor
- musí sa zaznamenať každá akcia ako napr. pridanie, úprava, vyradenie alebo vymazanie knihy
- taktiež aby mohol administrátor napísať správu ktorá sa zobrazí užívateľom v ich administrácií

Tu je môj návrh:

Tabuľka uzivatelia
id int primary ai
meno varchar 50
priezvisko varchar 50
mail varchar 100
heslo varchar 255
admin boolean default = 0

Tabuľka aktivacia
id_uzivatel int primary

Tabuľka triedy
id_uzivatel int primary
nazov varchar 20 primary

Pri tejto tabuľke si nie som istý. Dočítal som sa, že každý záznam ( chápem ako riadok ) v tabuľke musí byť jednoznačne identifikovateľný ( to zasa chápem tak, že nemôže byť v tabuľke viac rovnakých primárnych kľúčov ). Keďže užívateľ môže vlastniť viac tried tak musím dať primary aj na názov? Inak by sa hodnota id_uzivatel opakovala.

Tabuľka ucebnice
id int primary ai
nazov varchar 100
autor varchar 100
vydavatelstvo varchar 200
stav enum = zachovalá, poškodená
popis_poskodenia varchar 255 NULL
cena decimal
datum_prijatia date
typ enum = učebnica, pracovný zošit

Tabuľka akcie
id int primary ai
typ enum = pridanie, úprava, vyradenie, zmazanie
id_ucebnica int

Tabuľka spravy
id int primary ai
obsah text
datum timestamp default = current_timestamp
mimochodec
Profil
aktivacia zbytecna, udelej z toho sloupec v uzivatelich.
V triedy bych pridal id, bude se hodit pri editaci.
Snipo
Profil
Neviem, moja myšlienka bola, že užívateľ ktorého id je v tabuľke activacia bude neaktivovaný. Takže pre aktiváciu stačí tento záznam vymazať a teda pri viacerých užívateľoch sa dosť ušetrí miesto nie? K tej tabuľke triedy, môžeš prosím ťa bližšie popísať tie výhody pri editácií? Nejako ma nič nenapadá.
tiso
Profil
Snipo: tvoj nápad s aktiváciami kvôli šetreniu miestom je zlý, budeš musieť zbytočne pracovať s ďalšou tabuľkou (insert, select, delete), vhodnejšie je pridať stĺpec aktivny boolean default = 0 a len ho meniť.
Do tabuľky akcie by si mal pridať stĺpec id_uzivatel, aby si vedel kto tú akciu spravil, a čas (timestamp) kedy to urobil.
K správam: neviem aké správy chceš posielať, či všetkým, alebo len niektorým (potom chýba stĺpec id_uzivatel), či sa budú zobrazovať stále, alebo len časovo obmedzene, alebo sa budú dať označiť ako prečítané a podobne.
mimochodec
Profil
Snipo:
Neviem, moja myšlienka bola, že užívateľ ktorého id je v tabuľke activacia bude neaktivovaný. Takže pre aktiváciu stačí tento záznam vymazať a teda pri viacerých užívateľoch sa dosť ušetrí miesto nie?

Pozitivní efekt té úspory by byl zanedbatelný a naopak proti němu jde to, že bys při ověření při přihlášení musel tu tabulku joinovat. No, obě ty věci jsou zanedbatelné, ale obecně můžeš počítat s tím, že počtem řádků jako takovým se v databázích nemá smysl zabývat.


K tej tabuľke triedy, môžeš prosím ťa bližšie popísať tie výhody pri editácií? Nejako ma nič nenapadá.
Vycházím z tohoto: "- každý užívateľ vlastní iba jeden sklad pod ktorým sú len určité triedy ktoré si užívateľ sám pridá". Nevím, čemu ta třída bude sloužit, ale jestli to je něco, co si může každý uživatel přidávat, editovat, mazat a asi i něčemu přiřazovat, musíš to nějak identifikovat. Z toho jednoznačně vyplývá:

ID - int, primary, ai
IDuzivatele - int
nazev - varchar

Kromě toho vidím, že varchar nastavuješ na délku 20, to je hodně málo. Dosáhneš tím opticky nějaké úspory, skutečný praktický pozitivní efekt bude nula a až zjistíš, že se někdo pokusil zadat název "Tento název má 23 znaků", nevešel se, nevšiml si toho a způsobilo mu to nějaké problémy, nebo třeba ani nezpůsobilo, ale musíš k tomu znovu sednout, přidat délku a opravit všechny oříznuté názvy, nebudeš rád.
Snipo
Profil
A ešte jedna otázka, keď pozerám na niektoré SQL dotazy kde vytvárajú tabuľky, tak sa tam často objavuje aj FOREIGN KEY. Viem čo to znamená, ale prečo je to v tom dotaze? Slúži to na niečo v tej databáze?

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: