RE: Representación de asociaciones en bases de datos

Hernan Martinez Foffani hernan en orgmf.com.ar
Vie Ago 23 11:42:24 CEST 2002


> > en cuanto a mantenimiento... lo que sí te puedo asegurar es que si
> > cada atributo del modelo de objetos es una tabla, el administrador
> > no lo va a tener facil ;-)
> Cada clase va a ser una tabla, no cada atributo.

ah... ok.  esto cambia las cosas, no habia entendido bien la idea.
por lo que veo vas a seguir el esquema tradicional de Objetct/Relational.
quizás este paper te puede ser util:
http://www.objectarchitects.de/ObjectArchitects/papers/Published/ZippedPaper
s/mappings04.pdf
tiene varias referencias a otro papers que tambien te pueden servir.


> > otra alternativa es (aprovechando que tenés pensado implementar las
> > dos opciones) darle al programador la posibilidad de elegir si
> > quiere o no "congelar" el diseño de la clase.
> ¿Qué es congelar el diseño? ¿Mantener el diseño actual? He
> pensado en ello. Inicialmente no lo haremos porque estamos construyendo
> la capa para aplicaciones nuevas, pero puede ser que si alguien nos
> pide montar una aplicación sobre un esquema existente, que tratemos el
> modelo tal cual como es, inhabiltando en este caso la herencia.

me refería a que una vez congelado no permitir luego la modificacion
*dinamica* de la estructura de clases. algo como:

>>> C.__bases__ = (D,)
Traceback (most recent call last):
  File "<pyshell#10>", line 1, in ?
    C.__bases__ = (D,)
TypeError: __bases__ is frozen.
>>>

esto no impide que se pueda crear una subclase de C mas tarde.

también puedes hacer uso de __slots__ (presentes en la nueva jerarquia
de clases)

>>> class F(object):
	__slots__ = ["rojo", "verde", "azul"]
	pass

>>> f = F()
>>> f.rojo = 0xFF
>>> f.amarillo = 0x33
Traceback (most recent call last):
  File "<pyshell#34>", line 1, in ?
    f.amarillo = 0x33
AttributeError: 'F' object has no attribute 'amarillo'
>>>

los slots también sirven para hacer mas "estática" la definición de
clases.

>>> class G(object):
	__slots__ = ["rojo", "verde", "azul"]
	pass
>>> f.__class__ = G
Traceback (most recent call last):
  File "<pyshell#40>", line 1, in ?
    f.__class__ = G
TypeError: __class__ assignment: 'G' object layout differs from 'F'
>>>

-Hernan





Más información sobre la lista de distribución Python-es