Almacenar objetos en tabla SQL Server

19/06/2004 - 20:26 por Diego F. | Informe spam
Hola, estoy haciendo una aplicación en .NET y necesito que los objetos que
uso se puedan almacenar en una base de datos (SQL Server 2000). ¿Cuál es la
forma más sencilla de hacerlo? ¿Tendré que hacer métodos para ir guardando
campo a campo en ambos sentidos?


Saludos,

Diego F.

Preguntas similare

Leer las respuestas

#6 Diego F.
21/06/2004 - 17:42 | Informe spam
No entiendo muy bien el planteamiento. La tabla 2 es lo que no entiendo.
Para que sea más sencillo explicarse, voy a ejemplificar lo que quiero
hacer.

Supongamos que estoy haciendo una aplicación de agenda, para almacenar
contactos y sus teléfonos. La tabla 1 sería la tabla "Teléfonos", que
simplemente tendría números de teléfono. La tabla 3 sería la tabla "Agenda",
donde cada entrada tendría el nombre del contacto y varios números de
teléfono. Esa es la dificultad. Según tu código, la tabla "Teléfonos" sería
la tabla 2. ¿Es eso lo que se conseguiría con las tablas que has puesto?


Saludos,

Diego F.

"Gustavo Larriera [MVP SQL]" escribió en el
mensaje news:%
Tabla 1
ObjetoSimple (idObjetoSimple, columnaInt, columnaString, columnaFloat)
PK: {idObjetoSimple}

Tabla 2
ColeccionObjetoSimple (idObjetoColeccion, idObjetoSimple)
PK: {idObjetoColeccion, idObjetoSimple}
FK: {idObjetoSimple} --> ObjetoSimple (idObjetoSimple)

Tabla 3
Objeto3 (idObjeto, columnaInt, columnaFloat, idObjetoColeccion)
PK: {idObjeto}
FK: {idObjetoColeccion} --> ColeccionObjetoSimple (idObjetoColeccion)

Gustavo Larriera, MVP-SQL, MCSE
Uruguay LatAm
Este mensaje se proporciona "COMO ESTA" sin garantias y no otorga ningun
derecho / This posting is provided "AS IS" with no warranties, and confers
no rights.
"Diego F." wrote in message
news:
> No entiendo bien a que te refieres con "deshidratar". Te cuento los
objetos
> que tengo a ver si me puedes ayudar.
>
> El primero objeto tiene campos simples: int, string y float.
> El segundo objeto es una colección de objetos del primer tipo.
> El tercer objeto tiene int, float y un objeto del tipo 2 (la colección).
>
> ¿Cómo meterías esta información en tablas?
>
> Gracias por la ayuda.
>
>
> Saludos,
>
> Diego F.
>
> "Gustavo Larriera [MVP SQL]" escribió en el
> mensaje news:
> > Una táctica es que deshidrates tus objetos C# a una representación
> > relacional, para poder persistirlos en tablas de la base de datos.
Deberás
> > representar cada objeto C# en una estructura de fila de tabla


relacional
> (o
> > más de una tabla, según la complejidad de tu diseño).
> >
> > La opción que te dice Maxi es adecuada solamente si deseas persistir


los
> > objetos, luego volverlos a rehidratar en C# y procesarlos.
> >
> > Pero dices que solamente deseas ir en una dirección: Pasarlos de


objetos
> C#
> > a entidades relacionales en la base para consultar --obviamente--


según
el
> > modelo relacional.
> >
> > Gustavo Larriera, MVP-SQL, MCSE
> > Uruguay LatAm
> > Este mensaje se proporciona "COMO ESTA" sin garantias y no otorga


ningun
> > derecho / This posting is provided "AS IS" with no warranties, and
confers
> > no rights.
> > "Diego F." wrote in message
> > news:
> > > A ver si consigo ser más claro.
> > >
> > > Necesito que los objetos que uso en una aplicación C# se almacenen


en
> una
> > > tabla de SQL Server para luego poder hacer consultas. No necesito


que
se
> > > vuelvan a convertir en objetos ya que no los volveré a utilizar.
> > >
> > > Saludos,
> > >
> > > Diego F.
> > >
> > >
> > > "Maximiliano D. A." escribió en el
> mensaje
> > > news:
> > > > Hola, no entiendo bien lo que buscas!! si queres guardar objetos o
> > > entidades
> > > > en .NET podrias usar Serializacion lo cual lo genera en un XML!!!
> ahora
> > no
> > > > entiendo bien cual es el objetivo final de tu pregunta, podrias


