Hola señor@ crodme.
El error que cometiste está a la base del razonamiento... veamos...
Es una especie de juego, no es una gastada.
"Tengo 3 tablas" : como sabés ? quien te la dió ? no me digas que tu cliente
te dijo : "tenes tres tablas". Es probable que tu cliente te haya contado
una historia donde hay : Sector/Area, Especialización y que por cada Area
quiere definir cuanto personal necesita por cada especialización.
A ese punto tu mente empezó a elaborar y te fuiste derecho a la base de
datos.
Lo que yo veo es que tenes 3 entidades candidadas: Area, Especialización,
Personal/Obrero.
A cada Area se asocian una serie de Especialización. Cada Especialización
puede ser asociada a un Area una sola y unica vez. Por cada asociación
Area-Especialización se necesita declarar la cantidad de Personal que se
necesita (con esta frase aparece una cuarta clase que representa la relación
entre Area-Especialización).
Lo que haría yo es empezar por las clases (dejo Personal/Obrero que no nos
interesa):
Area
Descripcion
Enumerable<EspecializaciónParaArea>
AgregaEspecializacion(Especialización, cantidadPersonal)
DesagregaEspecializacion(Especialización)
Especialización
Descripcion
EspecializaciónParaArea
Especializacion
CantidadPersonal
Salto la implementación de las clases (por tiempo).
A este punto tengo un problema.
Esa cosa tan linda que armé la tengo que representarlas en un engendro que
habla otro idioma : ese engendro es un RDBMS.
Como de algún lado me dijeron que las clases se mapean a tabla (aunque no
haya un relación uno a uno con ellas), que las propiedades se mapean a
columnas y que las relaciones son FK voy y me construyo las tablitas que
necesito con su lindo POID y las vinculos con FKs donde necesario.
Y me sale:
Areas
Id
Descripcion
Especializaciones
Id
Descripcion
EspecializacionesPorAreas
Id
AreaID (FK a Areas)
EspecializacionID (FK a Especializaciones)
CantidadDePersonal
Ahora tendo dos representaciones de la realidad (una en clases y la otra en
tablas) y necesito vincularlas.
Como uso un FW basado en ORM llamado NH la form de vincular los dos mundos
es por medio de un archivo de mapeo.
<class name="Area">
<id name="Id">
<generator class="hilo"/>
</id>
<property name="Description" />
<set name="Especializaciones" generic="true" inverse="true"
cascade="all">
<key column="AreaID"/>
<one-to-many class="EspecializacionArea"/>
</set>
</class>
<class name="Especializacion">
<id name="Id">
<generator class="hilo"/>
</id>
<property name="Description" />
</class>
<class name="EspecializacionArea">
<id name="Id">
<generator class="hilo"/>
</id>
<many-to-one name="Area" class="Especializacion" column="AreaID"
not-null="true"/>
<many-to-one name="Especializacion" class="Especializacion"
column="EspecializacionID" not-null="true"/>
<property name ="Cantidad"/>
</class>
A este punto me armo un test y dejo que NH construya la tabla así puedo
verificar si las cosas se representan como yo había pensado.
No lo probé pero debería andar... el test lo dirá.
Bye.
Fabio Maulo.
P.D. Es obvio, pero por la duda lo aclaro, que hay otras representaciones
posibles.
--~--~---------~--~----~------------~-------~--~----~
Para escribir al Grupo, hágalo a esta dirección:
[email protected]
Para más, visite: http://groups.google.com/group/NHibernate-Hispano
-~----------~----~----~----~------~----~------~--~---