Jak "navrhnout" tabulku pro MySQL

Místo pro dotazy a rady ohledně programovacích jazyků (C++, C#, PHP, ASP, Javascript, VBS..) a tvorby webových stránek

Moderátor: Mods_senior

Uživatelský avatar
honzaik
Level 2.5
Level 2.5
Příspěvky: 337
Registrován: říjen 11
Pohlaví: Muž
Stav:
Offline
Kontakt:

Jak "navrhnout" tabulku pro MySQL

Příspěvekod honzaik » 21 dub 2014 20:49

Ahoj, mám takové dilema. Řekněme že mám databázi která má v sobě data o "followech" jako to funguje na twitteru. Takže to vidím na 3 sloupce - 1. followId (prostě id každého followu - primární klíč), 2. followerId (id každého usera kterej followuje někoho) a 3. followsId (id usera kterého ten "followerId" followuje). A chtěl bych vědět jestli to je úplně blbě (znáte jiný, lepší systém) nebo to je ok. Každopádně rád bych měl foreign key na followerId a followsId a použít "CASCADE" takže když se z tabulky users vymaže user tak se vymažou i všechna data s jeho id z této tabulky. to ale znamená že tato tabulka má 3 sloupce a na každém je index. Takže by mě zajimalo co je podle vás lepší, udělat to takto a nějak doufat že rychlost bude dostačující (co jsem tak četl tak hodně indexů zpomaluje insert a update) nebo na tom nemít žádné klíče a databázi nějakým jiný způsobem intervalové "čistit". V navrhování databazí jsem naprostý začátečník takže bych prosil "požehnání" od někoho zkušenějšího :D
ello dere

Reklama
Uživatelský avatar
Madara
Level 4
Level 4
Příspěvky: 1123
Registrován: červenec 11
Bydliště: Nechceš klíče od domu ?
Pohlaví: Muž
Stav:
Offline

Re: Jak "navrhnout" tabulku pro MySQL

Příspěvekod Madara » 21 dub 2014 20:57

Takhle je to ideální. Jiné možnosti jsou o dost složitější.

Uživatelský avatar
CZechBoY
Master Level 9.5
Master Level 9.5
Příspěvky: 8813
Registrován: srpen 08
Bydliště: Brno
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: Jak "navrhnout" tabulku pro MySQL

Příspěvekod CZechBoY » 22 dub 2014 23:42

čus,
na co auto_increment PK?
Hoď tam PK (autor příspěvku, jeho follower) + index (jeho follower).
Zabráníš duplicitám a mělo by to jet vcelku obstojně.

Mám takhle řešený kategorie k produktům (product_to_category (category_id, product_id), PK (category_id, product_id) + index (product_id)) a jede celkem dobře s 11M řádkama :lol:
PHP, Nette, MySQL, C#, TypeScript, Python
IntelliJ Idea, Docker, Opera browser, Linux Mint
iPhone XS
Raspberry PI 3 (KODI, Raspbian)
XBox One S, PS 4, nVidia GeForce NOW

Uživatelský avatar
honzaik
Level 2.5
Level 2.5
Příspěvky: 337
Registrován: říjen 11
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: Jak "navrhnout" tabulku pro MySQL

Příspěvekod honzaik » 23 dub 2014 17:19

no tohle je tabulka jen na zaznamenání o followech, žádný příspěvky :D já nemůžu hodit primary key na follower protože follower bude followovat více lidí. to AI PK tam mám protože framework vyžaduje aby na smazání byl v tabulce definovám primární klíč, asi to má svůj důvod, samozřejmě bych to mohl udělat samotnout SQL query asi ale prostě nechci míchat 2 způsoby a budu raději věřit autorum :D... bylo mi to řečeno i na framework foru (phalconphp.com)
ello dere

Uživatelský avatar
CZechBoY
Master Level 9.5
Master Level 9.5
Příspěvky: 8813
Registrován: srpen 08
Bydliště: Brno
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: Jak "navrhnout" tabulku pro MySQL

Příspěvekod CZechBoY » 23 dub 2014 17:32

Nevim jak tomu říkáš ty, ale jak jsem psal, tak je to asi nejlepší..
PHP, Nette, MySQL, C#, TypeScript, Python
IntelliJ Idea, Docker, Opera browser, Linux Mint
iPhone XS
Raspberry PI 3 (KODI, Raspbian)
XBox One S, PS 4, nVidia GeForce NOW

Uživatelský avatar
honzaik
Level 2.5
Level 2.5
Příspěvky: 337
Registrován: říjen 11
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: Jak "navrhnout" tabulku pro MySQL

Příspěvekod honzaik » 23 dub 2014 18:24

vůbec nechápu jak to myslíš :D jak říkám nikdy jsem nedělal nějak komplexní databáze :D
ello dere

Uživatelský avatar
CZechBoY
Master Level 9.5
Master Level 9.5
Příspěvky: 8813
Registrován: srpen 08
Bydliště: Brno
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: Jak "navrhnout" tabulku pro MySQL

Příspěvekod CZechBoY » 23 dub 2014 20:34

primární klíč na dvousloupec follower + autor
index autor

k čemu chceš cizí klíče? na oba sloupce?
PHP, Nette, MySQL, C#, TypeScript, Python
IntelliJ Idea, Docker, Opera browser, Linux Mint
iPhone XS
Raspberry PI 3 (KODI, Raspbian)
XBox One S, PS 4, nVidia GeForce NOW

Uživatelský avatar
honzaik
Level 2.5
Level 2.5
Příspěvky: 337
Registrován: říjen 11
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: Jak "navrhnout" tabulku pro MySQL

Příspěvekod honzaik » 24 dub 2014 15:25

cizí klíče na oba sloupce jsou vlastně zbytečnost, díky. pořád ale nechápu co k čemu tam cpeš autora :D tohle má jen zaznamenávat - "ten se kamarádí (followuje) s timhle" nic víc
ello dere

Uživatelský avatar
CZechBoY
Master Level 9.5
Master Level 9.5
Příspěvky: 8813
Registrován: srpen 08
Bydliště: Brno
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: Jak "navrhnout" tabulku pro MySQL

Příspěvekod CZechBoY » 24 dub 2014 15:50

Tak já nevim jak ty to pojmenováváš... prostě primární klíč na oba sloupce a index na druhej.
PHP, Nette, MySQL, C#, TypeScript, Python
IntelliJ Idea, Docker, Opera browser, Linux Mint
iPhone XS
Raspberry PI 3 (KODI, Raspbian)
XBox One S, PS 4, nVidia GeForce NOW

Uživatelský avatar
honzaik
Level 2.5
Level 2.5
Příspěvky: 337
Registrován: říjen 11
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: Jak "navrhnout" tabulku pro MySQL

Příspěvekod honzaik » 24 dub 2014 17:50

jak můžeš mít 2 primární klíče v 1 tabulce? primární klíč je maximálně jeden na tabulku ne? :D
ello dere

Uživatelský avatar
CZechBoY
Master Level 9.5
Master Level 9.5
Příspěvky: 8813
Registrován: srpen 08
Bydliště: Brno
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: Jak "navrhnout" tabulku pro MySQL

Příspěvekod CZechBoY » 24 dub 2014 17:51

Cože? Jako dneska jsem mimo, ale píšu že jeden dáš na oba sloupce a na druhej sloupec dáš jenom obyčejnej index.
PHP, Nette, MySQL, C#, TypeScript, Python
IntelliJ Idea, Docker, Opera browser, Linux Mint
iPhone XS
Raspberry PI 3 (KODI, Raspbian)
XBox One S, PS 4, nVidia GeForce NOW

Uživatelský avatar
honzaik
Level 2.5
Level 2.5
Příspěvky: 337
Registrován: říjen 11
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: Jak "navrhnout" tabulku pro MySQL

Příspěvekod honzaik » 24 dub 2014 18:37

aha to jsem nevěděl že jde klíč na více sloupců :D mám teda primární klíč na follower a follows. a cizí klíč ale potřebuju na obou, protože když se smaze user s id 1 (z tabulky users) tak ho potřebuju vymazat z follower i z follows. pokud to teda chápu dobře potřebuju cizí na oba sloupce ale aby byly vázaný na jeden sloupec z cizí tabulky, jde to nějak?
tabulka by nejlépe měla vypadat proste takhle

Kód: Vybrat vše

Follower | Follows
1           2
2           1
5           1
4           1
1           4
atd..

takže po deletu usera s id 1 by tahle měla bejt prázdná
ello dere


Zpět na “Programování a tvorba webu”

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 16 hostů