Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 22-01-2013
donpedro donpedro is offline
Miembro
 
Registrado: nov 2009
Posts: 102
Poder: 0
donpedro cantidad desconocida en este momento
Schema Designer

hola que Dios me los bendiga a todos....
estoy realizando un sistema en delphi 2009 con MySql... mi pregunta es.

tengo una tabla llamada tutor, y una tabla llamada estudiante,, donde cada estudiante depende de un tutor

quiero controlar, que si el usuario desea eliminar un tutor, que salga un mensaje de error de que dicho tutor no se puede eliminar ya que tiene un estudiante inscrito

como podria hacer eso sin tener que crear un schema designer....espero haberme explicado

gracias de antemano por su colaboracion...
Responder Con Cita
  #2  
Antiguo 22-01-2013
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.052
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Si usas cualquier base de datos relacional (firebird, mysql, postgresql, etc..) no tendrías que hacer nada porque el sistema te avisaría (suponiendo que hayas diseñado correctamente la base de datos)
Responder Con Cita
  #3  
Antiguo 22-01-2013
Avatar de ozsWizzard
ozsWizzard ozsWizzard is offline
Miembro
 
Registrado: may 2004
Ubicación: Murcia
Posts: 190
Poder: 21
ozsWizzard Va por buen camino
Y si quieres tenerlo controlado por aplicación... o interceptas la excepción o haces la select para ver que el "tutor" que tienes "estudiantes", en caso de que existan registros...

He de reconocer que no entiendo bien la pregunta, o es muy simple lo que preguntas o yo doy muchas cosas por hecho.
__________________
La Madurez se llama...
~~~Gaia~~~
Responder Con Cita
  #4  
Antiguo 22-01-2013
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 30
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Cita:
Empezado por ozsWizzard Ver Mensaje
[...] o haces la select para ver que el "tutor" que tienes "estudiantes", en caso de que existan registros...
El problema con esta opción, sobre todo cuando a la base de datos se conectan varios clientes, es que inmediatamente después de hacer un Select que trajera como resultado 0 estudiantes, en la base de datos otro usuario / aplicación podría agregarle estudiantes a ese tutor, justo antes de admitirse la orden de borrado.

Por ello es que siempre se recomienda controlar estas situaciones mediante integridad referencial a nivel de la base de datos, que es a lo que alude Casimiro. Es decir, diseñar bien las llaves externas ("foráneas") para impedir que un registro de tutor pueda ser eliminado si tiene relacionados registros de estudiantes.

Saludos.
Responder Con Cita
  #5  
Antiguo 22-01-2013
Avatar de ozsWizzard
ozsWizzard ozsWizzard is offline
Miembro
 
Registrado: may 2004
Ubicación: Murcia
Posts: 190
Poder: 21
ozsWizzard Va por buen camino
¡Correctísimo!

Hablaba de opciones, no de cuales son mejores o peores.

De todas formas, no siempre lo mejor es establecer una relación entre tablas, hay que examinar siempre que entorno te vas a encontrar (nº de usuarios a la vez, tipo de relación, gestión de bloqueos,...)

Pero vamos, a grosso modo tienes toda la razón.
__________________
La Madurez se llama...
~~~Gaia~~~
Responder Con Cita
  #6  
Antiguo 22-01-2013
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.052
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por Al González Ver Mensaje
Por ello es que siempre se recomienda controlar estas situaciones mediante integridad referencial a nivel de la base de datos, que es a lo que alude Casimiro. Es decir, diseñar bien las llaves externas ("foráneas") para impedir que un registro de tutor pueda ser eliminado si tiene relacionados registros de estudiantes.
Cita:
Empezado por ozsWizzard Ver Mensaje
De todas formas, no siempre lo mejor es establecer una relación entre tablas...
La mejor opción es establecer la relación entre tablas, tal y como te hemos comentado Al González y yo.
Responder Con Cita
  #7  
Antiguo 22-01-2013
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
donpedro,

Cita:
Empezado por Al González
Por ello es que siempre se recomienda controlar estas situaciones mediante Integridad Referencial a nivel de la base de datos...
Cita:
Empezado por Casimiro Notevi
La mejor opción es establecer la relación entre tablas, tal y como te hemos comentado Al González y yo.
La Integridad Referencial es la opción adecuada como bien lo comentan Casimiro y Al González, garantizando la consistencia de la data independientemente de la aplicación a través del Motor de BD.

Revisa estos links:
Cita:
1- Crear Foreign Key (Integridad Referencial) con MySQL
http://www.bibigeek.com/2009/08/30/c...key-con-mysql/

2- Manual de Integridad Referencial en MySQL - Clases Personales
http://www.google.com/url?sa=t&rct=j...rHajSA&cad=rja

3- Claves foráneas (foreign keys)
http://dev.mysql.com/doc/refman/5.0/...eign-keys.html

4- Integridad referencial
http://es.wikipedia.org/wiki/Integridad_referencial
Espero sea útil

Nelson.
Responder Con Cita
  #8  
Antiguo 22-01-2013
donpedro donpedro is offline
Miembro
 
Registrado: nov 2009
Posts: 102
Poder: 0
donpedro cantidad desconocida en este momento
hola de nuevo,,, me voy a explicar,, porque intente crear foreign key y en unas tablas me funciono pero en 2 tablas me dio error me explico....
tengo dos tablas una llamada estudiante y otra inscripcion, como lo muestro mas abajo, intente agregarle foreign key pero dio el siguiente error Can't create table 'sigeduc.#sql-9ec_1' (errno: 150),,,,que debo hacer,,, como hago para declarar indexes y foreign key correctamente

Código SQL [-]
CREATE TABLE `estudiante` (
  `TUTORID` varchar(7) NOT NULL,
  `NOMBRETUTOR` varchar(30) DEFAULT NULL,
  `MATRICULA` varchar(15) NOT NULL DEFAULT '',
  `RNE` varchar(25) DEFAULT NULL,
  `NOMBRES` varchar(30) DEFAULT NULL COMMENT 'nombre del estudiante',
  `APELLIDOS` varchar(30) DEFAULT NULL COMMENT 'Apellidos del estudiante',
  `FECHA DE NACIMIENTO` varchar(15) DEFAULT NULL COMMENT 'Fecha de nacimiento del estudiante',
  `EDAD` varchar(5) DEFAULT NULL COMMENT 'Edad del estudiante',
  `SEXO` varchar(15) DEFAULT NULL,
  `INSTITUCION BECA` varchar(20) DEFAULT NULL COMMENT 'Institucion que le da beca a los estudiantes',
  `CANTIDAD HERMANO` int(10) DEFAULT NULL COMMENT 'cantidad de hermano que tiene el estudiante',
  `LUGAR ENTRE HERMANO` int(10) DEFAULT NULL COMMENT 'lugar que ocupa el estudiante dentro de sus hermanos',
  `CONDICION ANO ESCOLAR` varchar(18) DEFAULT NULL COMMENT 'condicion del ano escolar promovido,nuevo',
  `CONDICION ANO ESCOLAR1` varchar(15) DEFAULT NULL COMMENT 'condicion del ano escolar promovido,nuevo',
  PRIMARY KEY (`TUTORID`,`MATRICULA`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Código SQL [-]
CREATE TABLE `inscripcion` (
  `ANO_ESCOLAR` varchar(20) NOT NULL,
  `TUTORID` varchar(5) DEFAULT NULL,
  `MATRICULA` varchar(15) NOT NULL,
  `FECHA_INSCRIPCION` varchar(12) DEFAULT NULL,
  `GRADO` varchar(30) DEFAULT NULL,
  `SECCION` varchar(3) DEFAULT NULL,
  `CARRERA` varchar(30) DEFAULT NULL,
  `TANDA` varchar(11) DEFAULT NULL,
  `TRANSPORTE` varchar(18) DEFAULT NULL,
  `BECA` varchar(12) DEFAULT NULL,
  `PORCIENTO` varchar(12) DEFAULT NULL,
  `IDCONDICION` varchar(15) DEFAULT NULL,
  `PAGARAMENSUAL` varchar(7) DEFAULT NULL,
  `MONTOAPROBADO` varchar(7) DEFAULT '0',
  `STATUS` char(1) DEFAULT NULL,
  `FECHA_RETIRO` varchar(14) DEFAULT NULL,
  PRIMARY KEY (`ANO_ESCOLAR`,`MATRICULA`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Validar XML contra un XML Schema Sagara Internet 1 09-03-2010 07:23:31
information schema tables???? peripla SQL 1 27-11-2009 19:18:30
select de schema en procedimiento Johnny Q Oracle 2 13-02-2007 19:30:26
Validar XML con schema rsotolongo Internet 5 27-04-2004 10:33:15
Xml Schema *.XSD cisterpe Firebird e Interbase 4 18-12-2003 20:25:04


La franja horaria es GMT +2. Ahora son las 02:24:06.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi