[ruby-it] le foreign keys.

Paolo Montrasio paolo a paolomontrasio.com
Gio 18 Dic 2008 11:17:36 CET


Mauro wrote:
> 2008/12/16 Paolo Montrasio <paolo a paolomontrasio.com>
> 
>> >> magari c'� un metodo migliore, la parola agli esperti :)
>> module MigrationHelpers
>>    constraint_name = "fk_#{from_table}_#{from_column}"
>>
>>    execute %{alter table #{from_table}
>>              drop constraint #{constraint_name}}
>>  end
>> end
> 
> 
> Solo per creare delle foreign key non c'e' necessita' di installarsi un
> plugin, questo modulo basta e avanza, posso copiarmelo pari pari? :-)

Usalo pure, più si riusa il codice e meglio è. Se fai dei miglioramenti 
però postali così ne approfittiamo tutti :-)

> Hai preso lo spunto dal manuale agile development?

Non credo. Ho dei vaghi ricordi a proposito di un post su un blog. Da lì 
ho preso del codice che poi ho modificato un po' (forse era per mysql? 
forse mancava la remove?)

> Ho visto il codice in quel manuale, aggiunge anche dei trigger.
> Forse pero' manca del codice, ne riporto uno stralcio:
> 
> module MigrationHelpers
> 
>   def foreign_key(from_table, from_column, to_table)
>     constraint_name = "#{from_table}_#{to_table}_fkey"
>     execute %{
>       CREATE TRIGGER #{constraint_name}_insert
>       BEFORE INSERT ON #{from_table}
>       FOR EACH ROW BEGIN
>         SELECT
>           RAISE(ABORT, "constraint violation: #{constraint_name}" )
>         WHERE
>           (SELECT id FROM #{to_table} WHERE id = NEW.#{from_column}) IS
> NULL;
>       END;
>     }
> 
> ci sono altri due trigger, uno per l'update e uno per il delete, non 
> vedo pero' dove crea le references.

Credo che faccia proprio a meno delle reference e gestisca tutto con i 
trigger. Dovrebbe avere circa lo stesso effetto ma mi chiedo se sia una 
buona soluzione: se oltre ai trigger ci sono anche le foreign key forse 
una ragione ci sarà...  Ci vorrebbe però un esperto DBA per disquisire 
di queste cose sapendo veramente quel che si dice. Ce n'è qualcuno che 
ci legge?

Paolo
-- 
Posted via http://www.ruby-forum.com/.


More information about the Ml mailing list