Foro oficial de SQL

ah bestia!!, es que en la tabla "Citas" tengo que meter los codigos de los pacientes y de los doctores, obvio que no salen datos porque no los he relacionado, jajajaj, que penita con ustedes, ya voy entendiendo, es que soy nuevo en esto del desarrollo de software y las bases de datos, jejeje, gracias!!!!!

Mmmm, pero no entiendo cual es la utilidad de la funcion "constraint", para que es?? porque tengo que indicarla?

ya entendí lo de llenar la tabla "Citas", jejeje, es que tengo que colocar yo los codigos para relacionar todo, jejeje.
 
ah bestia!!, es que en la tabla "Citas" tengo que meter los codigos de los pacientes y de los doctores, obvio que no salen datos porque no los he relacionado, jajajaj, que penita con ustedes, ya voy entendiendo, es que soy nuevo en esto del desarrollo de software y las bases de datos, jejeje, gracias!!!!!

Mmmm, pero no entiendo cual es la utilidad de la funcion "constraint", para que es?? porque tengo que indicarla?

ya entendí lo de llenar la tabla "Citas", jejeje, es que tengo que colocar yo los codigos para relacionar todo, jejeje.
constraint = restriccion

cuando dos tablas estan relacionadas, evita que se cometan errores en los datos (datos corruptos), en tu caso, por ejemplo, que metas el codigo de un doctor/paciente que no existe

asi mismo, dependiendo del constraint, evita por ejemplo que borres un doctor/paciente que tiene una cita programada, etc
 
  • Me gusta
Reacciones: 2 personas
jejejeje muy cierto!
?????

mmmm..........
pk= llave primaria
fk= llave foranea


:cool:

no es como obvio?? pero pues seria mejor un poco mas de profundidad y sapiensia al responder no???

arthvrian te contesto de la mejor manera q existe...
espero q tus dudas se hayan aclarado.. éxitos!

dejemos de hacer spam y dediquemonos a preguntar y responder, ¿bueno?

ayudando DE VERDAD al foro, el codigo seria el siguiente para Microsoft SQL 2005

Código:
CREATE TABLE epe..DOCTOR
(
doc_id int not null identity(1,1),
NOMBRE NVARCHAR(20),
CONSTRAINT PK_DOCTOR PRIMARY KEY (doc_id)
);

CREATE TABLE epe..PACIENTE
(
usr_id int not null identity(1,1),
NOMBRE NVARCHAR(20) NOT NULL,
CONSTRAINT PK_PACIENTE PRIMARY KEY (usr_id)
);


CREATE TABLE epe..CITA
(
DOCTOR_CODIGO int,
PACIENTE_CODIGO int,
CONSTRAINT FK_CITA_PACIENTE FOREIGN KEY (DOCTOR_CODIGO) REFERENCES PACIENTE(usr_id),
CONSTRAINT FK_CITA_DOCTOR FOREIGN KEY (PACIENTE_CODIGO) REFERENCES DOCTOR(doc_id),
CONSTRAINT PK_CITA PRIMARY KEY (DOCTOR_CODIGO,PACIENTE_CODIGO)
);
 
Oiga man Ivanzinho, no le de tan duro a liki, es una persona muy colaboradora... lo digo por experiencia ;)


CONSTRAINT:

Puede colocar restricciones para limitar el tipo de dato que puede ingresarse en una tabla. Dichas restricciones pueden especificarse cuando la tabla se crea por primera vez a través de la instrucción CREATE TABLE, o luego de crear la tabla a través de la instrucción ALTER TABLE.

Los tipos comunes de restricciones incluyen las siguientes:

- NOT NULL
- UNIQUE
- CHECK
- Clave primaria
- Clave externa

.... Una personal.... despues que pones CONSTRAINT pones PK_Y_UNA_DESCRIPCIO_QUE_SE_ASEMEJE, FK_Y_UNA_DESCRIPCIO_QUE_SE_ASEMEJE, UQ_Y_UNA_DESCRIPCIO_QUE_SE_ASEMEJE, etc.... el contraint es una restriccion que si intentas hacer algo en contra de el campo que tiene esa restriccion te envia el mensaje que le pusiste ... ejemplo "FK_****, PK_*****", etc... y ahi cuando leas sabras en que error has incurrido, y en en cuales campos especificamente de la tabla es que tienes el error ;)


SuerteX :)
 
?????

no es como obvio?? pero pues seria mejor un poco mas de profundidad y sapiensia al responder no???

dejemos de hacer spam y dediquemonos a preguntar y responder, ¿bueno?

ayudando DE VERDAD al foro, el codigo seria el siguiente para Microsoft SQL 2005

si nos dedicamos a preguntar menos cosas q están a un click en google se evita muuucho el spam, asi q usar google is thx antes de preguntar cualkier cosa.
 
Bueno busacndo y buscando no he encontrado un foro que se dedique solo a este tan comun lenguaje, digo comun por lo tan importante que es en nuestra sociedad. pues habro este foro para que compartamos todas nuestras inquietudes. buen provecho!!!
----------------------------------------------------------
Buenas noches a todos!
SERA que me pueden ayudar con esto ::
Actualmente inicie en la Universidad con SQL SERVER 2005, SOY PRINCIPIANTE EN ESTO DE PROGRAMACION, mi problemas es que tengo que hacer un ejercicio de ingreso , actualizacion y consultas de datos en una base de datos ya existente.
*La base de datos es sobre una tienda de libros
Primero tengo que insertar un nuevo libro llamado "x" e insertar el nombre del autor "XX".
para este punto la tabla se llama (titles) los campos respectivamente serian (title para el nombre del libro) -
para el nombre del autor tengo la tabla (authors) con los campos (au_lname - au_fname)
---------------------------------------------------------------------------------------------------------------------------
Ahora tengo que modificar el precio de los libros en un 8% tengo la tabla (titles) y su respectivo campo (price)
---------------------------------------------------------------------------------------------------------------------------
Ahora consultar los libros cuyos precios se encuentran entre 15 y 30 U$
--------------------------------------------------------------------------------------------------------------------------
Ahora me piden mostrar los autores que actualmente no tiene contrato.
Tengo la tabla authors y el campo (contract ) es bit false o true*
-----------------------------------------------------------------------------------------------------------------------------
les agradezco mucho
 
----------------------------------------------------------
Buenas noches a todos!
SERA que me pueden ayudar con esto ::
Actualmente inicie en la Universidad con SQL SERVER 2005, SOY PRINCIPIANTE EN ESTO DE PROGRAMACION, mi problemas es que tengo que hacer un ejercicio de ingreso , actualizacion y consultas de datos en una base de datos ya existente.
*La base de datos es sobre una tienda de libros
Primero tengo que insertar un nuevo libro llamado "x" e insertar el nombre del autor "XX".
para este punto la tabla se llama (titles) los campos respectivamente serian (title para el nombre del libro) -
para el nombre del autor tengo la tabla (authors) con los campos (au_lname - au_fname)
---------------------------------------------------------------------------------------------------------------------------
Ahora tengo que modificar el precio de los libros en un 8% tengo la tabla (titles) y su respectivo campo (price)
---------------------------------------------------------------------------------------------------------------------------
Ahora consultar los libros cuyos precios se encuentran entre 15 y 30 U$
--------------------------------------------------------------------------------------------------------------------------
Ahora me piden mostrar los autores que actualmente no tiene contrato.
Tengo la tabla authors y el campo (contract ) es bit false o true*
-----------------------------------------------------------------------------------------------------------------------------
les agradezco mucho


Y exactamente en que quiere que le ayudemos?? :rolleyes:


Suerte :)
 
Ayuda

Hola amigos necesito ayuda urgente para un proyecto q toy haciendo, la situacion es la siguiente tengo
tabla persona
(id persona,
nombre,
apellido,
direccion),

tabla cliente(
id persona "fk referencia de id persona de la tabla persona" (relacion de uno a uno),
rubro economico)

tabla empleado (id persona "fk referencia de id persona de la tabla persona" (relacion de uno a uno),
fecha ingreso,
user name,
password)

al introducir un cliente primero tengo q poner los datos comunes que estan en la tabla persona y despues ingresar el id que me genera en el cliente con los datos que faltan (2 inserciones) en este caso rubro economico, lo mismo para empleado

mi problema es el siguiente si yo quiero buscar un cliente pensaba en buscar los datos de las personas que esten relacionadas con la tabla cliente, lo mismo para buscar empleado las personas relacionadas con la tabla empleado

el problema biene cuando si un empleado biene a comprar a mi tienda, yo ya no deberia ingresar a esa persona porque ya esta en mi tabla persona solo deberia referenciarla a mi tabla cliente, pero al restringir la busqueda de cliente para que aparescan solo las personas que estan rlacionadas con la tabla cliente esa persona nunca va a aparecer, el mismo presenta si un cliente quiere trabajar en mi tienda.

Ahora si no restringo la buscada por relaciones tanto en la tabla cliente y empleado para buscar en cada caso, si una persona que es empleado quiere comprar en mi tienda lo va a encontrar pero como cree mi procedimiento almacenado que haga las dos inserciones las va a hacer, ademas al aparecer ya no me va a dejar crearlo pero para crear los demas atreibutos propios de cliente no se va a poder

la unica solucion que encuentro al problema es crear un procedimiento almacenado que al buscar un cliente o empleado solo lo busque en la tabla persona que no restrinja con relacion ni con cliente ni con empleado y si esa persona ya existe que solo me referecie su codigo a la tabla cliente o empleado segun sea el caso, pero si esa persona no existe que me realice las dos inserciones

espero haya sido lo mas expresible posible y pedirles por favor ayuda con este problema... Muchas gracias de antemano y saludos
 
Hola amigos necesito ayuda urgente para un proyecto q toy haciendo, la situacion es la siguiente tengo
tabla persona
(id persona,
nombre,
apellido,
direccion),

tabla cliente(
id persona "fk referencia de id persona de la tabla persona" (relacion de uno a uno),
rubro economico)

tabla empleado (id persona "fk referencia de id persona de la tabla persona" (relacion de uno a uno),
fecha ingreso,
user name,
password)

al introducir un cliente primero tengo q poner los datos comunes que estan en la tabla persona y despues ingresar el id que me genera en el cliente con los datos que faltan (2 inserciones) en este caso rubro economico, lo mismo para empleado

mi problema es el siguiente si yo quiero buscar un cliente pensaba en buscar los datos de las personas que esten relacionadas con la tabla cliente, lo mismo para buscar empleado las personas relacionadas con la tabla empleado

el problema biene cuando si un empleado biene a comprar a mi tienda, yo ya no deberia ingresar a esa persona porque ya esta en mi tabla persona solo deberia referenciarla a mi tabla cliente, pero al restringir la busqueda de cliente para que aparescan solo las personas que estan rlacionadas con la tabla cliente esa persona nunca va a aparecer, el mismo presenta si un cliente quiere trabajar en mi tienda.

Ahora si no restringo la buscada por relaciones tanto en la tabla cliente y empleado para buscar en cada caso, si una persona que es empleado quiere comprar en mi tienda lo va a encontrar pero como cree mi procedimiento almacenado que haga las dos inserciones las va a hacer, ademas al aparecer ya no me va a dejar crearlo pero para crear los demas atreibutos propios de cliente no se va a poder

la unica solucion que encuentro al problema es crear un procedimiento almacenado que al buscar un cliente o empleado solo lo busque en la tabla persona que no restrinja con relacion ni con cliente ni con empleado y si esa persona ya existe que solo me referecie su codigo a la tabla cliente o empleado segun sea el caso, pero si esa persona no existe que me realice las dos inserciones

espero haya sido lo mas expresible posible y pedirles por favor ayuda con este problema... Muchas gracias de antemano y saludos

Lo que estas haciendo segun veo esta mal.... todo es muy facil, pero al querer hacer referencia desde la tabla empleado a la tabla persona y desde la tabla cliente a personas pones todos los empleados como clientes y viceversa... asi que te acosejo que analices bien que es realmente lo que quieres hacer con esas tablas ;)


SuerteX :)
 
q tal laneros, tengo una duda boba, tengo un script en sql, y me salio una relacion d muchos a muchos, bueno cree la entidad para resolver este problema, hasta ahi normal..., estoy usando mysql, y la verdad no c q error tengo al declarar la FK, aca dejo el script, cualquier ayudita c les agradece
PHP:
CREATE TABLE pelicula (id_Pel SMALLINT NOT NULL,
 titulo VARCHAR(10),nacionalidad VARCHAR(10)
,productora VARCHAR(10),fecha DATE,
id_dire SMALLINT NOT NULL,INDEX(id_dire) )TYPE = INNODB;


ALTER TABLE pelicula
 ADD CONSTRAINT PK_Peli primary key (id_Pel);


CREATE TABLE  actor (id_Act SMALLINT)TYPE = INNODB;;

ALTER TABLE actor
 ADD CONSTRAINT PK_Act primary key (id_Act);


CREATE TABLE ap (id_Act SMALLINT,id_Peli SMALLINT,
INDEX (id_Act),INDEX (id_Peli)) TYPE = INNODB;


ALTER TABLE ap 
 ADD CONSTRAINT PK_AP primary  key (id_Act,id_Pel);


ALTER TABLE AP ADD CONSTRAINT FK_AP foreign  key (id_Act REFERENCES actor(id_Act)
, id_Pel REFERENCES pelicula(id_Pel));
 
q tal laneros, tengo una duda boba, tengo un script en sql, y me salio una relacion d muchos a muchos, bueno cree la entidad para resolver este problema, hasta ahi normal..., estoy usando mysql, y la verdad no c q error tengo al declarar la FK, aca dejo el script, cualquier ayudita c les agradece
PHP:
CREATE TABLE pelicula (id_Pel SMALLINT NOT NULL,
 titulo VARCHAR(10),nacionalidad VARCHAR(10)
,productora VARCHAR(10),fecha DATE,
id_dire SMALLINT NOT NULL,INDEX(id_dire) )TYPE = INNODB;


ALTER TABLE pelicula
 ADD CONSTRAINT PK_Peli primary key (id_Pel);


CREATE TABLE  actor (id_Act SMALLINT)TYPE = INNODB;;

ALTER TABLE actor
 ADD CONSTRAINT PK_Act primary key (id_Act);


CREATE TABLE ap (id_Act SMALLINT,id_Peli SMALLINT,
INDEX (id_Act),INDEX (id_Peli)) TYPE = INNODB;


ALTER TABLE ap 
 ADD CONSTRAINT PK_AP primary  key (id_Act,id_Pel);


ALTER TABLE AP ADD CONSTRAINT FK_AP foreign  key (id_Act REFERENCES actor(id_Act)
, id_Pel REFERENCES pelicula(id_Pel));


Su problema es este :

PHP:
ALTER TABLE ap 
 ADD CONSTRAINT PK_AP primary  key (id_Act,id_Pel);

No puedes tener dos PK en una tabla ;)


SuerteX :)
 
Por ahi 1 ;

ES
CONSTRAINT FK_NOMBRE FOREIGN KEY (...) REFERENCES ... (...)
Estas:
CONSTRAINT FK_NOMBRE FOREIGN KEY (... REFERENCES ... (...),... REFERENCES ... (...))

En tu caso saldria 2 FK si no me equivoco...
 
Puedes tener un PK, varios FK y varios References.... pero no varios PK, que ese es el caso tuyo al declarar el contraint del PK asi:




SuerteX :)

no se porque siguen o vuelven con lo mismo, una PK si se puede declarar asi y no son dos PK, es una PK compuesta, me cito a mi mismo de la pagina anterior

a mi me gusta todo por separado :p

CREATE TABLE matriculas2 (
nrc_matri INT NOT NULL,
estudiante INT NOT NULL);

ALTER TABLE matriculas2 ADD PRIMARY KEY (nrc_matri, estudiante);

ALTER TABLE matriculas2
ADD CONSTRAINT matriculas2_personas FOREIGN KEY (estudiante) REFERENCES personas (cedula);

ALTER TABLE matriculas2
ADD CONSTRAINT matriculas2_cursos FOREIGN KEY (nrc_matri) REFERENCES cursos (nrc);
aunque si lo necesitas todo junto

CREATE TABLE MATRICULAS2 (
NRC_MATRI INTEGER NOT NULL,
ESTUDIANTE INTEGER NOT NULL,
PRIMARY KEY(NRC_MATRI,ESTUDIANTE),
FOREIGN KEY (ESTUDIANTE) REFERENCES PERSONAS (CEDULA),
FOREIGN KEY (NRC_MATRI) REFERENCES CURSOS (NRC)
);
solo te faltaban los parentesis del foreign key

en cuanto al codigo, aqui esta

CREATE TABLE pelicula (
id_Pel SMALLINT NOT NULL,
titulo VARCHAR(10),
nacionalidad VARCHAR(10),
productora VARCHAR(10),
fecha DATE,
id_dire SMALLINT NOT NULL,
INDEX(id_dire) );

ALTER TABLE pelicula ADD CONSTRAINT PK_Peli primary key (id_Pel);

CREATE TABLE actor (
id_Act SMALLINT);

ALTER TABLE actor
ADD CONSTRAINT PK_Act primary key (id_Act);

CREATE TABLE ap (
id_Act SMALLINT,
id_Peli SMALLINT,
INDEX (id_Act),
INDEX (id_Peli));

ALTER TABLE ap ADD CONSTRAINT PK_AP primary key (id_Act, id_Peli);

ALTER TABLE AP ADD CONSTRAINT FK_AP_ACTOR foreign key (id_Act) REFERENCES actor(id_Act);
ALTER TABLE AP ADD CONSTRAINT FK_AP_PELICULA foreign key (id_Peli) REFERENCES pelicula(id_Pel);

el error, en la PK y la FK de la tabla AP la referencia era hacia la columna id_Pel, y en realidad es id_Peli

por otro lado las FK, aunque no se si se puedan dos al tiempo (que no creo), es mejor declararlas por separado, como en el ejemplo anterior
 

Los últimos temas