ser
un
> > > poco
> > > > mas preciso?
> > > >
> > > > Gracias
> > > >
> > > > "Diego F." escribió en el mensaje
> > > > news:eneq$
> > > > > Hola, estoy haciendo una aplicación en .NET y necesito que los
> objetos
> > > que
> > > > > uso se puedan almacenar en una base de datos (SQL Server 2000).
> ¿Cuál
> > es
> > > > la
> > > > > forma más sencilla de hacerlo? ¿Tendré que hacer métodos para ir
> > > guardando
> > > > > campo a campo en ambos sentidos?
> > > > >
> > > > >
> > > > > Saludos,
> > > > >
> > > > > Diego F.
> > > > >
> > > > >
> > > >
> > > >
> > >
> > >
> >
> >
>
>


Respuesta Responder a este mensaje
#7 Gustavo Larriera [MVP SQL]
21/06/2004 - 21:36 | Informe spam
Hubieses empezado con el ejemplo :-) Hay varios enfoques posibles:

1. Si deseas manejar una cantidad variable/desconocida/no acotada de
telefonos.

Contactos( idContacto, datosContacto)
Telefonos( idContacto, telefono)

Si el Contacto tiene 10 telefonos, entonces en la tabla Telefonos hay 10
filas para mismo idContacto. La clave primaria de Telefonos es {idContacto,
telefono}

2. Si deseas manejar una cantidad fija/maxima de telefonos.

Puedes hacer un diseño menos normalizado y colocar columnas para los
telefonos en la tabla de Contactos. Supongamos que admites que cada contacto
tendrá un máximo posible de 5 telefonos, entonces podrias hacer:

Contactos (idContacto, datosContacto, telefono1, telefono2, telefono3,
telefono4, telefono5)


Por supuesto que hay que considerar si el objeto Telefono es una entidad
fuerte (por tqanto existe por sí misma) o es una entidad débil (solamente
existe si hay un contacto asociado). También debes considerar el tipo de
acceso quye necesitas.

a) Si necesitas accesar a traves del telefono, la opción 1 es mejor.
b) Si necesitas accesar por contacto únicamente, la opción 2 es muy cómoda.

saludos
gux


Gustavo Larriera, MVP-SQL, MCSE
Uruguay LatAm
Este mensaje se proporciona "COMO ESTA" sin garantias y no otorga ningun
derecho / This posting is provided "AS IS" with no warranties, and confers
no rights.
"Diego F." wrote in message
news:
No entiendo muy bien el planteamiento. La tabla 2 es lo que no entiendo.
Para que sea más sencillo explicarse, voy a ejemplificar lo que quiero
hacer.

Supongamos que estoy haciendo una aplicación de agenda, para almacenar
contactos y sus teléfonos. La tabla 1 sería la tabla "Teléfonos", que
simplemente tendría números de teléfono. La tabla 3 sería la tabla


"Agenda",
donde cada entrada tendría el nombre del contacto y varios números de
teléfono. Esa es la dificultad. Según tu código, la tabla "Teléfonos"


sería
la tabla 2. ¿Es eso lo que se conseguiría con las tablas que has puesto?


Saludos,

Diego F.

"Gustavo Larriera [MVP SQL]" escribió en el
mensaje news:%
> Tabla 1
> ObjetoSimple (idObjetoSimple, columnaInt, columnaString, columnaFloat)
> PK: {idObjetoSimple}
>
> Tabla 2
> ColeccionObjetoSimple (idObjetoColeccion, idObjetoSimple)
> PK: {idObjetoColeccion, idObjetoSimple}
> FK: {idObjetoSimple} --> ObjetoSimple (idObjetoSimple)
>
> Tabla 3
> Objeto3 (idObjeto, columnaInt, columnaFloat, idObjetoColeccion)
> PK: {idObjeto}
> FK: {idObjetoColeccion} --> ColeccionObjetoSimple (idObjetoColeccion)
>
> Gustavo Larriera, MVP-SQL, MCSE
> Uruguay LatAm
> Este mensaje se proporciona "COMO ESTA" sin garantias y no otorga ningun
> derecho / This posting is provided "AS IS" with no warranties, and


