# Legacy DB e composite keys

**URL:** <https://www.ruby-forum.com/t/legacy-db-e-composite-keys/92517>\
**Category:** IT\
**Created:** [April 20, 2007, 7:09am UTC](https://www.ruby-forum.com/t/legacy-db-e-composite-keys/92517 "2007-04-20T07:09:18Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![carminem](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/90db22/32.png) [@carminem](https://www.ruby-forum.com/u/carminem)\
**Post date:** [April 20, 2007, 7:09am UTC](https://www.ruby-forum.com/t/legacy-db-e-composite-keys/92517/1 "2007-04-20T07:09:18Z")

</div>

Salve a tutti,

Mi chiedevo come procedereste voi quando, in un’applicazione Rails,  
dovete  
appoggiarvi ad un DB preesistente (MS SQL Server) in cui ogni tabella ha  
una chiave composta.

Inizialmente, andavo di :options nello specificare le foreign key, poi  
ho  
installato la gem “composite\_primary\_keys” (0.8.2) ed ho sperimentato  
che,  
nelle condizioni di cui sopra, non funziona.

Non funziona significa:

Quando le 2 tabelle in relazione:

- hanno lo stesso numero di componenti come chiave primaria mi viene  
restituito un errore di “Uninitialized constant”

- hanno diverso numero di componenti, sia utilizzando :options che  
passando fisso il valore di una delle componenti, la ricerca in quella  
con un numero maggiore  
delle stesse, fallisce perchÃ¨ alle componenti in piÃ¹ viene assegnato  
irrimediabilmente “nil”.

Detto ciÃ², voi come fate? Rimetto tutto “a base di :options”?

Grazie per il Vs aiuto

---

<div class="post-metadata">

**Author:** ![carminem](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/90db22/32.png) [@carminem](https://www.ruby-forum.com/u/carminem)\
**Post date:** [April 20, 2007, 2:31pm UTC](https://www.ruby-forum.com/t/legacy-db-e-composite-keys/92517/2 "2007-04-20T14:31:51Z")

</div>

On 4/20/07, Carmine M. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> installato la gem “composite\_primary\_keys” (0.8.2) ed ho sperimentato
> 
> - hanno diverso numero di componenti, sia utilizzando :options che  
> passando fisso il valore di una delle componenti, la ricerca in quella  
> con un numero maggiore  
> delle stesse, fallisce perchè alle componenti in più viene assegnato  
> irrimediabilmente “nil”.
> 
> Detto ciò, voi come fate? Rimetto tutto “a base di :options”?

Potresti forse creare delle view che siano più conformi allo stile di Rails?

M

---

<div class="post-metadata">

**Author:** ![carminem](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/90db22/32.png) [@carminem](https://www.ruby-forum.com/u/carminem)\
**Post date:** [April 20, 2007, 2:37pm UTC](https://www.ruby-forum.com/t/legacy-db-e-composite-keys/92517/3 "2007-04-20T14:37:03Z")

</div>

Matteo V. wrote:

> On 4/20/07, Carmine M. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:
> 
> > installato la gem “composite\_primary\_keys” (0.8.2) ed ho sperimentato
> > 
> > - hanno diverso numero di componenti, sia utilizzando :options che  
> > passando fisso il valore di una delle componenti, la ricerca in quella  
> > con un numero maggiore  
> > delle stesse, fallisce perchï¿½ alle componenti in piï¿½ viene assegnato  
> > irrimediabilmente “nil”.
> > 
> > Detto ciï¿½, voi come fate? Rimetto tutto “a base di :options”?
> 
> Potresti forse creare delle view che siano piï¿½ conformi allo stile di Rails?

Non posso alterare la struttura del DB legacy, anche perchÃ¨ l’utilizzo  
di  
questo Ã¨ un’opzione dell’applicazione che sto scrivendo (E-Commerce).  
L’uso “normale” prevede tutto su Rails.

Inoltre, nella view comunque finirei con l’includere _tutti_ i campi e  
mi ritroverei punto e a capo.

---

<div class="post-metadata">

**Author:** ![carminem](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/90db22/32.png) [@carminem](https://www.ruby-forum.com/u/carminem)\
**Post date:** [April 20, 2007, 2:39pm UTC](https://www.ruby-forum.com/t/legacy-db-e-composite-keys/92517/4 "2007-04-20T14:39:52Z")

</div>

On 4/20/07, Carmine M. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> > > Detto ciï¿½, voi come fate? Rimetto tutto “a base di :options”?  
> > > Inoltre, nella view comunque finirei con l’includere _tutti_ i campi e  
> > > mi ritroverei punto e a capo.

La view potrebbe avere una chiave primaria diversa, costruita come  
composizione delle colonne della chiave primaria della tabella  
originale.

M

–

---

<div class="post-metadata">

**Author:** ![carminem](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/90db22/32.png) [@carminem](https://www.ruby-forum.com/u/carminem)\
**Post date:** [April 20, 2007, 4:54pm UTC](https://www.ruby-forum.com/t/legacy-db-e-composite-keys/92517/5 "2007-04-20T16:54:10Z")

</div>

> > Inoltre, nella view comunque finirei con l’includere _tutti_ i campi e  
> > mi ritroverei punto e a capo.

> La view potrebbe avere una chiave primaria diversa, costruita come  
> composizione delle colonne della chiave primaria della tabella  
> originale.

Temo di non capire. Io ho bisogno della chiave completa quindi, di tutte  
le colonne.  
Facendo una view finirei con l’avere una “replica” della tabella da cui  
Ã¨ stata generata la view.  
Cosa mi sfugge?

---

<div class="post-metadata">

**Author:** ![carminem](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/90db22/32.png) [@carminem](https://www.ruby-forum.com/u/carminem)\
**Post date:** [April 21, 2007, 6:09pm UTC](https://www.ruby-forum.com/t/legacy-db-e-composite-keys/92517/6 "2007-04-21T18:09:31Z")

</div>

On 4/20/07, Carmine M. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> Facendo una view finirei con l’avere una “replica” della tabella da cui  
> è stata generata la view.  
> Cosa mi sfugge?

Voglio dire, se la tabella originale “pippo” ha una chiave composta da,  
poniamo, nome e telefono, nella view aggiungi una nuova colonna  
costruita  
come concatenazione di nome e telefono. Tipo,

create view pippo\_rails select concat(nome, telefono) as id, pippo.\*  
from  
pippo

La view è senz’altro una replica della tabella orignale, che si avvicina  
però alle convenzioni di Rails, perché ha una chiave primaria su una sola  
colonna.

Che cosa succede quando fai un aggiornamento dei dati è un altro paio di  
maniche 🙂

M

–

---

<div class="post-metadata">

**Author:** ![carminem](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/90db22/32.png) [@carminem](https://www.ruby-forum.com/u/carminem)\
**Post date:** [April 22, 2007, 11:53am UTC](https://www.ruby-forum.com/t/legacy-db-e-composite-keys/92517/7 "2007-04-22T11:53:34Z")

</div>

Matteo V. wrote:

> > Cosa mi sfugge?

> Voglio dire, se la tabella originale “pippo” ha una chiave composta da,  
> poniamo, nome e telefono, nella view aggiungi una nuova colonna  
> costruita  
> come concatenazione di nome e telefono. Tipo,

> La view ï¿½ senz’altro una replica della tabella orignale, che si avvicina  
> perï¿½ alle convenzioni di Rails, perchï¿½ ha una chiave primaria su una sola  
> colonna.

Ah ok. Ma a questo punto, ritengo sia meglio rimanere con :options  
(soprattutto  
se riesco a passargli dei parametri, si puÃ²?).

Non posso variare il DB legacy, indi niente aggiunta di View od altro.  
☹

> Che cosa succede quando fai un aggiornamento dei dati ï¿½ un altro paio di  
> maniche 🙂

Fortunatamente (lassÃ¹ qualcuno mi ama), non ho il problema di dover  
aggiornare  
il DB preesistente. Infatti, queste cose andranno fatte direttamente con  
l’applicazione per cui Ã¨ stato progettato.

In altri termini, l’applicazione Rails lo usa solo per visualizzare il  
catalogo prodotti.  
In un secondo momento, ho intenzione di integrare (plugin? altro?) una  
gestione del catalogo slegata dal DB MS SQL.

Ho lasciato una richiesta di aiuto sul gruppo relativo a composite\_keys,  
attenderÃ² al massimo un altro paio di giorni e, qualora la cosa non si  
risolvesse, andrÃ² avanti con :options. Poi chissÃ 🙂

Grazie 1000 per il tuo aiuto.
