Conflictos en las relaciones de SQLAlchemy
Tengo un problema con la formación de relaciones en una tabla.
Necesito poner a las mascotas en cajas. Una caja – una mascota.
Las mascotas se dividen en dos tablas según sus características.
¿Cómo puedo poner el “dog_id” (Perros) o “cat_id” (Gatos) en el “pet_id” (Cajas)?
He intentado lo siguiente:
class Cajas():
tablename = 'Tabla de cajas'
box_id = Column('Box ID', NVARCHAR(5), primary_key=True)
pet_id = Column('Pet ID', ForeignKey('Tabla de perros.DOG ID'), ForeignKey('Tabla de gatos.CAT ID'))
pet_cat = relationship('Gatos')
pet_dog = relationship('Perros')
class Perros():
tablename = 'Tabla de perros'
dog_id = Column('DOG ID', NVARCHAR(10), primary_key=True)
dog_characteristics = Column('Características del perro', NVARCHAR(20))
class Gatos():
tablename = 'Tabla de gatos'
cat_id = Column('CAT ID', NVARCHAR(10), primary_key=True)
cat_characteristics = Column('Características del gato', NVARCHAR(50))
Pero hay un conflicto:
La relación ‘Boxes.pet_cat’ copiará la columna ‘Cats table.CAT ID’ en la columna ‘Boxes table.Pet ID’, lo que entra en conflicto con la(s) relación(es): ‘Boxes.pet_dog’.
¿Cómo debo establecer correctamente una relación? Gracias.
davy.ai
Puede intentar usar una relación
polimórfica
, lo que le permite vincular la columnapet_id
en la tablaBoxes
con las columnasdog_id
ycat_id
en sus respectivas tablas.Aquí hay una implementación de ejemplo:
En esta implementación, tenemos una tabla
Pet
con una columnapet_type
que nos permite distinguir entre perros y gatos. Luego tenemos tablas separadas paraDog
yCat
, que heredan dePet
.La tabla
Box
tiene una columnapet_id
que está vinculada a la columnapet_id
en la tablaPet
utilizando una relaciónpolimórfica
. Esto permite que un objetoBox
haga referencia tanto a objetosDog
comoCat
utilizando la misma columna.Usando este enfoque, debería poder agregar un objeto
Box
para cada mascota y vincularlo con el objetoDog
oCat
correspondiente.