To D1ce: mas pravdu asi som mal by konkretnjsi.visledom ma byt databaza archivujuca fotky skupin a obaly ich albumov.
pre predstavu: www.7591.wz.cz.
chcel by som vytvorit vyhladavanie pomocou mena skupiny, roku zalozenia stylu atd. ako napriklad na:
www.metal-archives.com.
najjednoduhsie je samozrejme vytvorit databazu ktora by ukladala informacie o kazdom jednotlivom albume ale kedze kazda skupina ma vecsinou viac ako jeden album a s kazdeho statu je viac ako len jedna skupina udaje by sa opakovaly a preto chcem vytvorit "pomocne" tabulky a do tej hlavnej vkladat len indexi (v nadeji ze sa tak usetri nejake miesto).
snad je to o neco zrozumitelnejsie (dufal som ze to vypline uz s toho nacrtu)
Fórum › MySQL
Navrh db
1) pouzivej pro primarni sloupec jmeno "ID" popr "id"; auto increment, unique a not null jsou snad samozrejmosti.
2) nezakladej tabulku pro kazdou skupinu, udelej univerzalni tabulku treba ID|group_id|name|year
mas pravdu asi som mal by konkretnjsi.visledom ma byt databaza archivujuca fotky skupin a obaly ich albumov.
Ještěže si to uvědomuješ, ale chtělo by to udělat ještě jeden krůček a to vysvětlit nám co nejpodrobněji jak by sis to představoval, prosím.
najjednoduhsie je samozrejme vytvorit databazu ktora by ukladala informacie o kazdom jednotlivom albume ale kedze kazda skupina ma vecsinou viac ako jeden album a s kazdeho statu je viac ako len jedna skupina udaje by sa opakovaly a preto chcem vytvorit "pomocne" tabulky a do tej hlavnej vkladat len indexi (v nadeji ze sa tak usetri nejake miesto).
Jenomže já z toho bohužel téměř vůbec nechápu co by mělo být výsledkem. Samozřejmě si můžu dát tu práci, mrknout se jak to funguje jinde a o něco se pokusit, ale byl bych převelice rád, kdybys tento krok udělal prosím ty a zanesl ho do tohoto fóra. Nemusí to být buhvíjaká podrobná analýza, ale měla by být postačující k řešení problému, prostě musím na něčem stavět a zatím nemám ani tucha na čem. Bohužel link na metal-archives.com nefunguje asi mají přetížený server zrovna. Z toho náčrtku jsem ještě víc zmatěnější než popisu.
snad je to o neco zrozumitelnejsie (dufal som ze to vypline uz s toho nacrtu)
Heh je to ještě horší než předtím.
Btw. Věřím, že se jednou dopracujem ke kýženému výsledku.
<ot>Hlavně že tady jsou smajlíci s fakáčema, ale ani jeden s *THUMBS_UP*</ot>
To D1ce:
velice si cenim tvoju ochotu ale asi zme sa nepochopili. nechcem od teba hotovi zdrojak (ako to zvyknes robit), len som hcel aby mi nekdo odobril ze to o co sa pokusam neni uplna blbost a ze to vobec moze fungovat.
k tomu navrhu:
vysledkom budu profily jednotlivyh skupin obsahujuce nazov skupiny, rok vzniku, krajinu povodu, styl kt. ta skupina hra (strucne info). a vsetky oficialne albumy aj s rokom vydania. kludne by to mohlo vizerat nasledovne:
nazov_albumu I rok_vydania_albumu I nazov_skupiny_ktora_ ho_vydala I rok_vzniku_skupiny I styl_ih_hudby I krajina_povodu
ale je viac ako pravdepodobne ze skupina ma napriklad viac albumov a nektore udaje by sa tak casto opakovali a db by bola zbytocne velka.
Preto chcem vytvorit osve tabulky pre vlastnosti kt. sa opakuju (narodnost, styl atd) ocislovat ih a do tejto hlavnej tabulky zapisovat iba cisla jednotlivih hodnot. takze ta tabulka by vyzerala takto:
nazov_albumu I rok_vydania_albumu I ID_skupiny I
dalej vyhladavanie ba malo fungovat podla nasledujucich vlastenosti: mazov_skupiny, nazov_albumu, hudobny_styl, krajina_povodu. (pripadne ih kombinacia ale to uz by nemal byt problem)
vysledkom toho hladania chcem aby bol zoznam skupin ktore vyhladavaniu vyhovuju (co ine asi) (teda napriklad vsetky nemecke skupiny ktore v db su).
uz vazne neviem ako inak by som to povedal. dik za trpezlivost D1ce :)
Musim ti znova opakovat, ze kdyz budes zakladat dynamicke tabulky, tak z toho nikdy nevzejde nic dobreho? Udelej to tak, jak jsi rikal na zacatku, ale alba vseh skupin sluc do jedne velke jak uz jsem navrhoval. Pro mysql neni problem tabulka s tisice zaznamy, ale 150 tabulek bude dost velky problem pro tebe (a konec koncu mozna i pro mysql)
To CommanderZ: ved ano o tom si ma presvedcil hned. vizera to tak na 4 tabulky (groups,countries,styles,albums) moze byt?
btw.: co je zle na dynamickom pocte tabuliek?
To olgo: Konečně jsme sa pochopili, přestože jsem čekal bůhvíco nechceš, takže můj verdikt zní:
CREATE TABLE %DB_PREFIX%albums (
id INT UNSIGNED AUTO_INCREMENT NOT NULL,
bid INT UNSIGNED NOT NULL,
name VARCHAR(100) NOT NULL UNIQUE,
arelease DATE NOT NULL,
INDEX i_bid (bid),
PRIMARY KEY(id)
)
DEFAULT CHARACTER SET %CHARSET% COLLATE %COLLATION%;
CREATE TABLE %DB_PREFIX%bands (
id INT UNSIGNED AUTO_INCREMENT NOT NULL,
sid INT UNSIGNED NOT NULL,
oid INT UNSIGNED NOT NULL,
name VARCHAR(100) NOT NULL UNIQUE,
foundation DATE NOT NULL,
INDEX i_sid (bid),
INDEX i_oid (bid),
PRIMARY KEY(id)
)
DEFAULT CHARACTER SET %CHARSET% COLLATE %COLLATION%;
CREATE TABLE %DB_PREFIX%styles (
id INT UNSIGNED NOT NULL,
name VARCHAR(100) NOT NULL UNIQUE,
PRIMARY KEY(id)
)
DEFAULT CHARACTER SET %CHARSET% COLLATE %COLLATION%;
CREATE TABLE %DB_PREFIX%origins (
id INT UNSIGNED NOT NULL,
name VARCHAR(100) NOT NULL UNIQUE,
PRIMARY KEY(id)
)
DEFAULT CHARACTER SET %CHARSET% COLLATE %COLLATION%;
Ked by bol problém sa spajáním potažmo vyhledávániem, neboj sa ozvat.
Poznámka: Je to optimalizované na vyhladavanie né na updatovanie či vkladanie.
olgo píše:#
# btw.: co je zle na dynamickom pocte tabuliek?
Už len vyhledávanie by bolo pekelnie.
OT D1ce: Ty jsi blazen (samozrejme mysleno pozitivne), mel by jsis najit neco cim zaplacnes volny cas, evidentne ho mas prebytek :ms_0002:
CommanderZ píše:#
# OT D1ce: Ty jsi blazen (samozrejme mysleno pozitivne), mel by jsis najit neco cim zaplacnes volny cas, evidentne ho mas prebytek :ms_0002:
To si jenom myslíš, většinou jsem prováděl operace copy & paste & update.
Edit:
Btw1. Když porovnám počet svých příspěvků a tvých, zjistím, že vedeš o něco přes polovinu, proto bych polemizoval o tom, kdo má více volného času.
Btw2. Zmetku jeden (myšleno of course pozitivně :P ), poté co jsem si přečetl rvůj příspěvek, musel jsem jít s fotrem pytlovat. Sodoma gomora. :ms_0155:
D1ce píše:#
##CommanderZ píše:#
# OT D1ce: Ty jsi blazen (samozrejme mysleno pozitivne), mel by jsis najit neco cim zaplacnes volny cas, evidentne ho mas prebytek :ms_0002:
#To si jenom myslíš, většinou jsem prováděl operace copy & paste & update.#
#Edit:#
#Btw1. Když porovnám počet svých příspěvků a tvých, zjistím, že vedeš o něco přes polovinu, proto bych polemizoval o tom, kdo má více volného času.#
#Btw2. Zmetku jeden (myšleno of course pozitivně :P ), poté co jsem si přečetl rvůj příspěvek, musel jsem jít s fotrem pytlovat. Sodoma gomora. :ms_0155:
To jsem nepochopil, samozrejme ze ty jsi na to musel vynalozit 10* vice casu protoze ja jsem tam jen namlatil prvni co me napadlo, kdezto ty jsi bastlil dvacetiradkovy kod ;)
A to btw2...to je nejaka narazka na moje casy prispevku?
gil.karel píše:#
# Dice: Pytlovat? Co to je? :D
Taková z4sr4ná práce, při který házíš do pytlů brikety a šíleně se při to dusíš mourem.
tak db je vytvorena este je sanca neco zmenit:
mysql> show tables;
+------------------------------+
| Tables_in_gallery_of_suicide |
+------------------------------+
| albums |
| countries |
| groups |
| styles |
+------------------------------+
mysql> describe albums;
+-----------+---------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+---------------------+------+-----+---------+-------+
| name | varchar(100) | YES | | NULL | |
| author | tinyint(3) unsigned | YES | | NULL | |
| published | tinyint(3) unsigned | YES | | NULL | |
+-----------+---------------------+------+-----+---------+-------+
mysql> describe countries;
+---------+---------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+---------------------+------+-----+---------+-------+
| id | tinyint(3) unsigned | NO | PRI | | |
| content | varchar(30) | YES | | NULL | |
+---------+---------------------+------+-----+---------+-------+
mysql> describe groups;
+---------+---------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+---------------------+------+-----+---------+-------+
| id | tinyint(3) unsigned | NO | PRI | | |
| name | varchar(50) | YES | | NULL | |
| year | tinyint(3) unsigned | YES | | NULL | |
| country | tinyint(3) unsigned | YES | | NULL | |
| style | tinyint(3) unsigned | YES | | NULL | |
+---------+---------------------+------+-----+---------+-------+
mysql> describe styles;
+---------+---------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+---------------------+------+-----+---------+-------+
| id | tinyint(3) unsigned | NO | PRI | | |
| content | varchar(30) | YES | | NULL | |
+---------+---------------------+------+-----+---------+-------+
to D1ce: omluvam sa ze som nepouzil tvoj kod ale tak so clovek nic nenauci.
to D1ce: omluvam sa ze som nepouzil tvoj kod ale tak so clovek nic nenauci.
Vůbec nevadí, ak sa ti tohle páčí, kdludně nad tím pracuj. V podstatě si udělal to samé v bleděmodrém. :)
Jinak abych zhodnotil ten tvůj výtvor:
- Nelíbí se mi divné názvy tabulek, sloupců, ale to je věc stylu.
- Spousta hodnot bude smět mít NULL value, což IMHO není dobré.
- Nevidím do indexů.
+ Přidal jsi sloupec published,
- ale jistojistě to bude booleovská hodnota, proto bych její typ změnil na TINYINT(1).
- Unikátním sloupcům bych dodal UNIQUE vlastnost.
- Jak píše dole CommanderZ, s TINYINT(3) rychle dosáhneš limitů.
proc proboha pouzivas tinyint na id? Staci obcas neco smazat a neco pridat a toho stropu 255 dosahnes raz dva, nevidim duvod proc tam nemit normalni int
doporucuju si precist tohle: http://dev.mysql.com/doc/refman/5.0/en/numeric-types.html
edit: a roky budes mit ve zkracene forme? jinak je do tinyint nenacpes...
To CommanderZ: s tym tinyint mas pravdu ale iba v tabulkah albums a groups. dik za upozornenie
v skretenej forme nie, tam je tusim minimum 1969. bude tam $rok - 1900. vac ako tinyint nebude treba.
dik za link mam doma neco podobne hoci ne tak obsirne ale zato !CESKY!
a to id, ked sa vimaze riadok tak to id uz nebude pouzite (aj ked bude "volne")?
To D1ce:
k tomu moznemu not null - db budem plnit rucne (taky je zatial plan) takze to vzdi aj skontrolujem. spolu s unique to neni nutnost ale povedzme zlepsovak. diki
"Nevidím do indexů" - tomuto nerozumiem
"ale jistojistě to bude booleovská hodnota, proto bych její typ změnil na TINYINT(1)" - ???
co znamena to cislo v zatvorke v TINYINT(3) ja som pisal len "TINYINT UNSIGNED". to je pocet cifier?
tak teda:
mysql> show tables;
+------------------------------+
| Tables_in_gallery_of_suicide |
+------------------------------+
| albums |
| countries |
| groups |
| styles |
+------------------------------+
mysql> describe albums;
+-----------+----------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+----------------------+------+-----+---------+-------+
| name | varchar(100) | NO | | | |
| author | int(10) unsigned | NO | | | |
| published | tinyint(10) unsigned | NO | | | |
+-----------+----------------------+------+-----+---------+-------+
mysql> describe countries;
+---------+---------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+---------------------+------+-----+---------+-------+
| id | tinyint(3) unsigned | NO | PRI | | |
| content | varchar(30) | NO | PRI | | |
+---------+---------------------+------+-----+---------+-------+
mysql> describe groups;
+---------+---------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+---------------------+------+-----+---------+-------+
| id | int(10) unsigned | NO | PRI | | |
| name | varchar(50) | NO | | | |
| year | tinyint(3) unsigned | NO | | | |
| country | tinyint(3) unsigned | NO | | | |
| style | tinyint(3) unsigned | NO | | | |
+---------+---------------------+------+-----+---------+-------+
mysql> describe styles;
+---------+---------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+---------------------+------+-----+---------+-------+
| id | tinyint(3) unsigned | NO | PRI | | |
| content | varchar(30) | NO | UNI | | |
+---------+---------------------+------+-----+---------+-------+
mysql> exit
olgo píše:#
# "Nevidím do indexů" - tomuto nerozumiem
Prostě udělej indexy všude tam, kde se bude výbíra a vyhledávat víc než vkládat a updatovat.
#
#"ale jistojistě to bude booleovská hodnota, proto bych její typ změnil na TINYINT(1)" - ???
Buď je publikovaný či ne 1/0 TRUE/FALSE.
co znamena to cislo v zatvorke v TINYINT(3) ja som pisal len "TINYINT UNSIGNED". to je pocet cifier?
Bingo!
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Moderátoři diskuze