Relaciones complejas


#1

Tengo un problema… a ver que se puede hacer:

Dispongo de una tabla Productos, otra Categoría y otra Subcategoría.

Estas son la reglas de negocio:

· Un Producto pertenece a una Categoría.
· Un Producto pertenece también a una Subcategoría.
· Un Categoría tiene varias Subcategoría.

Hasta aquí la cosa va bien. Tres relaciones 1:N (Producto-Categoria,
Producto-Subcategoria y Categoria-Subcategoria).
Sin embargo hay una cuarta regla de negocio que es la que me tiene
liado:

· La Subcategoría de un Producto debe pertenecer a la Categoría de éste.

¿Como resolveríais este problema? ¿Hay alguna forma de modelarlo en la
base de datos?


#2

Hola,

· Un Producto pertenece a una Categoría.
· Un Producto pertenece también a una Subcategoría.
· Un Categoría tiene varias Subcategoría.

¿Como resolveríais este problema? ¿Hay alguna forma de modelarlo en la
base de datos?

dos enfoques:

categoría => subcategoría => producto

categoría => categoría => producto

Con el segundo tienes la ventaja de que puedes anidar tantos niveles
como quieras y que además te permite que un producto tenga una categoría
“Raíz” de las que no pertenecen a ninguna subcategoría. Además, es una
tabla menos que mantener.

Saludos,

javier ramírez


#3

javier ramirez
escribió:> categoría => categoría => producto

Con el segundo tienes la ventaja de que puedes anidar tantos niveles
como quieras y que además te permite que un producto tenga una categoría
“Raíz” de las que no pertenecen a ninguna subcategoría. Además, es una
tabla menos que mantener.

+1, si optas por esa vía y la estructura de tus categorías tiene pinta
de árbol quizá quieras echar un vistazo a acts_as_tree:

http://ar.rubyonrails.com/classes/ActiveRecord/Acts/Tree/ClassMethods.html

Saludos,
Raul M.


#4

Hola,

si existe la restricción que los artículo debe colgar solo de
subcategorías (no se si ese es tu caso) te bastaría con:

categoría has many subcategorías
subcategorías has many productos

podrías rescatar la categoría del producto desde la relación con la
subcategoría y te bastaría con eso, con lo que no es necesario tener la
categoría asociada a los productos, normalizadamente hablando claro.

Paco
García escribió:> Tengo un problema… a ver que se puede hacer:


#5

Únicamente necesito dos niveles (categoría y subcategoría) no necesito
más,
para algunos productos ni siquiera necesito subcategoría (corrección de
la
regla de negocio 2). Me gustaría que quedara modelado todo (o lo máximo
posible) en la base de datos.

¿Nuevas sugerencias?


#6

On 8/2/07, Emilio T. removed_email_address@domain.invalid wrote:

tabla: categories, tiene campo: category_id

Perdon, typo => tiene campo: parent_id


#7

On 8/2/07, Paco García removed_email_address@domain.invalid wrote:

Únicamente necesito dos niveles (categoría y subcategoría) no necesito más,
para algunos productos ni siquiera necesito subcategoría (corrección de la
regla de negocio 2). Me gustaría que quedara modelado todo (o lo máximo
posible) en la base de datos.

¿Nuevas sugerencias?

Yo lo he implementado parecido a esto, no tengo el codigo a mano pero
deberia andar:

tabla: categories, tiene campo: category_id

class Category < AR
has_many :products
acts_as_tree
validate
if !parent.nil? and !children.empty?
errors.add_to_base(“No podes tener mas de 2 niveles”)
end
end
end

class Product < AR
belongs_to :category
end

Saludos!


#8

El Aug 2, 2007, a las 11:28 PM, ricardo
escribió:

Hola, la mejor solucion es la que muy bien dice Emilio y Raul, unas
categorias en arbol o hierarchical data. la solución menos elegante
pero
no por ello peor, consiste en modelarlo en la BD con dos tablas,

Esa ultima tiene ademas la pega de que debes modelar que un producto
pueda pertenecer a una categoria o subcategoria (segun un mail
anterior), con lo que debes tener una polimorfica en Products. Nah,
lo generico en este caso quedara mas sencillo.

– fxn


#9

Hola, la mejor solucion es la que muy bien dice Emilio y Raul, unas
categorias en arbol o hierarchical data. la solución menos elegante pero
no por ello peor, consiste en modelarlo en la BD con dos tablas,
(categoria y subcategoria)


#10

Que tal.

Disculpen tengo que hacer un gran cuestioario sobre la recepcion de
individuos en un zoologico, pero como tiene varias secciones como datos
generales, datos de su donante, de su arribo, etc, Lo que pretendo pues
es
el clasico, por partes que al terminar una seccion, pase a la siguiente
y en
la siquiente puede pasar a la otra o regresar a la anterior, lo que no
se es
como ir guardando los diferentes objetos entre el paso de las acciones
que
involucren varios controladores.

Espero me haya podido explicar bien, si alguien tiene alguna referencia
para
hacer esto o sugerencias, se los agradeceria mucho.


Live Search en Prodigy/MSN. Todo lo que buscas ahora más rapido
http://live.com


#11

On 03/08/07, salvador zalapa removed_email_address@domain.invalid wrote:

Que tal.

Espero me haya podido explicar bien, si alguien tiene alguna referencia para
hacer esto o sugerencias, se los agradeceria mucho.

Tienes el plugin acts_as_wizard, no sé que tal está

http://agilewebdevelopment.com/plugins/acts_as_wizard


Manuel, que
piensa que eres una excelente persona y medra en torno a
http://simplelogica.net y/o http://simplelogica.net/logicola/
Recuerda comer mucha fruta y verdura.


#12

El Aug 3, 2007, a las 12:50 AM, Xavier N.
escribió:

Esa ultima tiene ademas la pega de que debes modelar que un
producto pueda pertenecer a una categoria o subcategoria (segun un
mail anterior), con lo que debes tener una polimorfica en Products.
Nah, lo generico en este caso quedara mas sencillo.

Dejame añadir que si bien la implementacion generica parece la mas
sencilla, la API publica de la clase puede estar limitada a categoria/
subcategoria y demas si queda mas comodo.

Es decir, no tienes por que ofrecer la API de arbol de acts_as_tree
asi silvestre si no tiene sentido en la aplicacion, si conviene
puedes añadir una capa fina ad-hoc que delegue en ella. Te quedaria
la implementacion facil por un lado, y el uso esperado por otro.

– fxn


#13

Gracias Manuel lo estoy checando, alguna otra sugerencia o como buscar,
no
se si mantener sesiones be objetos sirva tambien? o ando disvariando?

Manuel, que
piensa que eres una excelente persona y medra en torno a
http://simplelogica.net y/o http://simplelogica.net/logicola/
Recuerda comer mucha fruta y verdura.


Ror-es mailing list
removed_email_address@domain.invalid
http://lists.simplelogica.net/mailman/listinfo/ror-es


Live Search en Prodigy/MSN. Todo lo que buscas ahora más rapido
http://live.com