Jak navrhnout model pro tabulky
- modromak
- Člen | 4
Ahoj,
vím, že už se to tady párkrát řešilo, ale bohužel mi to pořád ne a ne úplně pomohlo.
Představme si situaci, kdy mám následující tabulky:
users
- id
- username
- password
- …
users_options
- id
- users_id
- nastaveni1
- nastaveni2
- nastaveni3
- …
Tedy v tabulce users vedu nějaké údaje pro přihlašení uživatele, v tabulce users_options nějaká jeho osobní nastavení.
Jakým způsobem navrhnout model?
Pochopil jsem, že vytvářet pro každou tabulku zvlášť není dobré a už
vůbec není dobré dědit Nette\Database\Table\Selection, jak je ukazováno
v tutorialu.
Tedy napadá mě něco takového:
class Uzivatele extends Nette\Object
{
private $connection;
function __construct(Nette\Database\Connection $connection)
{
$this->connection = $connection;
}
public function getUsers() { /* načítá z tabulky users */ }
public function getUser($id) { /* vrací uživatele dle daného idčka */ }
public function getUserOptions($id) { /* vrací pro uživatele jeho nastavení z users_options */ }
/* ... */
}
Je tento přístup dobrý? Tedy vytvářet nad tabulkami takovou abstrakci, kdy mi můžou být do určité míry tabulky ukradené a tahám data jen pomocí příslušných metod? Kdy je vhodné dávat model jako továrničku?
Na závěr ještě jedna otázka. Přečetl jsem mnoho názorů na Doctrine2, NotORM, Nette\Database atd., ale člověk to musí opravdu vše prozkoušet, aby nejlépe zvolil. Zajímal by mě tedy názor, zda doporučujete Nette\Database pro komplikovanější databázi s cca 100+ tabulkami, cizími klíčemi a stovkami tisíc řádků?
Děkuji předem.
- thunderbuff
- Člen | 164
Osvědčil se mi způsob, kdy mám Repozitáře jen pro „důležité“ tabulky a data z „příbuzných“ tabulek řeším metodami v repozitářích. Díky tomu není návrh moc košatý a je to přehledné.
Nette\Database mi v pohodě behá nad databází o velikosti 30GB a tabulkami obsahujícími desítky milionů řádek.
- srigi
- Nette Blogger | 558
Ja vsetkym, co zacinaju robit rozsiahlejsiu aplikaciu s pomocou Nette\Database, odporucam prestudovat zdrojaky Addons portalu.
- Tomáš Kolinger
- Člen | 136
Přesně tak. Na struktuře databáze nezáleží – pokud něco do uživatele patří, tak to tam zkrátka patří. Při návrhu modelu by si vůbec na strukturu nějaké relační databáze koukat neměl.
Model jako továrnička? Nikdy jsem nepotřeboval a ani nepoužil.
Všechny databázové vrstvy se dají provozovat nad větší databází, tady se spíš jedná o filosofii, kterou razí a jaká ti bude vyhovovat. Některé kladou důraz na abstrakci (Doctrina) a některé na použitelnost a výkon (Nette\Database, dibi, …).
Editoval Tomáš Kolinger (28. 3. 2013 2:18)