Autor | Zpráva | ||
---|---|---|---|
Snipo Profil |
#1 · Zasláno: 8. 12. 2014, 18:23:13 · Upravil/a: Moderátor (editace znemožněna) 9. 12. 2014, 18:39:23
Č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 |
#2 · Zasláno: 8. 12. 2014, 19:23:37
aktivacia zbytecna, udelej z toho sloupec v uzivatelich.
V triedy bych pridal id, bude se hodit pri editaci. |
||
Snipo Profil |
#3 · Zasláno: 8. 12. 2014, 19:53:31
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 |
#4 · Zasláno: 8. 12. 2014, 21:12:47
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 |
#5 · Zasláno: 8. 12. 2014, 21:13:00
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?
|
||
Časová prodleva: 9 let
|
0