Chaves compostas  XML
Índice dos Fóruns » Ruby & Ruby on Rails
Autor Mensagem
luiz_ross
GUJ Master
[Avatar]

Membro desde: 25/09/2002 16:38:34
Mensagens: 1110
Localização: Salto, SP
Offline

Não existem chaves compostas em rails?

"Quanto mais inteligente é um homem, mais originalidade ele descobre nos homens. Pessoas ordinárias não enxergam nenhuma diferença entre eles"
[MSN]
Mauricio Linhares
Moderador
[Avatar]

Membro desde: 09/01/2005 23:28:22
Mensagens: 3717
Localização: João Pessoa, Paraíba - Brasil
Offline

Em rails ou no active record?

Se for no ActiveRecord, não, ele não dá nenhum suporte especial a chaves compostas. Mas você pode usar esse plugin pra facilitar a sua vida -> http://compositekeys.rubyforge.org/

De qualquer forma, chaves compostas são uma péssima idéia

Meu blog sobre desenvolvimento | My Last.fm | @mauriciojr

Screencast de Introdução a linguagem Objective-C
[WWW]
maniacs
JavaGuru
[Avatar]

Membro desde: 05/07/2005 09:04:14
Mensagens: 240
Offline

Maurício Linhares wrote:Em rails ou no active record?

Se for no ActiveRecord, não, ele não dá nenhum suporte especial a chaves compostas. Mas você pode usar esse plugin pra facilitar a sua vida -> http://compositekeys.rubyforge.org/

De qualquer forma, chaves compostas são uma péssima idéia


why ?

Yuri Nascimento
Moderador GUJS
renatosilva
GUJ Master

Membro desde: 16/12/2004 17:09:19
Mensagens: 1787
Offline

É, why?
rodrigoy
GUJ Ranger
[Avatar]

Membro desde: 18/04/2006 01:06:28
Mensagens: 758
Localização: São Paulo
Offline

Objetos se relacionam entre si através de associações. Na teoria existem vários tipos de associações n-árias e até classes de associação. O problema é que muitos desses conceitos não são implementáveis em código de maneira natural na maioria das linguagens.

No âmbito de negócio também era comum você usar chaves compostas para garantir integridade. Você fazia uma nota fiscal ter a chave (cod_nota + cod_filial) só para garantir essa integridade entre as tuplas. Na verdade o relacionamento é que a filial possui notas fiscais e uma nota é de uma filial e seu próprio modelo tem que garantir que as notas de uma filial não se misture com outras.

Quando você pensa num modelo de objetos, como as coisas acontecem na vida real, você não precisa de chaves compostas. As associações binárias são suficientes. Chave composta é um conceito do modelo relacional e não do modelo de objetos.

Rodrigo Yoshima
www.ASPERCOM.com.br

Próximas Turmas:
São Paulo: Scrum 28/agosto | OOAD-UML 13/setembro

Débito Técnico Blog: blog.aspercom.com.br
[WWW]
pcalcado
Moderador
[Avatar]

Membro desde: 08/03/2004 17:19:35
Mensagens: 5174
Localização: Sydney - Australia
Offline

rodrigoy wrote:
Quando você pensa num modelo de objetos, como as coisas acontecem na vida real, você não precisa de chaves compostas. As associações binárias são suficientes. Chave composta é um conceito do modelo relacional e não do modelo de objetos.


Ok mas nada impede (exceto um ORM feijão-com-arroz como ActiveRecord) que você tenha uma base relacional e um sistema Orientado a Objetos, nete caso chaves compostas fazem sentido.

No geral eu concordo com você que é melhor evitar chaves compostas mas é bom separar o que é paradigma e o que é prática.

Phillip Calçado "Shoes"
http://fragmental.tw/
http://blog.fragmental.com.br/
"It is unfortunate that much of what is called 'object-oriented programming today is simply old style programming with fancier constructs." - Alan Kay
[Email] [WWW] [Yahoo!] [MSN]
rodrigoy
GUJ Ranger
[Avatar]

Membro desde: 18/04/2006 01:06:28
Mensagens: 758
Localização: São Paulo
Offline

Sim... o cuidado que deve ser tomado é fazer seu modelo de objetos direcionar seu modelo relacional e não o contrário [Ambler]. Se isso for sua prática dificilmente existirá chaves compostas. Usamos a chave única (world-famous campo id) sem "business meaning".

Já faz uns bons 4 anos que não modelo banco de dados e as vezes que precisei lidar com legado foi um porre. Hibernate por exemplo é muito green-field IMHO.

Rodrigo Yoshima
www.ASPERCOM.com.br

Próximas Turmas:
São Paulo: Scrum 28/agosto | OOAD-UML 13/setembro

Débito Técnico Blog: blog.aspercom.com.br
[WWW]
renatosilva
GUJ Master

Membro desde: 16/12/2004 17:09:19
Mensagens: 1787
Offline

rodrigoy wrote:Você fazia uma nota fiscal ter a chave (cod_nota + cod_filial) só para garantir essa integridade entre as tuplas. Na verdade o relacionamento é que a filial possui notas fiscais e uma nota é de uma filial e seu próprio modelo tem que garantir que as notas de uma filial não se misture com outras.


1 - E qual seria o jeito certo de fazer?

2 - Pensando bem, qualquer chave comporta pode ser substituída por um único campo de ID, certo?
rodrigoy
GUJ Ranger
[Avatar]

Membro desde: 18/04/2006 01:06:28
Mensagens: 758
Localização: São Paulo
Offline

Isso... A filial nada mais é que uma associação com a nota. Cada um tem seu único ID sem "business meaning". Se uma nota não pode estar associada a 2 filiais seu sistema deve resolver isso funcionalmente. Se quiser bloquear isso no banco crie um índice unique.

Rodrigo Yoshima
www.ASPERCOM.com.br

Próximas Turmas:
São Paulo: Scrum 28/agosto | OOAD-UML 13/setembro

Débito Técnico Blog: blog.aspercom.com.br
[WWW]
renatosilva
GUJ Master

Membro desde: 16/12/2004 17:09:19
Mensagens: 1787
Offline

Acho que foi isso que eu me confundi, pois eu queria pôr uma restrição dessas num banco aqui, onde 2 campos não poderão ter o mesmo valor conjunto. Não é uma chave composta, mas sim um "unique composto". Isso pode né?
Mauricio Linhares
Moderador
[Avatar]

Membro desde: 09/01/2005 23:28:22
Mensagens: 3717
Localização: João Pessoa, Paraíba - Brasil
Offline

renato3110 wrote:Acho que foi isso que eu me confundi, pois eu queria pôr uma restrição dessas num banco aqui, onde 2 campos não poderão ter o mesmo valor conjunto. Não é uma chave composta, mas sim um "unique composto". Isso pode né?


Claro

Meu blog sobre desenvolvimento | My Last.fm | @mauriciojr

Screencast de Introdução a linguagem Objective-C
[WWW]
 
Índice dos Fóruns » Ruby & Ruby on Rails
Ir para:   
Powered by JForum 2.1.8 © JForum Team