Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Cargar datos de una Tabla al recibir nuevo FK ???

Estas en el tema de Cargar datos de una Tabla al recibir nuevo FK ??? en el foro de Bases de Datos General en Foros del Web. Que tal, Les explico, en las tablas de products_category y Products tengo "cargados", como es lógico, categorías de productos y productos como tal con sus ...
  #1 (permalink)  
Antiguo 15/11/2005, 14:11
 
Fecha de Ingreso: octubre-2005
Mensajes: 365
Antigüedad: 18 años, 7 meses
Puntos: 0
Cargar datos de una Tabla al recibir nuevo FK ???

Que tal,

Les explico, en las tablas de products_category y Products tengo "cargados", como es lógico, categorías de productos y productos como tal con sus respectivas características y su precio.

Lo que ocurre es que mis clientes pueden tener uno o varios contratos (En donde se especifica el precio de los productos).

En las tablas products_category y Products ya tengo información "cargada", de los productos (Esta lista es muy raro que cambie).

Como pueden ver en el modelo que adjunto se vé esto claro, la duda es:

1. Cómo puedo "cargar" todos los registros de estas dos tablas automáticamente cuando creo un nuevo Contrato?

Es decir, si tengo el contrato 1 y tiene cargados todos los productos, quiero dejar una page por ejemplo "crear nuevo contrato" y que cargue todos los producots y solo sea añadirles el precio.



Se puede? Tengo algo mal planteado?

Agradezco la ayuda.

Saludos.
  #2 (permalink)  
Antiguo 15/11/2005, 16:44
Avatar de Linterns
Colaborador
 
Fecha de Ingreso: diciembre-2001
Mensajes: 2.799
Antigüedad: 22 años, 4 meses
Puntos: 11
en primer lugar eso de "agregar nuevo contrato" asumo que estas utilizando algun software... VB ? php? Fox? acces? no se... algo donde estas haciendo el formulario...

pues bien la cuestion para cualquiera que sea el software que estas ocupando lo que deberas hacer es un INSERT a partir de un SELECT.

ejemplo: Si creas un nuevo contrato generas un archivo Manualmente en CONTRACT lo que te dara un numero en CONTRACT.CONTRACT_ID, supongamos que te dio el correlativo 500 hacemos lo siguiente:

Código:
INSERT INTO Products_category 
(contract_id, 
category_code, 
category_descripcion,
category_notes,
category_type)
SELECT 
500, 
category_code, 
category_descripcion,
category_notes,
category_type
from Products_category
Where products_category = "AQUI_EL_CONTRATO_ANTERIOR");
Luego deberas llenar de la misma forma la tabla de productos

Código:
INSERT INTO Products
( category_id,
product_code,
product_descripcion,
abreviature,
notes,
price )
SELECT 
category_id,
product_code,
product_descripcion,
abreviature,
notes,
0
from products
Where products.category_id IN 
     (select products_category.category_id
      from products_category
      Where Where products_category = "AQUI_EL_CONTRATO_ANTERIOR")
Como podras darte cuenta en el segundo Insert lo que hace es insertar todas las tuplas con precio igual a cero (0) de aquellas que cumplen con la condicion del contrato anetrior que tenias.

NOTA: Creo que en algun Query tendras que modificar algo ya que lo estoy haciendo sin tener ninguna base de datos a la mano para probar... asi que si te arroja un error trata de verificar la sintaxis
__________________
Bien se puede recibir una puñalada sin adulación,
pero rara vez se recibe una adulación sin puñalada
** ***
  #3 (permalink)  
Antiguo 16/11/2005, 00:44
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
Yo lo que no entiendo es porque relacionas los contratos con las categorias, es decir,
¿Cuando un cliente tiene un contrato, se le asignan todos los productos de la categoría?Si no es así el diseño no creo que sea correcto. Y lo segundo creo que sería más propio en 3ª Forma Normal tener una tabla contrato (con su Id, el cliente al que pertenece, y otros datos como fecha...) y una tabla "LineaContrato" en la que tendríamos su Id, el producto al que pertenece y el precio del mismo.

Es que no veo claro ese diseño en un ejemplo real, no se, quizá esté bien y no haya entendido yo tu diseño.
  #4 (permalink)  
Antiguo 16/11/2005, 07:30
 
Fecha de Ingreso: octubre-2005
Mensajes: 365
Antigüedad: 18 años, 7 meses
Puntos: 0
Muchas gracias por las repuestas,

Si me parece muy interesante la solució planteada por Listenr y me imaginaba que debería ser algo así.

Uso php y creo que la implementación será esa.

Y bueno, es correcto el diseño porque cada vez que un cliente tiene un contrato, efectivemente se le deben asignar todas las categorias y por ende todos los contratos así el precio sea 0.

Muchas Gracias señores, si se les ocurre un aporte adicional bienvenido.

Saludos.
  #5 (permalink)  
Antiguo 16/11/2005, 12:34
 
Fecha de Ingreso: octubre-2005
Mensajes: 365
Antigüedad: 18 años, 7 meses
Puntos: 0
Linterns............Asumo que el 500 es para cargar todos los datos de los productos en products_category y que tenga la PK 500....................que interesante..............tenés algún link que hable preofundamente de estos selects + insert into quizás delete?


Saludos.

Código PHP:
INSERT INTO Products_category 
(contract_id
category_code
category_descripcion,
category_notes,
category_type)
SELECT 
500

category_code
category_descripcion,
category_notes,
category_type
from Products_category
Where products_category 
"AQUI_EL_CONTRATO_ANTERIOR"); 
  #6 (permalink)  
Antiguo 16/11/2005, 14:17
Avatar de Linterns
Colaborador
 
Fecha de Ingreso: diciembre-2001
Mensajes: 2.799
Antigüedad: 22 años, 4 meses
Puntos: 11
pues la verdad no tengo ningun enlace que te pueda proporcionar... eso ha salido de mi experiencia como Administrador de Bases Oracle.
__________________
Bien se puede recibir una puñalada sin adulación,
pero rara vez se recibe una adulación sin puñalada
** ***
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:45.