Como cargar las tablas
Hola, normalize una base de datos, y me quedo una tabla de clientes,
La direccion es un atributo compuesto, para una mejor normalizacion, (que dos clientes viven en la misma ciudad o en la misma calle con distinto numero,) hice:
Y pones el campo Iddireccion en la tabla CLIENTES, pero el problema dentro de direccion es lo que te decia de las calles, por ejemplo, en vez de hacer lo anterior pondrias:
Y lo mismo para la ciudad, etc.. 1- Pero en el formulario en Builder, como inserto los datos, recordando que solo tendria los edit, y el boton de insertar, me dirijo a la tabla directamente, 2- ¿Que sucederia con una valor de una campo que ya existe, ej: Dos clientes viven en la misma calle? Si lo compruebo como inserto si ya existen. Como muestro los ya existentes? TELEFONO(#Idtel, Idtipo,Numero); TIPOTEL(Idtipo,Descripcion) {Aqui es constante, o celular o fijo} Y si deseas consultar de que cliente es un telefono, obtienes el Idtelefono y lo buscas en CLIENTE |
Estoy tratando de entender el problema pero me lo pones muy difícil ;)
1 - Qué SQL estas usando (MySQl , MSSQL, etc...) 2 - Qué componentes estas usando para conectarte ? 3 - Qué quieres hacer concretamente en una oración de ser posible |
De paso no estaría mal que mostraras parte del código C++ que usas o al menos que este encaminado a lo que quieres lograr, eso generalmente da una mejor idea. Saludos
|
Cita:
En el evento del Boton OnCLick Código:
ADOQuery1->Close(); Cita:
Código:
PD esto lo he escrito directo aquí ok, no lo he probado con el compilador hehehehee así que igual te encuentras con algunos problemillas de sintaxis :) ... pero al menos te da la idea verdad? Saludos |
Creo que el error esta desde el diseño de la tabla, no veo el caso de hacer el campo direccion un atributo compuesto puesto que un cliente solo tiene un mismo domicilio fiscal, aunque puedes tener otros domicilios de sucursales, tiendas, etc. Las tablas auxiliares que tienes (direcciones y ciudades) las tienes que gestionar directamente al editar el registro del cliente.
El ejemplo que mencionas 2 clientes en la misma calle, no tiene problema ya que lo que identifica al registro es la combinación (cliente,calle) esa tabla deberá tener como llave compuesta esos dos campos para que no permita meter mas que un cliente y calle diferente, pero aceptar 2 clientes con la misma calle. Esto no tiene problema en código pues al tratar de insertar un cliente con una calle que ya tiene asignada te saltará la excepción proveniente del motor de BD. Es decir programa tu código como si todo fuera a salir bien y solo coloca un try..except para capturar esa excepción (un cliente con una calle que ya tiene asignada), así no tienes que hacer chequeos adicionales por código. Las tablas de relación normalmente deben tener una llave compuesta que no permita incluir registros duplicados pero para un mismo registro principal, es decir. Supongamos el ejemplo de teléfonos: un cliente puede tener n teléfonos, la llave candidata seria cliente+teléfono para evitar duplicados sin embargo puede darse el caso de que un mismo teléfono sea compartido por mas de un cliente (diferentes razones sociales, nombres comerciales, etc.), la misma llave nos funciona porque nos permitira poner un mismo teléfono siempre y cuando el cliente sea distinto. Para buscar a quien pertenece un telefono basta:
Espero te sirva |
Gracias
Bueno gracias por tomarse el trabajo de responder, ahora entiendo que hay que normalizar bien para tener un buen sistema.
Saludos. |
La franja horaria es GMT +2. Ahora son las 04:24:25. |
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