Empfehlungen: Erweiterte Suche

Aufbau der DB und der Module

Fragen zur Konzeptionierung und womit man am besten anfäng? Hier rein...

Aufbau der DB und der Module

Beitragvon demo88 » Fr 30. Jul 2010, 12:24

Hallo zusammen,

Ich habe eine Frage zu dem Konzept meiner Anwendung. Ganz kurz Beschrieben:

Filmdatenbank (Filme werden mit Hilfe einer API von der Internet Movie Database gelesen)
Benutzer können sich anmelden (Funktioniert auch schon)
Benutzer können Filme bzw. Serien als "gesehen" markieren (hier liegt der Hund begraben)

Habe im Moment 2 Datenbanken

Code: Alles auswählen
CREATE TABLE `films` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `tmdb_id` varchar(10) NOT NULL,
  `title` varchar(255) NOT NULL,
  `actor` text NOT NULL,
  `description` text NOT NULL,
  `released` date NOT NULL,
  `director` varchar(255) NOT NULL,
  `version` int(11) NOT NULL,
  PRIMARY KEY (`id`)
)


und

Code: Alles auswählen
CREATE TABLE `users` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `username` varchar(20) NOT NULL DEFAULT '',
  `password` varchar(40) NOT NULL DEFAULT '',
  `email` varchar(100) NOT NULL,
  PRIMARY KEY (`id`)
)


Nachdem ich zahlreiche Tutorial durchgeblättert habe, denke ich verstanden zu haben das ich jetzt eine weitere Tabelle in Form von

Code: Alles auswählen
CREATE TABLE `films_users` (
  `film_id` int(11) NOT NULL,
  `user_id` int(11) NOT NULL,
  `episode` tinyint(4) NOT NULL DEFAULT '0',
  `last_seen` date NOT NULL,
  `count` tinyint(4) NOT NULL
)


brauche?!

Und kann jemand ein Turorial zu den ganzen Conditions (heißen die so?) empfehlen? Finde http://book.cakephp.org/view/1039/Assoc ... s-Together schon ganz hilfreich, denke brauche dann eine "one to many" relationship - also ein Benutzer kann mehrere Filme geguckt haben? Aber so ganz schlau geworden bin ich daraus nicht.
demo88
 
Beiträge: 4
Registriert: Fr 30. Jul 2010, 12:13
CakePHP-Version: 1.3.3
OS: Mac OS X 10.6.4

Re: Aufbau der DB und der Module

Beitragvon riddim » Fr 30. Jul 2010, 13:11

Nur so als Idee - das wäre mein Ansatz:

Code: Alles auswählen
Model users
var $hasAndBelongsToMany = array(
        'Film' =>
            array(
                'className'              => 'Film',
                'joinTable'              => 'films_users',
                'foreignKey'             => 'user_id',
                'associationForeignKey'  => 'film_id'
            )
);


http://book.cakephp.org/view/83/hasAndB ... Many-HABTM
riddim
 
Beiträge: 1
Registriert: Fr 30. Jul 2010, 12:58

Re: Aufbau der DB und der Module

Beitragvon euromark » Fr 30. Jul 2010, 14:39

die 2x HM sind sicher tausendmal besser als HABTM
besonders, da du ja zusätzliche infos in die zwischentabelle tun willst

ich würde aber wenn, noch zwischen serien und filmen unterscheiden
außerdem sollten filme eine parend_id haben (bei folge-filmen, z.b. harry potter oder herr der ringe 1-3)

fällt mir grad so spontan ein
euromark
 
Beiträge: 618
Registriert: Fr 27. Jun 2008, 22:17
Wohnort: München
CakePHP-Version: 2.1
OS: Windows

Re: Aufbau der DB und der Module

Beitragvon demo88 » Fr 30. Jul 2010, 16:05

Was heißt denn 2xHM? Bei Users und bei Films in dem Modell ein HasMany?

Und ja, werde dann für Serien noch ein Extra Spalte in der "Films" Tabelle einbauen. Eigentlich bräuchte man eine eigene Tabelle für die Serien weil man später auch einzelne Folgen als "gesehen" markiert werden sollen. Aber wollte das erstmal für die Filme machen.

Mit der parent_id ist das so eine Sache...Ich benutze die API von TMDB und da ist sowas leider noch nicht vorgesehen. Aber könnte man später ja noch manuell einpflegen.
demo88
 
Beiträge: 4
Registriert: Fr 30. Jul 2010, 12:13
CakePHP-Version: 1.3.3
OS: Mac OS X 10.6.4

Re: Aufbau der DB und der Module

Beitragvon euromark » Fr 30. Jul 2010, 16:32

users HABTM films
1x HABTM

lässt sich immer aufspalten in

users HM films_users
films HM films_users
2x HM

wobei films_users nun außer den beiden foreign_ids auch zusätzliche infos speichern kann (episode, last_seen etc)

klar - ich sprech ja von der eigenen app - unabhängig wovon die daten kommen.
kann man dann manuell irgendwann mal einbauen (bzw per "gleicher anfangsname" etc sogar automatisch ermitteln lassen^^)
euromark
 
Beiträge: 618
Registriert: Fr 27. Jun 2008, 22:17
Wohnort: München
CakePHP-Version: 2.1
OS: Windows

Re: Aufbau der DB und der Module

Beitragvon demo88 » Mi 4. Aug 2010, 16:35

Hallo,

danke erst einmal für die Antworten. Hat mir sehr weitergeholfen und ich habe es jetzt erst einmal so gelöst:

Die Tabelle 'films_users' sieht so aus:
Code: Alles auswählen
CREATE TABLE `films_users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `film_id` int(11) NOT NULL,
  `user_id` int(11) NOT NULL,
  `episode` tinyint(4) NOT NULL DEFAULT '0',
  `last_seen` date NOT NULL,
  PRIMARY KEY (`id`)
)


film.php (Model)
Code: Alles auswählen
    var $hasAndBelongsToMany = array(
            'User' =>
                array(
                    'className'              => 'User',
                    'joinTable'              => 'films_users',
                    'foreignKey'             => 'film_id',
                    'associationForeignKey'  => 'user_id',
                    'order'                  => 'FilmsUser.last_seen ASC'
                )
        );


Dann kann man im Controller (films.php) so z.B. herausfinden ob der Benutzer den Film schon gesehen hat:
Code: Alles auswählen
        $watched = $this->Film->FilmsUser->find('all', array(
            'conditions' => array(
                'FilmsUser.film_id'     => $filmArray['Film']['id'],
                'FilmsUser.user_id'     => $this->Auth->user('id'),
                'FilmsUser.episode'     => '0'),
            'order' => 'FilmsUser.last_seen ASC'
        ));


Und so speicher ich dann die Werte wenn jemand anklickt das er den Film gesehen hat:
Code: Alles auswählen
                $this->Film->FilmsUser->create();
                $this->Film->FilmsUser->set(array(
                    'film_id'   => $filmArray['Film']['id'],
                    'user_id'   => $this->Auth->user('id'),
                    'episode'   => '0',
                    'last_seen' => date('Y-m-d'),
                ));
                $this->Film->FilmsUser->save();


Im Prinzip ganz einfach wenn man weiß wie es geht:)
demo88
 
Beiträge: 4
Registriert: Fr 30. Jul 2010, 12:13
CakePHP-Version: 1.3.3
OS: Mac OS X 10.6.4


Zurück zu Konzeption und Vorgehensweise

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste