Yii Framework Forum: Relazione N-1-N Tra 3 Tabelle: Perchè Gestrla Con Many_Many ? - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Relazione N-1-N Tra 3 Tabelle: Perchè Gestrla Con Many_Many ? Rate Topic: ***-- 1 Votes

#1 User is offline   realtebo 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 535
  • Joined: 03-October 12
  • Location:Ferrara

Posted 15 October 2012 - 10:17 AM

Cerco di spiegarmi meglio

Listings [N <-> 1] ListingItems [1 <-> N] Items

col risultato che ogni listino ha N item e ogni item può far parte di N listini.

Ho visto parecchi esempio in giro di casi come questi, ed una gran parte di questi seguono questa strada:
- NON creano neppure il model di ListingItems
- Definiscono in Listings una relazione MANY_MANY direttamente con Items, tipo così:

'items' => array(self::MANY_MANY, 'Item', 'tbl_listingItems(listingId, itemId)'),


Vi chiedo i pro e i contro.

La mia opinione è che NON si deve mai hard-codare il nome di una tabella.
A parte questa questione, ho paura a seguire questa strada, perchè non so dove conduce. Se limita o se in realtà dà delle comodità che altrimenti non avrei.
Il computer non ragiona, ma ha sempre ragione.
Ricordalo quando fai il debug
0

#2 User is offline   Mojo 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 15
  • Joined: 17-September 12

Posted 15 October 2012 - 02:33 PM

View Postrealtebo, on 15 October 2012 - 10:17 AM, said:

Cerco di spiegarmi meglio

Listings [N <-> 1] ListingItems [1 <-> N] Items

col risultato che ogni listino ha N item e ogni item può far parte di N listini.

Ho visto parecchi esempio in giro di casi come questi, ed una gran parte di questi seguono questa strada:
- NON creano neppure il model di ListingItems
- Definiscono in Listings una relazione MANY_MANY direttamente con Items, tipo così:

'items' => array(self::MANY_MANY, 'Item', 'tbl_listingItems(listingId, itemId)'),


Vi chiedo i pro e i contro.

La mia opinione è che NON si deve mai hard-codare il nome di una tabella.
A parte questa questione, ho paura a seguire questa strada, perchè non so dove conduce. Se limita o se in realtà dà delle comodità che altrimenti non avrei.


Ciao realtebo,
Premetto che non sono molto pratico di yii, ma ho avuto lo stesso problema con doctrine2.
L'approccio di non preoccuparsi della tabella intermedia credo sia quello migliore: dovrebbe essere il sistema a doversi preoccupare di creare e popolare la tabella intermedia, e anche l'estrazione delle collezioni di dati dovrebbe essere trasparente all'utente.
Solo nel caso in cui si ha una relazione many2many con attributo mi sono trovato costretto a creare la tabella intermedia ed a trasformare la relazione in 2 relazioni one2many e many2one ma credo siano casi un pò particolari e cms non saprei gestiti in maniera differente

Ciao
Mojo
0

#3 User is offline   zaccaria 

  • Elite Member
  • PipPipPipPipPip
  • Yii
  • Group: Members
  • Posts: 2,232
  • Joined: 04-October 09
  • Location:Moscow

Posted 16 October 2012 - 01:15 AM

A me non piacciono le many many, preferisco fare 2 relations.

Con l'approccio many many non puoi accedere ai campi della tabella ponte, come discusso in questo post.

Usare 2 relazioni comporta il fatto che vengono eseguite due query separate, se ti serve migliorare l'efficienza usa with per ridurle ad una.

Se usi la many many non hai il modello per aggiungere-togliere abbinamenti, devi sare dao per questo.
2

#4 User is offline   realtebo 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 535
  • Joined: 03-October 12
  • Location:Ferrara

Posted 16 October 2012 - 02:03 AM

grazie per entrambi i consigli.

Preciso che le tabelle a regime saranno di poche decine di righe ciascuna, quindi non avrò problemi di performance.. spero !

Quello che dovrò fare è di permettere all'utente dalla form dei listini di spostare aggiungere e rimuovere continuamente degli articoli ... non chiedetemi perchè, sto cliente ha necessità strane .. ma verrà comunque fatto solo all'inizio dopo l'installazione, per cui questa volta voglio stare comodo io come programmatore, poi penserò a fare l'interfaccia usabile all'utente.

Quindi, in breve, con la tabella intermedia (a cui non posso rinunciare per motivi di design che non mi competono), conviene usare la strada delle due relazioni N-1 e 1-N per raggiungere a da b e viceversa?

In fase di salvataggio abbinamento, dovrò creare a mano un nuovo record nella tabella intermedia...

uhm.. mi sa che dovrò pensare bene alla GUI sta volta..
Il computer non ragiona, ma ha sempre ragione.
Ricordalo quando fai il debug
0

#5 User is offline   realtebo 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 535
  • Joined: 03-October 12
  • Location:Ferrara

Posted 16 October 2012 - 02:45 AM

A titolo di conferma: avendo queste relazioni ...

Listings [N - 1] ListingItem [1 - N] Item

... io imposto così le relations ... giusto ?

Listings
"listingItemObj" =>  array(self::HAS_MANY, "ListingItem", "listingId"),


ListingItem
"listingObj" =>  array(self::BELONGS_TO, "Listing", "listingId"),
"itemObj" =>  array(self::BELONGS_TO, "Item", "itemId"),


Item
"listingItemObj" => array(self::HAS_MANY, 'ListingItem', 'itemId' ),

Il computer non ragiona, ma ha sempre ragione.
Ricordalo quando fai il debug
0

#6 User is offline   zaccaria 

  • Elite Member
  • PipPipPipPipPip
  • Yii
  • Group: Members
  • Posts: 2,232
  • Joined: 04-October 09
  • Location:Moscow

Posted 16 October 2012 - 03:43 AM

Confermo. Vedi il post che ti ho linkato per dei consigli su come fare gli abbinamenti.
1

#7 User is offline   salsero 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 80
  • Joined: 05-September 12
  • Location:Italia

Posted 17 October 2012 - 02:01 AM

grazie alla tua domanda ho soddisfatto anche un mio dubbio ;) io personalmente creo il model intermedio per un riscontro nel db delle associazioni presenti.. viceversa, se ho capito bene, dovrei fare queste verifiche via codice.. o sbaglio?
0

#8 User is offline   zaccaria 

  • Elite Member
  • PipPipPipPipPip
  • Yii
  • Group: Members
  • Posts: 2,232
  • Joined: 04-October 09
  • Location:Moscow

Posted 17 October 2012 - 04:04 AM

Se non hai il model devi usare il Dao
0

#9 User is offline   realtebo 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 535
  • Joined: 03-October 12
  • Location:Ferrara

Posted 17 October 2012 - 05:57 AM

... qui parli arabo ...
Il computer non ragiona, ma ha sempre ragione.
Ricordalo quando fai il debug
0

#10 User is offline   zaccaria 

  • Elite Member
  • PipPipPipPipPip
  • Yii
  • Group: Members
  • Posts: 2,232
  • Joined: 04-October 09
  • Location:Moscow

Posted 17 October 2012 - 06:52 AM

Il dao e' l'accesso diretto, quello che fai con Yii::app()->db->createCommand-> ecc ecc
2

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users