confers
> no rights.
> "Diego F." wrote in message
> news:
> > No entiendo bien a que te refieres con "deshidratar". Te cuento los
> objetos
> > que tengo a ver si me puedes ayudar.
> >
> > El primero objeto tiene campos simples: int, string y float.
> > El segundo objeto es una colección de objetos del primer tipo.
> > El tercer objeto tiene int, float y un objeto del tipo 2 (la


colección).
> >
> > ¿Cómo meterías esta información en tablas?
> >
> > Gracias por la ayuda.
> >
> >
> > Saludos,
> >
> > Diego F.
> >
> > "Gustavo Larriera [MVP SQL]" escribió en el
> > mensaje news:
> > > Una táctica es que deshidrates tus objetos C# a una representación
> > > relacional, para poder persistirlos en tablas de la base de datos.
> Deberás
> > > representar cada objeto C# en una estructura de fila de tabla
relacional
> > (o
> > > más de una tabla, según la complejidad de tu diseño).
> > >
> > > La opción que te dice Maxi es adecuada solamente si deseas persistir
los
> > > objetos, luego volverlos a rehidratar en C# y procesarlos.
> > >
> > > Pero dices que solamente deseas ir en una dirección: Pasarlos de
objetos
> > C#
> > > a entidades relacionales en la base para consultar --obviamente--
según
> el
> > > modelo relacional.
> > >
> > > Gustavo Larriera, MVP-SQL, MCSE
> > > Uruguay LatAm
> > > Este mensaje se proporciona "COMO ESTA" sin garantias y no otorga
ningun
> > > derecho / This posting is provided "AS IS" with no warranties, and
> confers
> > > no rights.
> > > "Diego F." wrote in message
> > > news:
> > > > A ver si consigo ser más claro.
> > > >
> > > > Necesito que los objetos que uso en una aplicación C# se almacenen
en
> > una
> > > > tabla de SQL Server para luego poder hacer consultas. No necesito
que
> se
> > > > vuelvan a convertir en objetos ya que no los volveré a utilizar.
> > > >
> > > > Saludos,
> > > >
> > > > Diego F.
> > > >
> > > >
> > > > "Maximiliano D. A." escribió en el
> > mensaje
> > > > news:
> > > > > Hola, no entiendo bien lo que buscas!! si queres guardar objetos


o
> > > > entidades
> > > > > en .NET podrias usar Serializacion lo cual lo genera en un


XML!!!
> > ahora
> > > no
> > > > > entiendo bien cual es el objetivo final de tu pregunta, podrias
ser
> un
> > > > poco
> > > > > mas preciso?
> > > > >
> > > > > Gracias
> > > > >
> > > > > "Diego F." escribió en el mensaje
> > > > > news:eneq$
> > > > > > Hola, estoy haciendo una aplicación en .NET y necesito que los
> > objetos
> > > > que
> > > > > > uso se puedan almacenar en una base de datos (SQL Server


2000).
> > ¿Cuál
> > > es
> > > > > la
> > > > > > forma más sencilla de hacerlo? ¿Tendré que hacer métodos para


ir
> > > > guardando
> > > > > > campo a campo en ambos sentidos?
> > > > > >
> > > > > >
> > > > > > Saludos,
> > > > > >
> > > > > > Diego F.
> > > > > >
> > > > > >
> > > > >
> > > > >
> > > >
> > > >
> > >
> > >
> >
> >
>
>


Respuesta Responder a este mensaje
#8 Diego F.
22/06/2004 - 11:39 | Informe spam
Muchas gracias. Si no te importa, voy a ponerte otro ejemplo que es el que
estoy manejando realmente. Supongamos un restaurante, y queremos manejar
información de pedidos de cada mesa (comandas). Tendría también 3 tablas:

La aplicación maneja 3 objetos: un objeto Plato, con información de los
platos del restaurante, un objeto ColecciónPlatos, que son los platos que
pide una determinada mesa, y finalmente el objeto comanda, con los datos de
la mesa (número, fecha,...) y una ColecciónPlatos.

¿Serían así las tablas?

- Tabla plato: id_plato, desc_plato, precio
- Tabla comanda: id_comanda, mesa
- Tabla PlatosComanda: id_plato, id_comanda

La duda que tengo es si así sería suficiente o hay que añadir algún campo a
la tabla Comanda que sea una clave externa de la tabla PlatosComanda.

Y ya para acabar, ¿considerarías el precio total de una comanda en el diseño
o lo tomarías como un cálculo a partir de los datos de la tabla? Si es el
último caso, ¿cómo sería esa consulta SLQ?

Gracias por todo.


