none
Duda sobre tipos de relaciones con SQL Server 2008 Express desde Visual Studio 2008 Pro. RRS feed

  • Pregunta

  • Hola amigos,

    Estoy liado con una base de datos en SQL Server desde la interfaz de Visual Studio 2008 Professional y me surge la siguiente duda:

    Tengo dos tablas que deben relacionarse en una relación 1:1 y éstas son:

    Tabla Vehículo
    Tabla TarjetaRepostaje


    Es decir, un vehículo que sólo puede disponer (en esta situación) de una tarjeta de gasolina para su respostaje, y una tarjeta relacionada con un sólo vehículo.

    ¿Cómo podría representar dicha relación en SQL Server 2008 Express desde la interfaz de Visual Studio 2008 Prof.?

    He visto que las relaciones que hace mayormente son 1:M. Con los típicos símbolos de la llave e infinito. ¿Sería el mismo tipo de relación?

    Gracias de antemano.

    Saludos.
    Francisco J.
    lunes, 17 de agosto de 2009 6:03

Respuestas

  • hola

    Una consulta porque editas la db desde el VS, y no lo haces desde el Sql Server Management Studio, que es el IDE especifico para el SQL Server, es ams simple trabar desde alli, es ams puedes crearte diagramas con tus tablas y ver tu dominio mas simple y las relaciones

    El VS te permite editar la db, pero no esta especializado en ello, es una utilidad pero para cosas simples, te recomiendo uses la tool indicada en este caso el IDE de sql server express, el Management Studio



    Para la realacion puedes crear una relacion ente claves de las tablas, esto si sera una relacion 1:1.

    algo asi:

    Vehiculo
    idvehiculo PK

    Tarjeta
    idvehiculo PK FK
    tarjetacodigo

    o sea la relacion seria Vehiculo.idvehiculo == Tarjeta.idvehiculo

    las dos claves de tablas se relacionan esto si forma una union 1:1, çy por supuesto luego agregar una campo que sera algun codigo de la tarjeta, pero este es mas bien informativo para asl busquedas nada ams, podrias hacerlo unique si quieres y agregalre algun indice si son muchas las busquedas, pero la relacion es de PK a PK


    Nota: ten cuaidado cuando aarastras la relaciones hacerlo en els entido correcto, ay que cuando insertes debes ahcerlo primero creando el vehiculo, y luego la tarjeta, la cuals e creara con el mismo id que el vehiculo, o sea esta pk no es incremental, sino que sua la misma del vehiculo.

    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marcado como respuesta GSNet lunes, 17 de agosto de 2009 22:04
    lunes, 17 de agosto de 2009 15:10
  • hola,

    la verdad es muy raro lo que comentas del Management Studio del SQl Express, la verdad yo lo uso bastante y nunca he tenido ese problema
    estas seguro que usas correctamente el IDe de SQL Server, mira quee s muy simple de utilizar, me suen amuy raro este problema, por ahi podrias investigar un poco a ver si son correctas las operaciones que realzias en este.

    bien por otro lado lo que propones es correcto si tienes relacionado el vehiculo con als tarjetas en una relacion 1:1 entonces ya sea que vincules 1:M los respostajes, puedes hayar la relacion de forma idendirecta como bien comentas.

    ahora bien la pregunta seria estos respostajes, vendadramente se unen a los vehiculos?
    o sea si necesitas sabes los respostajes  por tarjeta, por ahi analizaria si no es esta la que se debe unir a la entidad respostajes  y que el vehiculo al asociarse a las tarjetas obtenga que respostajes  tiene.
    digo este planteo lo hago en base a lo que pineso del dominio, por ahi me equivoque, sino es asi el planteo que ahces es correcto


    Nota: por cierto que son los respostajes? la verdad no me suenan asi escrito

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marcado como respuesta GSNet lunes, 17 de agosto de 2009 22:04
    lunes, 17 de agosto de 2009 19:30
  • aahh ok si ese cuadro lo tengo

    consulta cuando realizas las modificaciones en als tablas, especialemtne agregas relaciones y demas acciones

    - primero realizalos de a poco, o se primero crea las claves, y guarda, luego las realciones y ve guardando.
    esto es apra dientificar donde se produce los fallos y estar mas acotado en cuanto al ambito del error
    cuando aplcias cambios sql server los aplcia todo en orden pero todos, por eso de este punto

    - ten en cuanta que si creas una relacion no tener datos en als tablas o quee stas cumplan la relacion o constraint que estas creando, o sea de ser posible limpia las tablas de datos basura ya que al guardar una relacion sql aplica la misma y no deja guardarla ahsta tanto todos los datos cumplan con la regla

    o se por ejemplo si tenias un campo que permite nulos, y lo editas sacandole esta opcion, para que sea requerido, si aun tiene datos con valores nulos no podras aplicar el cambio hasta tanto no elimines o actualices estos registro

    como veras debes controlar los datos antes de realizar cambiso en la estructura del sql server, pero es correcto el mensaje que obtienes, solo revisa que los datos cumplen con el cambios que quieres hacer.


    si seguramente como te decia Vs no esta especializado en el menejo a datos, mas bien es una utilidad que por ahi puedes suar para ahcer alguna consulta rapida y esas cosas, pero para le edicion serial lo mejor es el SQl Management Studio, ya que este sise complemeta con el motor de base de datos.
    el del Vs es solo una utilidad pensada para por ahi al querer hacer una consulta, no tener que ir y abrir otro entorno, pero no para una administracion de la DB


    con respecto a las relaciones lo que hice solo fue un planteo, en realidad analiza tu dominio, el negocio y modela en abse a este, o sea ve como es en la realidad como se asocian los objetos como interactuan , si alli ves que los repostaje se cuentan en la tarjeta, y estas se asignan a un vehiculo bueno, asi es como debes modelarlo.
    en realidad la clave primeria con vehiculo es entre la tarjeta y el vehiculo, los repostaje son otra cosa, es ams podrias ahcer algo asi tambien


    Vehiculo
    idvehiculo PK

    Tarjeta
    idtarjeta PK FK
    tarjetacodigo

    o sea la relacion seria Vehiculo.idvehiculo == Tarjeta.idtarjeta

    como veras no simpre los nombre deben coincidir, pero si los valores y las relaciones.

    Tarjeta
    idtarjeta PK
    tarjetacodigo

    Repostaje
    idrepostaje PK  (campos secuencial)
    idtarjeta FK
    .
    .

    se uniria Tarjeta.idtarjeta == Repostaje.idtarjeta

    solo tienes una clave unica secuancial para todos los repostaje, es la tendencia que se viene, jeje, si la de casi no usas claves compuestas.
    me entenderas si usas un ORM, o entity framework


    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marcado como respuesta GSNet lunes, 17 de agosto de 2009 22:04
    lunes, 17 de agosto de 2009 21:40

Todas las respuestas

  • hola

    Una consulta porque editas la db desde el VS, y no lo haces desde el Sql Server Management Studio, que es el IDE especifico para el SQL Server, es ams simple trabar desde alli, es ams puedes crearte diagramas con tus tablas y ver tu dominio mas simple y las relaciones

    El VS te permite editar la db, pero no esta especializado en ello, es una utilidad pero para cosas simples, te recomiendo uses la tool indicada en este caso el IDE de sql server express, el Management Studio



    Para la realacion puedes crear una relacion ente claves de las tablas, esto si sera una relacion 1:1.

    algo asi:

    Vehiculo
    idvehiculo PK

    Tarjeta
    idvehiculo PK FK
    tarjetacodigo

    o sea la relacion seria Vehiculo.idvehiculo == Tarjeta.idvehiculo

    las dos claves de tablas se relacionan esto si forma una union 1:1, çy por supuesto luego agregar una campo que sera algun codigo de la tarjeta, pero este es mas bien informativo para asl busquedas nada ams, podrias hacerlo unique si quieres y agregalre algun indice si son muchas las busquedas, pero la relacion es de PK a PK


    Nota: ten cuaidado cuando aarastras la relaciones hacerlo en els entido correcto, ay que cuando insertes debes ahcerlo primero creando el vehiculo, y luego la tarjeta, la cuals e creara con el mismo id que el vehiculo, o sea esta pk no es incremental, sino que sua la misma del vehiculo.

    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marcado como respuesta GSNet lunes, 17 de agosto de 2009 22:04
    lunes, 17 de agosto de 2009 15:10
  • Hola Leandro, ante todo muchas gracias por tu respuesta.

    El tema es el siguiente, no uso SQL Server 2008 Express porque no sé porqué cada vez que hago algún cambio en el diagrama no me deja guardar ya que dice que no puedo modificar algo de las tablas. Y me da solo la opción de guardarlo como archivo de texto.

    En relación a lo expuesto he conseguido hacer la relación como comentas pero ahora me surge otro problema.

    Si hay una tabla tarjetas y otra coches con relación 1 a 1, cómo puedo almacenar los respostajes en una tabla, es decir, una tabla donde guarde el ID Del vehículo, el ID de la tarjeta, y el valor del respostaje.

    Se me ocurre que la tarjeta sólo se use para la relación con los vehículos y si quiero saber el montante total de respostajes de la tarjeta en cuestión, primero enlazar con los vehículos y luego cada vehículo con la tabla respostajes, ¿no? En resumen, si sé que el vehículo A ha realizado 50 respostajes, si el vehículo está relacionado con una determinada tarjeta, podría hacer un JOIN para obtener el número de respostajes realizado por dicha tarjeta, ¿verdad? Teniendo una relación 1 a 1 entre vehículo y tarjeta, y 1 a M entre vehículo y respostajes.

    ¿Podrías comentarme si mi visión está bien o podría llevarlo a cabo de una manera más acertada?

    Por cierto, en el IDE de Visual Studio, ¿cómo puedo poner que es unique la clave PK? Es que lo que hago es usar la Especificación de Identidad pero no sé si es lo mismo.

    Gracias.

    Saludos
    Francisco J.
    lunes, 17 de agosto de 2009 17:50
  • hola,

    la verdad es muy raro lo que comentas del Management Studio del SQl Express, la verdad yo lo uso bastante y nunca he tenido ese problema
    estas seguro que usas correctamente el IDe de SQL Server, mira quee s muy simple de utilizar, me suen amuy raro este problema, por ahi podrias investigar un poco a ver si son correctas las operaciones que realzias en este.

    bien por otro lado lo que propones es correcto si tienes relacionado el vehiculo con als tarjetas en una relacion 1:1 entonces ya sea que vincules 1:M los respostajes, puedes hayar la relacion de forma idendirecta como bien comentas.

    ahora bien la pregunta seria estos respostajes, vendadramente se unen a los vehiculos?
    o sea si necesitas sabes los respostajes  por tarjeta, por ahi analizaria si no es esta la que se debe unir a la entidad respostajes  y que el vehiculo al asociarse a las tarjetas obtenga que respostajes  tiene.
    digo este planteo lo hago en base a lo que pineso del dominio, por ahi me equivoque, sino es asi el planteo que ahces es correcto


    Nota: por cierto que son los respostajes? la verdad no me suenan asi escrito

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marcado como respuesta GSNet lunes, 17 de agosto de 2009 22:04
    lunes, 17 de agosto de 2009 19:30
  • Hola Leandro, gracias nuevamente.

    Te comento, un repostaje es cuando vas a echar combustible al coche, se dice que vas a respotar, quizás está más usado aquí y en otros lugares se conoce con algún nombre más genérico. En definitiva, es echarle combustible al coche.

    En cuanto a lo del IDE este es el tipo de error que me arroja.


    Image Hosted by ImageShack.us


    Por cierto, ¿porqué desde el IDE de VStudio no me deja agregar los nuevos datos de SQL Server tales como geographic, geometry y date o time?

    En cuanto a la relación es mejor como comentas, mediante la tarjeta, en ese caso, ¿si se asocia a la tarjeta ya no podría tener la clave primaria como IDVehículo no? Sino que tendría que tener otra clave para asociarla con los repostajes no?

    Gracias de antemano.

    Saludos.
    Francisco J.
    lunes, 17 de agosto de 2009 20:44
  • aahh ok si ese cuadro lo tengo

    consulta cuando realizas las modificaciones en als tablas, especialemtne agregas relaciones y demas acciones

    - primero realizalos de a poco, o se primero crea las claves, y guarda, luego las realciones y ve guardando.
    esto es apra dientificar donde se produce los fallos y estar mas acotado en cuanto al ambito del error
    cuando aplcias cambios sql server los aplcia todo en orden pero todos, por eso de este punto

    - ten en cuanta que si creas una relacion no tener datos en als tablas o quee stas cumplan la relacion o constraint que estas creando, o sea de ser posible limpia las tablas de datos basura ya que al guardar una relacion sql aplica la misma y no deja guardarla ahsta tanto todos los datos cumplan con la regla

    o se por ejemplo si tenias un campo que permite nulos, y lo editas sacandole esta opcion, para que sea requerido, si aun tiene datos con valores nulos no podras aplicar el cambio hasta tanto no elimines o actualices estos registro

    como veras debes controlar los datos antes de realizar cambiso en la estructura del sql server, pero es correcto el mensaje que obtienes, solo revisa que los datos cumplen con el cambios que quieres hacer.


    si seguramente como te decia Vs no esta especializado en el menejo a datos, mas bien es una utilidad que por ahi puedes suar para ahcer alguna consulta rapida y esas cosas, pero para le edicion serial lo mejor es el SQl Management Studio, ya que este sise complemeta con el motor de base de datos.
    el del Vs es solo una utilidad pensada para por ahi al querer hacer una consulta, no tener que ir y abrir otro entorno, pero no para una administracion de la DB


    con respecto a las relaciones lo que hice solo fue un planteo, en realidad analiza tu dominio, el negocio y modela en abse a este, o sea ve como es en la realidad como se asocian los objetos como interactuan , si alli ves que los repostaje se cuentan en la tarjeta, y estas se asignan a un vehiculo bueno, asi es como debes modelarlo.
    en realidad la clave primeria con vehiculo es entre la tarjeta y el vehiculo, los repostaje son otra cosa, es ams podrias ahcer algo asi tambien


    Vehiculo
    idvehiculo PK

    Tarjeta
    idtarjeta PK FK
    tarjetacodigo

    o sea la relacion seria Vehiculo.idvehiculo == Tarjeta.idtarjeta

    como veras no simpre los nombre deben coincidir, pero si los valores y las relaciones.

    Tarjeta
    idtarjeta PK
    tarjetacodigo

    Repostaje
    idrepostaje PK  (campos secuencial)
    idtarjeta FK
    .
    .

    se uniria Tarjeta.idtarjeta == Repostaje.idtarjeta

    solo tienes una clave unica secuancial para todos los repostaje, es la tendencia que se viene, jeje, si la de casi no usas claves compuestas.
    me entenderas si usas un ORM, o entity framework


    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marcado como respuesta GSNet lunes, 17 de agosto de 2009 22:04
    lunes, 17 de agosto de 2009 21:40
  • Muchísimas gracias Leandro, voy a intentar modelarlo todo de nuevo.

    Voy a abrir otro hilo para preguntar algo sobre UNIQUE restricciones.

    Saludos.
    Francisco J.
    lunes, 17 de agosto de 2009 22:04
  • Prueba en "Opciones" - > "Desarrollador" -> "Permitir cambiar tablas". No se si es exactamente así porque no tengo el ordenador delante. Espero haber sido de ayuda.
    lunes, 24 de marzo de 2014 23:13