Ver Mensaje Individual
  #1 (permalink)  
Antiguo 03/06/2013, 19:23
marcosgue
 
Fecha de Ingreso: enero-2008
Mensajes: 79
Antigüedad: 16 años, 3 meses
Puntos: 1
Pregunta [DUDA] sobre Froreign key

Como están hace muuuucho tiempo que no me ponía a armar una base de datos y dios que uno olvida cosas, de todas formas aprovecho mi pequeño retorno para consultar algo que siempre tuve en duda ya que en realidad nunca me llevé demasiado con las bases de datos.

Las claves foraneas, siempre las utilicé y mis compañeros me pasaban bases de datos con las claves en ellas y si bien entiendo como relacionarlas y demás. Siempre me quedo una duda!

Para que se identifican las claves foraneas en las bases de datos? y su funcionamiento y deber ser, es el mismo tanto en bases de datos pequeñas como en gigantes?

pregunto esto porque justo estoy armando una base de datos que contiene locales, usuarios, servicios, estos servicios se dividen en categorías, y las ordenes de trabajo pueden venir de diferentes locales etc...

Bueno mi duda especificamente es saber para que utilizamos las claves foraneas, ya que por lo menos en mi caso pienso que al llenar los datos con los formularios bien armados desde el sitio de carga, siempre se cargarán datos correctos, pero como siempre vi que se utilizan deben tener un deber ser más importante que solo aparecer ahí jajaja... Entonces me gustaría que alguien me explicara para que las usamos realmente y obviamente saber si están bien utilizadas en mi base de datos.

entonces estoy haciendo algo así como para que tengan un ejemplo

Tabla de categoria de servicios
Código MySQL:
Ver original
  1. CREATE TABLE categ_servicios (
  2. categoria varchar(20) NOT NULL,
  3. registra varchar(2) NOT NULL,
  4. )

Tabla de servicios
Código MySQL:
Ver original
  1. CREATE TABLE servicios (
  2. categoria int(2) NOT NULL,
  3. descripcion varchar(40) NOT NULL,
  4. preciomin DECIMAL(6,2),
  5. precio DECIMAL(6,2),
  6. precio2 DECIMAL(6,2),
  7. precio3 DECIMAL(6,2),
  8. FOREIGN KEY (categoria) REFERENCES categ_servicios(ID)
  9. )

y por ejemplo la de ordenes a la cual le estoy dando varias claves foraneas (de paso aprovecho, y consulto si estoy utilizando en una columna "DEFAULT '1' " no es necesario el NOT NULL verdad?)
Código MySQL:
Ver original
  1. CREATE TABLE ordenes (
  2. id_cliente int(8) NOT NULL,
  3. marca varchar(20),
  4. modelo varchar(20),
  5. procedencia int(2) NOT NULL,
  6. categoria int(2) NOT NULL,
  7. servicio int(2) NOT NULL,
  8. precio decimal(6,2),
  9. estado int(1) NOT NULL,
  10. ubicacion int(1) DEFAULT '1' NOT NULL,
  11. fecha DATE,
  12. fecha_ingreso DATE,
  13. fecha_realizado DATE,
  14. fecha_especial DATE,
  15. detalles varchar(255),
  16. garantia int(3),
  17. PRIMARY KEY (orden)
  18. FOREIGN KEY (procedencia) REFERENCES locales(ID)
  19. FOREIGN KEY (categoria) REFERENCES categ_servicios(ID)
  20. FOREIGN KEY (servicio) REFERENCES servicios(ID)
  21. )


Desde ya muchisimas gracias por todo!!!