Saludos,

Diego F.

"Gustavo Larriera [MVP SQL]" escribió en el
mensaje news:
Hubieses empezado con el ejemplo :-) Hay varios enfoques posibles:

1. Si deseas manejar una cantidad variable/desconocida/no acotada de
telefonos.

Contactos( idContacto, datosContacto)
Telefonos( idContacto, telefono)

Si el Contacto tiene 10 telefonos, entonces en la tabla Telefonos hay 10
filas para mismo idContacto. La clave primaria de Telefonos es


{idContacto,
telefono}

2. Si deseas manejar una cantidad fija/maxima de telefonos.

Puedes hacer un diseño menos normalizado y colocar columnas para los
telefonos en la tabla de Contactos. Supongamos que admites que cada


contacto
tendrá un máximo posible de 5 telefonos, entonces podrias hacer:

Contactos (idContacto, datosContacto, telefono1, telefono2, telefono3,
telefono4, telefono5)


Por supuesto que hay que considerar si el objeto Telefono es una entidad
fuerte (por tqanto existe por sí misma) o es una entidad débil (solamente
existe si hay un contacto asociado). También debes considerar el tipo de
acceso quye necesitas.

a) Si necesitas accesar a traves del telefono, la opción 1 es mejor.
b) Si necesitas accesar por contacto únicamente, la opción 2 es muy


cómoda.

saludos
gux


Gustavo Larriera, MVP-SQL, MCSE
Uruguay LatAm
Este mensaje se proporciona "COMO ESTA" sin garantias y no otorga ningun
derecho / This posting is provided "AS IS" with no warranties, and confers
no rights.
"Diego F." wrote in message
news:
> No entiendo muy bien el planteamiento. La tabla 2 es lo que no entiendo.
> Para que sea más sencillo explicarse, voy a ejemplificar lo que quiero
> hacer.
>
> Supongamos que estoy haciendo una aplicación de agenda, para almacenar
> contactos y sus teléfonos. La tabla 1 sería la tabla "Teléfonos", que
> simplemente tendría números de teléfono. La tabla 3 sería la tabla
"Agenda",
> donde cada entrada tendría el nombre del contacto y varios números de
> teléfono. Esa es la dificultad. Según tu código, la tabla "Teléfonos"
sería
> la tabla 2. ¿Es eso lo que se conseguiría con las tablas que has puesto?
>
>
> Saludos,
>
> Diego F.
>
> "Gustavo Larriera [MVP SQL]" escribió en el
> mensaje news:%
> > Tabla 1
> > ObjetoSimple (idObjetoSimple, columnaInt, columnaString, columnaFloat)
> > PK: {idObjetoSimple}
> >
> > Tabla 2
> > ColeccionObjetoSimple (idObjetoColeccion, idObjetoSimple)
> > PK: {idObjetoColeccion, idObjetoSimple}
> > FK: {idObjetoSimple} --> ObjetoSimple (idObjetoSimple)
> >
> > Tabla 3
> > Objeto3 (idObjeto, columnaInt, columnaFloat, idObjetoColeccion)
> > PK: {idObjeto}
> > FK: {idObjetoColeccion} --> ColeccionObjetoSimple (idObjetoColeccion)
> >
> > Gustavo Larriera, MVP-SQL, MCSE
> > Uruguay LatAm
> > Este mensaje se proporciona "COMO ESTA" sin garantias y no otorga


ningun
> > derecho / This posting is provided "AS IS" with no warranties, and
confers
> > no rights.
> > "Diego F." wrote in message
> > news:
> > > No entiendo bien a que te refieres con "deshidratar". Te cuento los
> > objetos
> > > que tengo a ver si me puedes ayudar.
> > >
> > > El primero objeto tiene campos simples: int, string y float.
> > > El segundo objeto es una colección de objetos del primer tipo.
> > > El tercer objeto tiene int, float y un objeto del tipo 2 (la
colección).
> > >
> > > ¿Cómo meterías esta información en tablas?
> > >
> > > Gracias por la ayuda.
> > >
> > >
> > > Saludos,
> > >
> > > Diego F.
> > >
> > > "Gustavo Larriera [MVP SQL]" escribió en


el
> > > mensaje news:
> > > > Una táctica es que deshidrates tus objetos C# a una representación
> > > > relacional, para poder persistirlos en tablas de la base de datos.
> > Deberás
> > > > representar cada objeto C# en una estructura de fila de tabla
> relacional
> > > (o
> > > > más de una tabla, según la complejidad de tu diseño).
> > > >
> > > > La opción que te dice Maxi es adecuada solamente si deseas


