Forum: Rails-ES Migration y Foreing keys

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
1980c423d8a5ea2f223315a56e9c20db?d=identicon&s=25 ricardo - detectomania.com (Guest)
on 2007-07-06 12:36
(Received via mailing list)
Hola a todos, me presento pues soy nuevo en la comunidad, mi nombre es
Ricardo y hasta ahora me he centrado en lenguajes de script
principalmente PHP y en especial symfony como framework, ahora me han
surgido ganas de adquirir nuevos puntos de vista con los que poder
"decorar" mis futuras aplicaciones, ROR me ha parecido muy interesante
junto con Django debido a sus fuerte OOP y las buenas librerias que
posee tanto ruby con python.

Trasteando con ROR para evaluar sus escalabilidad y su flexibilidad he
topado con el concepto de Migracion, que por cierto me ha parecido
magnifico, pero me ha surgido una duda, Al generar mi esquema de DB
desde "migrations", he notado que las relaciones entre tablas se
realizan en el Modelo, a mi personalmente me gustaria generar las
foreing keys dentro de la base de datos para asi usar la integridad
refencial asi como los indices primarios entre tablas , vitales en
grandes volumenes de datos.

No se si estoy equivocado, pues soy nuevo en ROR, segun la documentacion
las foreing key se construyen como table_id pero al insertar datos
directamente en la BD no tiene encuenta la integridad referencial, segun
parece ya se encarga ROR de ello.

¿Alguien sabe como hacer que las relaciones sean a nivel de base de
datos, en el mas puro estilo DBA?

Un saludo a todos y gracias
1f2eadfb41362800ebc2cf211b91d0f7?d=identicon&s=25 javier ramirez (Guest)
on 2007-07-06 12:50
(Received via mailing list)
hola,
> ¿Alguien sabe como hacer que las relaciones sean a nivel de base de
> datos, en el mas puro estilo DBA?
>
una forma sencilla es usar el plugin de foreign key migrations de
http://www.redhillonrails.org/

a partir de ahí, cada vez que en una migration tengas un campo que se
llame LOQUESEA_id, el plugin va a interpretar que quieres poner una FK
referenciando a la tabla LOQUESEA.

Si por cualquier motivo no es así (pasa por ejemplo con campos parent_id
que hacen referencia a la misma tabla) puedes meterle la claúsula
:references=>latabladeverdad o :references=>nil para que no cree FK

En cuanto hagas eso, tendrás que tener especial cuidado en el orden en
el que creas las tablas, ya que al establecerse FKs te va a dar errores
lógicamente si creas una tabla hija antes que una padre (y lo mismo para
el procedimiento down)

Más detalles directamente en la página del plugin ;)

saludos,

javier ramírez
7223c62b7310e164eb79c740188abbda?d=identicon&s=25 Xavier Noria (Guest)
on 2007-07-06 12:50
(Received via mailing list)
On Jul 6, 2007, at 12:35 PM, ricardo - detectomania.com wrote:

> No se si estoy equivocado, pues soy nuevo en ROR, segun la
> documentacion
> las foreing key se construyen como table_id pero al insertar datos
> directamente en la BD no tiene encuenta la integridad referencial,
> segun
> parece ya se encarga ROR de ello.

Es correcto, Rails crea primary keys pero no foreign keys. Las
relaciones entre tablas no estan en el esquema, se definen solo a
nivel de modelos para poder recorrer y manipular relaciones.

Existe un plugin que crea foreign keys de manera transaparente si tus
migrations siguen convenciones normales, y permite configurar cada
una con :references si se necesita puntualmente, es este:

   http://www.redhillonrails.org/#foreign_key_migrations

Nosotros (ASPgems) lo usamos en todas las aplicaciones cuya base de
datos soporte foreign keys.

-- fxn
1980c423d8a5ea2f223315a56e9c20db?d=identicon&s=25 ricardo (Guest)
on 2007-07-06 13:47
(Received via mailing list)
Muchas gracias por la magnifica contestación, me habeis salvado muchas
horas de navegación, me estaba volviendo un poquillo loco pues pensaba
que estaba equivocado hacia algo mal. No entiendo por que no incluyen
esta funcionalidad en el nucleo de ROR.

Ya lo he instalado y ahora voy a ver que tal se comporta y os comentaré,
a mi principalmente me interesa echar manos de las librerias matemáticas
que tiene ruby, aunque creo que las de python son algo mejores, bueno ya
se
verá.
Muchas gracias por la contestación y espero que pronto poder ayudar en
esta creciente comunidad. y quien sabe lo mismo me animo a ir a la
conferencia de ruby que teneis pensado organizar.

Un saludo
Ricardo
1980c423d8a5ea2f223315a56e9c20db?d=identicon&s=25 ricardo (Guest)
on 2007-08-22 12:26
(Received via mailing list)
Hola vuelvo a sacar el hilo de la controversia, las relaciones foreign
keys.

He probado el plugin de redhill para manejar Dichas foreign desde
db:migration, pero he notado una cosa curiosa, el plugin funciona cuando
son campos de tipo "table_id", ya que la expresión regular lo mapea a la
correspondiente tabla. Pero en cambio en tablas con campos parent_id
como las que utiliza Act_as_tree o las nested, como en mi caso el plugin
falla y no puede crear la la relación, debido a que la columna parent_id
la intenta enlazar a una tabla que no existe "parent".

He probado el plugin ActsAsNestedSet y este si me funcionó mucho mejor.
¿Alguien ha tenido el mismo problema?.

Un saludo
Ricardo
1f2eadfb41362800ebc2cf211b91d0f7?d=identicon&s=25 javier ramirez (Guest)
on 2007-08-22 12:42
(Received via mailing list)
Hola,

> son campos de tipo "table_id", ya que la expresión regular lo mapea a la
> correspondiente tabla. Pero en cambio en tablas con campos parent_id
> como las que utiliza Act_as_tree o las nested, como en mi caso el plugin
> falla y no puede crear la la relación, debido a que la columna parent_id
> la intenta enlazar a una tabla que no existe "parent".
>
como bien te dice la documentación del plugin
(http://www.redhillonrails.org/#foreign_key_migrations)

" If you have multiple columns referencing a table or for whatever
reason, your column name isn’t the same as the referenced table name,
you can use the :references option"

que hablando en castellano quiere decir que uses el parámetro
:references con el nombre de la columna que quieras o nil en caso de que
no quieras una clave externa.

saludos,

javier ramírez
1980c423d8a5ea2f223315a56e9c20db?d=identicon&s=25 ricardo (Guest)
on 2007-08-22 13:08
(Received via mailing list)
jajaj, upsss ni me habia fijado en ese detalle, muchas gracias y siento
el despiste.. la verdad está ahi fuera, tan solo hay que saber buscarla .

Un saludo y gracias por la rapida respuesta.


javier ramirez
escribió:> Hola,
This topic is locked and can not be replied to.