Ver Mensaje Individual
  #4 (permalink)  
Antiguo 17/11/2010, 14:05
Avatar de huesos52
huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: Sugerencia diseño base de datos

por ejemplo:
Código SQL:
Ver original
  1. pruebas=> CREATE TABLE persona(codigo INTEGER PRIMARY KEY,nombre_completo TEXT,direccion TEXT,telefo
  2. no TEXT);
  3. NOTICE:  CREATE TABLE / PRIMARY KEY will CREATE implicit INDEX "persona_pkey" FOR TABLE "persona"
  4. CREATE TABLE
  5. pruebas=> CREATE TABLE profesor(materias TEXT) INHERITS (persona);
  6. CREATE TABLE
  7. pruebas=> CREATE TABLE monitor(materia TEXT) INHERITS (persona);
  8. CREATE TABLE
  9. pruebas=> INSERT INTO profesor VALUES(2,'DIEGO LOPEZ','CRA 23 NO. 74B -28','465664534','algebra');
  10. INSERT 0 1
  11. pruebas=> INSERT INTO monitor VALUES(2,'DIEGO LOPEZ','CRA 23 NO. 74B -28','465664534','filosofia');
  12. INSERT 0 1

Fijate que las tablas heredadas solo tienen campos que son unicos. Y hereda todo lo que una persona pudiera tener.

En este caso, diego lopez es monitor y profesor al mismo tiempo (un ejemplo rapido) y todo hace parte de una super tabla llamada persona.

Que ventajas trae trabajar de esta forma?

Imaginate que diego lopez sea coordinador, profesor y padre de familia. Se ha cambiado de casa y deben actualizar la información. En un esquema normal, tendrías que ir a cambiar en cada tabla donde haya un registro para diego lopez y actualizar la información. De esta forma, el cambio lo haces unicamente desde la tabla persona y hereda todos los cambios a sus tablas hijas.

Código SQL:
Ver original
  1. pruebas=> SELECT *FROM  ONLY monitor;
  2.  codigo | nombre_completo |     direccion      | telefono  |  materia
  3. --------+-----------------+--------------------+-----------+-----------
  4.       2 | DIEGO LOPEZ     | CRA 23 NO. 74B -28 | 465664534 | filosofia
  5. (1 fila)

si cambiamos el telefono en la tabla persona y consultamos las tablas monitor y profesotr los cambios son heredados.

Código SQL:
Ver original
  1. pruebas=> UPDATE persona SET telefono = '567890' WHERE codigo=2;
  2. UPDATE 2
  3. pruebas=> SELECT *FROM  monitor;
  4.  codigo | nombre_completo |     direccion      | telefono |  materia
  5. --------+-----------------+--------------------+----------+-----------
  6.       2 | DIEGO LOPEZ     | CRA 23 NO. 74B -28 | 567890   | filosofia
  7. (1 fila)
  8. pruebas=> SELECT *FROM  profesor;
  9.  codigo | nombre_completo |     direccion      | telefono | materias
  10. --------+-----------------+--------------------+----------+----------
  11.       2 | DIEGO LOPEZ     | CRA 23 NO. 74B -28 | 567890   | algebra
  12. (1 fila)

algo así sería.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming