none
Llave compuesta en SQL Server RRS feed

  • Pregunta

  • Buenas tardes un gran favor ayuda on este tema no puedo crear dos llaves primarias en sql server me sale este mensaje

    osea es una llave compuesta 

    agradezco que alguien me ayude

    Roberto

    lunes, 2 de marzo de 2020 16:22

Respuestas

  • Hola Roberto C. Melgar:

    CREATE TABLE [dbo].[table1](
    	[id] [int] NOT NULL PRIMARY KEY,
    	[nombre] [varchar](100) NULL
    	)
    GO
    CREATE TABLE [dbo].[table2](
    	[id] [int] NOT NULL PRIMARY KEY,
    	[id2] [int] NULL
    	)
    GO
    
    ALTER TABLE [dbo].[table2]  WITH CHECK ADD  CONSTRAINT [FK_Tbl2_tbl1] FOREIGN KEY([id])
    REFERENCES [dbo].[table1] ([id])
    GO
    
    ALTER TABLE [dbo].[table2] CHECK CONSTRAINT [FK_Tbl2_tbl1]
    GO

    Esto sería lo que necesitas para realizar esto, pero como eres capaz de llegar a los diagramas, entonces, también puedes apoyarte en el managment studio para que lo haga el. Create table..... y con las dos tablas creadas pero solo con la clave primaria.

    CREATE TABLE [dbo].[table1](
    	[id] [int] NOT NULL PRIMARY KEY,
    	[nombre] [varchar](100) NULL
    	)
    GO
    CREATE TABLE [dbo].[table2](
    	[id] [int] NOT NULL PRIMARY KEY,
    	[id2] [int] NULL
    	)
    GO
    Abro el diseñador de diagramas.

    Con las dos tablas agregadas, haces click en el id de Table1, hasta que te aparezca una marca en la columna de la llave primaria.

    Arrastras una vez tengas la fila seleccionada hasta la otra tabla (verás como te crea una linea de puntos). Y sueltas encima.

    Le das el nombre a la relación, que unirá id con id de cada una de las tablas. y aceptas.

    Vuelves a aceptar y verás como te crea lo solicitado.

    Ahora guardas el diagrama. Te presenta el mensaje de advertencia de que las tablas se van a modificar.

    Le dices que si.

    Y ya esta creado, pero lo mejor es que ahora te puedes aprovechar, de que el mismo Management Studio hace los scripts por tí.

    Desde el explorador de objetos, con las tablas generadas. Pulsas el botón derecho 

    lunes, 2 de marzo de 2020 21:00

Todas las respuestas

  • Hola Roberto C.Melgar:

    create table table2 (id int, 
    id2 int,
    primary key (id,id2)
    );
    go
    Así lo puedes hacer.

    lunes, 2 de marzo de 2020 16:34
  • Solo se puede crear una clave primaria, por tabla, pero puede ser una clave compuesta, si era el objetivo.

    También puedes crear una clave primaria, y luego claves unique.

    create table table2 (id int primary key,
    id2 int,
    unique (id,id2)
    )
    go
    

    Primar key

    https://docs.microsoft.com/es-es/sql/relational-databases/tables/create-primary-keys?view=sql-server-ver15

    Unique

    https://docs.microsoft.com/es-es/sql/relational-databases/tables/create-unique-constraints?view=sql-server-ver15

    lunes, 2 de marzo de 2020 16:39
  • Si, Javi Gracias ya lo logre hacer pero lo que quiero es hacer una relacion con la otra tabla una relacion de uno a uno para llegar a esta imagen

    pero solo consigo esta imagen

    Como puedo resolverlo por favor y gracias de nuevo

    Roberto

    lunes, 2 de marzo de 2020 18:35
  • Para lograr la relación de uno a uno, la llave primaria de la tabla extensión (t_prueba_extension en mi caso) debe ser llave foranea al mismo tiempo, un ejemplo rápido sería:

    CREATE TABLE PRUEBA.T_PRUEBA
    (SECUENCIAL INT
     PRIMARY KEY, 
     COLUMA1    NVARCHAR(200)
    )
    CREATE TABLE PRUEBA.T_PRUEBA_EXTENSION
    (SECUENCIAL INT
     PRIMARY KEY, 
     COLUMNA2   NVARCHAR(200), 
     CONSTRAINT FK_EXTENSION_T_PRUEBA FOREIGN KEY(SECUENCIAL) REFERENCES PRUEBA.T_PRUEBA(SECUENCIAL)
    );


    lunes, 2 de marzo de 2020 20:16
  • es imposible hacerlo de la forma que lo estoy queriendo hacer entonces

    Gracias

    Roberto

    lunes, 2 de marzo de 2020 20:36
  • Hola Roberto C. Melgar:

    CREATE TABLE [dbo].[table1](
    	[id] [int] NOT NULL PRIMARY KEY,
    	[nombre] [varchar](100) NULL
    	)
    GO
    CREATE TABLE [dbo].[table2](
    	[id] [int] NOT NULL PRIMARY KEY,
    	[id2] [int] NULL
    	)
    GO
    
    ALTER TABLE [dbo].[table2]  WITH CHECK ADD  CONSTRAINT [FK_Tbl2_tbl1] FOREIGN KEY([id])
    REFERENCES [dbo].[table1] ([id])
    GO
    
    ALTER TABLE [dbo].[table2] CHECK CONSTRAINT [FK_Tbl2_tbl1]
    GO

    Esto sería lo que necesitas para realizar esto, pero como eres capaz de llegar a los diagramas, entonces, también puedes apoyarte en el managment studio para que lo haga el. Create table..... y con las dos tablas creadas pero solo con la clave primaria.

    CREATE TABLE [dbo].[table1](
    	[id] [int] NOT NULL PRIMARY KEY,
    	[nombre] [varchar](100) NULL
    	)
    GO
    CREATE TABLE [dbo].[table2](
    	[id] [int] NOT NULL PRIMARY KEY,
    	[id2] [int] NULL
    	)
    GO
    Abro el diseñador de diagramas.

    Con las dos tablas agregadas, haces click en el id de Table1, hasta que te aparezca una marca en la columna de la llave primaria.

    Arrastras una vez tengas la fila seleccionada hasta la otra tabla (verás como te crea una linea de puntos). Y sueltas encima.

    Le das el nombre a la relación, que unirá id con id de cada una de las tablas. y aceptas.

    Vuelves a aceptar y verás como te crea lo solicitado.

    Ahora guardas el diagrama. Te presenta el mensaje de advertencia de que las tablas se van a modificar.

    Le dices que si.

    Y ya esta creado, pero lo mejor es que ahora te puedes aprovechar, de que el mismo Management Studio hace los scripts por tí.

    Desde el explorador de objetos, con las tablas generadas. Pulsas el botón derecho 

    lunes, 2 de marzo de 2020 21:00
  • Que amable, muchas gracias.ahora si quedo entendido.gracias a ambos por la amabilidad ojala me siga ayudando a medida que voy avanzando.

    Gracias.

    Roberto

    lunes, 2 de marzo de 2020 21:10