persistir
> los
> > > > objetos, luego volverlos a rehidratar en C# y procesarlos.
> > > >
> > > > Pero dices que solamente deseas ir en una dirección: Pasarlos de
> objetos
> > > C#
> > > > a entidades relacionales en la base para consultar --obviamente--
> según
> > el
> > > > modelo relacional.
> > > >
> > > > Gustavo Larriera, MVP-SQL, MCSE
> > > > Uruguay LatAm
> > > > Este mensaje se proporciona "COMO ESTA" sin garantias y no otorga
> ningun
> > > > derecho / This posting is provided "AS IS" with no warranties, and
> > confers
> > > > no rights.
> > > > "Diego F." wrote in message
> > > > news:
> > > > > A ver si consigo ser más claro.
> > > > >
> > > > > Necesito que los objetos que uso en una aplicación C# se


almacenen
> en
> > > una
> > > > > tabla de SQL Server para luego poder hacer consultas. No


necesito
> que
> > se
> > > > > vuelvan a convertir en objetos ya que no los volveré a utilizar.
> > > > >
> > > > > Saludos,
> > > > >
> > > > > Diego F.
> > > > >
> > > > >
> > > > > "Maximiliano D. A." escribió en


el
> > > mensaje
> > > > > news:
> > > > > > Hola, no entiendo bien lo que buscas!! si queres guardar


objetos
o
> > > > > entidades
> > > > > > en .NET podrias usar Serializacion lo cual lo genera en un
XML!!!
> > > ahora
> > > > no
> > > > > > entiendo bien cual es el objetivo final de tu pregunta,


podrias
> ser
> > un
> > > > > poco
> > > > > > mas preciso?
> > > > > >
> > > > > > Gracias
> > > > > >
> > > > > > "Diego F." escribió en el mensaje
> > > > > > news:eneq$
> > > > > > > Hola, estoy haciendo una aplicación en .NET y necesito que


los
> > > objetos
> > > > > que
> > > > > > > uso se puedan almacenar en una base de datos (SQL Server
2000).
> > > ¿Cuál
> > > > es
> > > > > > la
> > > > > > > forma más sencilla de hacerlo? ¿Tendré que hacer métodos


para
ir
> > > > > guardando
> > > > > > > campo a campo en ambos sentidos?
> > > > > > >
> > > > > > >
> > > > > > > Saludos,
> > > > > > >
> > > > > > > Diego F.
> > > > > > >
> > > > > > >
> > > > > >
> > > > > >
> > > > >
> > > > >
> > > >
> > > >
> > >
> > >
> >
> >
>
>


Respuesta Responder a este mensaje
#9 Gustavo Larriera [MVP SQL]
22/06/2004 - 16:45 | Informe spam
"Diego F." wrote in message
news:
Muchas gracias. Si no te importa, voy a ponerte otro ejemplo que es el que
estoy manejando realmente. Supongamos un restaurante, y queremos manejar
información de pedidos de cada mesa (comandas). Tendría también 3 tablas:

La aplicación maneja 3 objetos: un objeto Plato, con información de los
platos del restaurante, un objeto ColecciónPlatos, que son los platos que
pide una determinada mesa, y finalmente el objeto comanda, con los datos


de
la mesa (número, fecha,...) y una ColecciónPlatos.

¿Serían así las tablas?

- Tabla plato: id_plato, desc_plato, precio
- Tabla comanda: id_comanda, mesa
- Tabla PlatosComanda: id_plato, id_comanda

La duda que tengo es si así sería suficiente o hay que añadir algún campo


a
la tabla Comanda que sea una clave externa de la tabla PlatosComanda.



Puedes poner una clave externa en PlatosComanda (id_comanda) que referencia
a Comanda y otra clave externa PlatosComanda (id_plato) que referencia a
Platos.


Y ya para acabar, ¿considerarías el precio total de una comanda en el


diseño
o lo tomarías como un cálculo a partir de los datos de la tabla? Si es el
último caso, ¿cómo sería esa consulta SLQ?



El precio total lo calcularía. La consulta debes hacerla usando SELECT
SUM(precio) ... estudia los detalles en cualquier material de SQL, es
bastante sencillo de entender.


Gracias por todo.


Saludos,

Diego F.



saludos
gux
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida