Autor Zpráva
tonda13
Profil
Zdravím.

Mám menší dilema. Je lepší mít v DB jednu tabulku nebo více menších?

Trochu to upřesním. Například uživatel si bude ukládat odkazy na zajímavé stránky (jako to dělá delicious). Je lepší mít tabulku 'Bookmarks' a v ní všechny uložené odkazy od všech uživatelů a rozlišovat je pomocí sloupce 'Owner' nebo je lepší mí pro každého uživatele samostatnou tabulku a v ní jen jeho odkazy? Vše za předpokladu cca 10 000 odkazů a cca 100 uživatelů (1 uživatel 100 odkazů řekněme).
Taps
Profil
tonda13:
je lepší mít více tabulek a propojené je pomocí relace (1:N, 1:1,M:N)
tonda13
Profil
Taps:
To jsi asi úplně nepochopil můj dotaz. Zajímá mě jestli je lepší mít jednu tabulku 'Bookmarks' řekněme s 10 000 (časem třeba i se 100 000) záznamy nebo více tabulek, tj. pro každého uživatele jednu.

Například:
tonda13_bookmarks, Taps_bookmarks, ...

P.S. Samozřejmě, že tam budou ještě i jiné tabulky jako třeba 'users', atd.
Kajman_
Profil *
tonda13:
Je lepší mít tabulku 'Bookmarks' a v ní všechny uložené odkazy od všech uživatelů a rozlišovat je pomocí sloupce 'Owner' nebo je lepší mí pro každého uživatele samostatnou tabulku a v ní jen jeho odkazy?
Jedna tabulka je lepší řešení.

Taps má asi na mysli dvě tabulky - tabulka odkazů, kde každý bude mít id a tabulku vazeb uživatel-odkaz. Ale nejsem si jistý, jestli se to v tomhle případě vyplatí - zda by to nebylo zbytečně moc programování navíc.
Joker
Profil
tonda13:
Jedna velká tabulka nebo více menších?
Já bych to obecně řekl takhle: Prakticky nikdy nemá smysl tabulku dělit na několik menších tak, že:
a) Vytvořím další úplně stejnou tabulku a přesunu do ní část záznamů.
b) Vyndám některé sloupce tabulky do zvláštní tabulky, která bude s tou původní mít vztah 1:1.

Přestože existují zvláštní situace, kde taková řešení mohou mít smysl, hlavně začátečníci se s nimi prakticky nesetkají.
xmark
Profil
tonda13:
nebo více tabulek, tj. pro každého uživatele jednu.

To v žádném případě.
Odkazy v jedné tabulce, osoby v druhé.
Druhé řešení - tabulka osob, tabulka adres, propojovací tabulka vazeb - je ke zvážení.
joe
Profil
Jedna tabulka = jedna entita

Takže třeba entita Uživatelů -> jedna tabulka s uživateli
entita bookmarků -> další tabulka pro bookmarky

Jaký by mělo význam mít pro každého uživatele jinou tabulku s úplně stejnými sloupci?
TomášK
Profil
joe:
Jaký by mělo význam mít pro každého uživatele jinou tabulku s úplně stejnými sloupci?
Pokud o databázích skoro nic nevíš, pak to dává smysl. Když budeš mít jednu tabulku pro každého uživatele a budeš o něm potřebovat něco najít, víš kam se podívat. Když budeš mít jednu velkou tabulku se všemi uživateli, bude se patrně muset prohledávat vždy celá, a to asi bude pomalé, když uživatelů je hodně.
Neplatí to díky indexům, o kterých často začínající uživatelé nevědí, případně faktu, že vyhledávání v databázi je natolik rychlé, že je výhodnější mít dobrou strukturu než zkoušet nějaké optimalizace. Začátečník si neuvědomí, že v mnoha stejných tabulkách půjde jen těžko vyhledávat, natož dělat nějaké složitější operace.

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: