Jak navrhnout model pro tabulky

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
modromak
Člen | 4
+
0
-

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
+
0
-

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
+
0
-

Ja vsetkym, co zacinaju robit rozsiahlejsiu aplikaciu s pomocou Nette\Database, odporucam prestudovat zdrojaky Addons portalu.

Tomáš Kolinger
Člen | 136
+
0
-

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)

modromak
Člen | 4
+
0
-

Díky všem za rady. Nakonec jsem nastudoval zdrojáky Addons portálu jak radí srigi a snažím se jim inspirovat.

Tharos
Člen | 1030
+
0
-

Zajímavou inspiraci můžeš najít také zde.