elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


  Mostrar Mensajes
Páginas: [1]
1  Programación / Bases de Datos / modificar llave primaria desde un programa en: 18 Julio 2012, 02:26 am
hola amigos, necesitaria saber algo.
tengo un programa en el cual uso una base de datos sql server.
la base de datos tiene 5 tablas, pero digamos que tiene en un momento una tabla llamada personas y otras dos que estan conectadas con esta. el tema es que desde mi aplicacion quiero cambiar el valor de la llave primaria DNI en cualquier tabla y quisiera que en primer lugar me deje hacerlo, y en segundo lugar que se actualice el valor de la llave primaria en todas las tablas que dependen de la tabla maestro del dni.

estuve investingando pero esto no estoy seguro de como hacerlo
algunos mensajes que me parecieron interesantes:

Citar
Realmente no se puede cambiar de forma directo.

Lo que tendrias que hacer es crear nuevamente en labla padre nuevamente el registro y luego en la tabla hija. finalmente eliminar de las dos tablas el registro viejo.

La otra opción es eliminar primero el constraint que une las dos tablas, hacer el update en las dos tablas y volver a crear el contraint.

Citar
Si hay "dependencias" de la clave primaria, cada motor reaccionará de manera diferente ante la situación. En el caso particular de interbase, no te deja eliminar la clave primaria, no por el riesgo de perdida de información que has mencionado, sino porque las llaves foraneas no pueden quedar huerfanas, en el sentido de que no tienen a donde apuntar.

Por ello, es necesario que primero borres todas las llaves foraneas, luego la llave primaria, crees la nueva y después crees las nuevas llaves foraneas (si existen).

Aprovecho para comentar también que una llave primaria puede eliminarse no solo con su nombre (drop constraint), pero también con la instrucción:
Código SQL [-]
Alter table nombre_tabla drop primary key;

Por último, motores como Oracle han introducido alguna forma de eliminar automáticamente las dependencias. En el caso específico de Oracle la instrucción es:

Código SQL [-]
Alter table nombre_tabla drop primary key cascade constraints;

Hasta luego.


Citar
Tengo una duda respecto a la instrucción que habeis puesto antes.
Tengo una tabla en paradox con una clave primaria puesta que quiero modificar.
Si esta tabla tuviera un indice secundario sabría que su nombre sería por ej 'idescripcion' para poder buscar la descripcion pero que nombre tiene una clave primaria?

ALTER TABLE "TABLA" DROP CONSTRAINT "CLAVE PRIMARIA"

de esta instrucción puedo poner

"Tabla" el nombre de mi tabla Tabla.Db
Pero en "Clave primaria"? mmm esto no lo comprendo

Muchas gracias

Citar
si pero tb tendrias q actualizar las tablas a las cuales esta relacionada

Citar

You don't have to give ON DELETE CASCADE or ON UPDATE CASCADE to foreign key. Basically,
this is given on the primary key to say that if the record (in primary key table) is deleted or updated,
reflect the changes in all the tables where the primary key table is referenced via foriegn key.
references Alumnos(DNI) ON UPDATE CASCADE ON DELETE CASCADE

esta es la informacion que he eonctrado en la web, pero no estoy seguro de como hacerlo ya que osy nuevo en esto.

mi codigo de las tablas


Código:

create table Localidades(
codLocalidad int primary key not null identity(1,1),
Localidad nchar (50) not null,
Provincia nchar (50) not null
)

go

create table Personas(
DNI int primary key not null,
Nombre nchar (50) not null,
Apellido nchar (50) not null,
codLocalidad int not null,      
constraint FK_Personas1 foreign key (codLocalidad) references Localidades(codLocalidad)
)

go

create table Capacitaciones(
codCapacitacion char (5) not null,
NombreCapacitacion  nchar (50) not null,
FechaInicio smalldatetime,
FechaFin smalldatetime,
constraint PK_Capacitacion1 primary key(codCapacitacion)
)


go

create table Capacitacion_Por_Persona(
codCapacitacion char (5) not null,
DNI int not null,
constraint PK_Capacitacion primary key(codCapacitacion,DNI),

constraint FK_Capacitacion_Por_Persona1 foreign key (codCapacitacion) references Capacitaciones(codCapacitacion),
constraint FK_Capacitacion_Por_Persona2 foreign key (DNI) references Personas(DNI)
)



yo quisiera desde mi programa cambiar el dni en cualquier tabla y si es llave primaria en dicha tabla o no, de cualquier forma que se actualice. agradeceria su ayuda gentilmente

como lo puedo hacer?



2  Programación / Bases de Datos / Re: algo básico de sqlserver en: 19 Junio 2012, 22:52 pm
ah muchas gracias por esa informacion, pero segun observe en esas dos tablas hay una clave foranea. pero en mi ejemplo no, en el ejemplo que mostre seria algo asi


las claves primarias estan marcadas con un cuadrado. mi pregunta es si cuando hago la relacion deberia hacerlo de esta forma?

Código:
create table PERSONAS
(
num_persona int primary key not null,
nombre char(50) not null,
)

go

create table JUEGOS
(
num_juego int primary key not null,
nombre char(50) not null,
)

go

asi

Citar
create table JUEGOXPEROSNA
(
num_persona int primary key not null,
num_juego int primary key not null,

num_persona REFERENCES PERSONAS(num_persona),
num_juego REFERENCES JUEGOS(num_juego)
)


o asi

Citar
create table JUEGOXPEROSNA
(
num_persona int primary key not null,
num_juego int primary key not null,

constraint FK_JXP1 foreign key (num_persona) REFERENCES PERSONAS(num_persona),
constraint FK_JXP2 foreign key (num_juego) REFERENCES JUEGOS(num_juego)
)

3  Programación / Bases de Datos / algo básico de sqlserver en: 19 Junio 2012, 00:04 am
estoy aprendiendo sql server de a poco por mi cuenta, estoy trabado con unas dudas, es que cuando creo unas tablas necesito relacionarlas y no estoi seguro de como hacer las relaciones. se que debo usar la palabra references pero no se en que tabla o en que parte puedo poner el codigo de la relacion.

si tengo la tabla "personas" y la tabla "juegos". pongo los campos de cada una

create table PERSONAS
(
num_persona int primary key not null,
nombre char(50) not null,
)

go

create table JUEGOS
(
num_juego int primary key not null,
nombre char(50) not null,
)

luego de eso voy a crear una tabla auxiliar para obtener el juego relacionado a cada persona, porque una persona puede tener un solo juego en este caso.

create table JUEGOXPEROSNA
(
num_persona int primary key not null,
num_juego int primary key not null,
)

tengo mas tablas pero no puedo avanzar ya que necesito relacionar "personas" con "juegos" quiero hacerlo mediante codigo pero no se como hacerlo en este caso. solo se que debo usar references de un campo en una tabla a el mismo campo en otra, pero no se ni donde pongo la referencia ni como hacerlo exactamente. agradeceria si me pueden dar 1 mano. gracias a todos



Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines