Ma elkészült az adatbázis modellje, amiből az SQL fájl is legenerálódott. Néhány dolgot elmagyarázok a modellel kapcsolatban, a végén pedig ajánlok egy – két modell készítőt.
Modell
Felírtam egy lapra a tegnapi vázlat alapján, mik azok az objektumok amikre szét lehet bontani a rendszert.
Mi számít objektumnak?
Nem érdemes ehhez szabálykönyvet alkalmazni, hagyatkozzunk pusztán a józanészre. Objektumok azok a dolgok, amelyek önmagukban megálják a helyüket és jelentőségük van. Néhány objektum a mostani modellből:
- users – felhasználók
- news- hírek
- comments – kommentek
- shouts – üzenőfal bejegyzések
- pictures – képek
- joins – csatlakozás egy eseményhez
- votes – szavazások
Angolul nevezem el őket, mivel így nem kell bajlódni az ékezetekkel, ráadásul a cakePhp-nek vannak olyan trükkjei ahol ez hasznos lesz, erre majd ki is térek.
Akkor először lássuk a modellt:
Undorító, igaz? Viszont ehhez a munkához tökéletesen megteszi. Most jön egy tanács, amibe lehet belekötni, de én úgy gondolom, hogy mindig mérjük fel először a körülményeket és ahhoz képest állítsuk fel a követelményeket magunkkal szemben. Jelen esetben figyelembe véve, hogy van munkám, csinálom ezt és még cikket is írok róla, nem várhatom el magamtól a tökéletes munkát.
Várjunk csak, akkor olyasmit tanítok ami egy összecsapott dolog? Egyáltalán nem, sőt direkt remélem, hogy vétek hibákat, így ebből tanulhattok velem együtt, és nem kell élesben elkövetnetek ugyanezeket. Ami garantált, hogy a végére működőképes honlap lesz, ami teljes mértékben kielégíti a követelményeket, így az összeag amit elkérhetnénk érte, bizonyeszelős mosolyra görbítené a szánkat.
Magyarázat
A narancssárga dobozok táblákat reprezentálnak. Minden tábla neve angolul van, és többes számban, valamint az összes rendelkezik egy elsődleges id kulccsal.
A vonalak a táblák közti kapcsolatot jelentik. Azt ne nézzétek a konkrét vége hova van húzva, jelen esetben nincs jelentősége, csak pepecselés lenne. Amit érdemes figyelni, az a vonalak végének alakja. Amelyinek egyik ága egyenes vonal, másik egy 3 ágú villa, az egy-többes kapcsolatot jelöl. Ilyen a users és ideas tábla közti viszony, mivel egy felhasználónak több ötlete is lehet. Vagy például a rooms és users között, mert egy szobában több felhasználó lakik.
Egy-egyes kapcsolat van a news és dates között, mivel minden hírhez kapcsolhatunk majd a naptárból egy dátumot amikor a hírben szereplő esemény lesz. A másik oldalról azért egyes a kapcsolat, mivel ez a dates tábla nem napokat tárol, hanem egy adott eseményt. Tehát ha szintcsúszás lesz pénteken 2kor, akkor az egy bejegyzés itt, és egy hír kapcsolódhat hozzá.
Ha csak egy hír kapcsolódhat egy eseményhez, és azt megírja a 3. szint seniorja, viszont csak a saját szintje számára teszi elérhetővé a hírt, akkor ha mások is akarják látni, a többi szint seniorjainak is kell írniuk egy hírt róla, és csinálni neki egy naptár bejegyzést.
Megoldás: egy-többes kapcsolat kell ide is, egy dátum bejegyzéshez, kapcsolódhasson több hír is, hisz bár megvan a lehetőség olyan hírek feladására amit minden szint lát, lehet, hogy a seniorok mást tartanak fontosank kiemelni a hírben, ezért különcködnek. Látható, hogy érdemes többször átnézni és végiggondolni mielőtt nekiesünk a programozásnak. Az fenti modellt nem módosítom, hogy látható legyen a hiba, mielőtt elkezdeném a programozást feltöltöm az aktuális verziót.
Néhány tábla magyarázat
Scopes: Ez a hírek és szavazások láthatóságát adja meg. Egy hírt illetve szavazást ki lehet írni saját szintre, a kollégiumra, vagy nyilvánosan, hogy a nem regisztráltak is lássák. Külön táblába került, mert ha új hatókört szeretnék megadni, akkor a kódban sok helyen kellene módosítanom, így pedig egyszerűen legenerálok belőle egy legördülő mezőt.
Joins: Néha nehéz megtalálni a megfelelő nevet a táblákhoz, van hogy németül magyarul vagy japánul jobb dolgok jutnak eszembe, de ez a választott nyelv, úgyhogy igyekszem a legtöbbet kihozni belőle. Itt van rögzítve, hogy ki melyik eseményhez, vagy hírben megemlített dologhoz csatlakozik, illetve melyiken vesz részt. A participation is jó lett volna, de az hosszú… A news és dates táblával a foreign_key idegen kulccsal tartja a kapcsolatot, az pedig, hogy konkrétan az adott rekord melyik táblához tartozik, a model mezőben lesz tárolva.
Likes: Itt lehet leadni a napi voksot arra akire azt mondjuk respect, és akit legszívesebben búcsuzkodni látnánk. Like mező ha 0 akkor negatív, ha 1 akkor pozitív a vélemény. A concerned_id annak a felhasználónak az azonosítója akit értékelünk.
A többi talán magáért beszél. Érdemes megfigyelni, hogy az idegen kulcsok neve megegyezik a kapcsolódó tábla egyeszámú nevével, végén az _id stringel. Ez is egy olyan módszer, aminek segítségével a CakePhp felismeri a táblák közti kapcsolatot és könnyen legenerálja nekünk a szükséges MVC elemeket.
Ha lenne kérdés, írd meg kommentben, és válaszolok rá, de szerintem magát a folyamatot érdemes figyelni, mintsem a konkrét oldal kódját, hisz nem lesz úgyse elég időm mindent a részletekig menően elmagyarázni.
Miben készült?
A modellt Visual Paradigm segítségével készítettem. A végén lehetőséget adott exportálni többféle formátumba, többek között a fenti jpg is így készült, valamint egyből legenerálta a hozzá tartozó adatbázist.
Sokan használnak ezen kívül MySQL Workbenchet, ami a Visual Paradigmal ellentétben ingyenes, úgyhogy mindenképpen érdemes kipróbálni.
Amit még feltétlenül meg kell néznetek, az a WWW SQL designer, egy online eszköz, amiben ugyan nem álltam volna neki ennek a modellnek, viszont jól el lehet vele ütni az időt. 5 éve mikor megjelent kipróbáltam az akkori iskolanapló megtervezéséhez, ami azóta persze sokkal komplexebb lett. Ennek ellenére a régi modell megtalálható. ha jjobb oldalt a Save/Load gombra, majd a felogró ablakban a loadra kattintotok, és beírjátok hogy “suli67″.
Összegzés
Régebben én is úgy voltam vele, hogy minek tervezni, penge vagyok, átlátok mindent. Azonban minél több projektel végzek, annál könnyebbé teszi a visszazökkenést a régiekbe egy-egy ilyen ábra.
Holnap dolgozok rajta mint a bajnok, cikket pedig a CakePhp alapjairól írok, hogy miért érdemes használni, és hogy mit kell tudni belőle, hogy átlássátok ezt a projektet.

