Hola, gracias por responder.
Muy buenas tus preguntas. Debido a esto puedo explicar con más detalle todo, ya que si lo explicaba una vez iniciado el tema posiblemente muchas personas se complicaban e iba a salir muy extenso y lo más seguro es que pocos lo leyeran

. Ahora, te explico:
La tabla "PRODUCTOS_SERVICIOS" pertenece al Sistema Administrativo utilizado en la Empresa de mi Cliente. Este Sistema maneja inventarios, ventas, compras, cuentas por cobrar, cuentas por pagar, nómina, bancos, importaciones entre otras cosas. Yo no forme parte del desarrollo de este Sistema por lo cual no tengo el código fuente de la aplicación ni el diseño de la Base de Datos (Módelo Lógico) ni mucho menos el Diccionario de Datos para ver a detalle la estructura de las tablas. Mi cliente adquirió este Sistema comprándolo a un distribuidor.
Yo puedo acceder a la Base de Datos mediante el uso de IBExpert ya que el servidor firebird hace uso del usuario y clave básico de Firebird "SYSDBA, masterkey". Gracias a esto puedo modificar cualquier objeto de la Base de Datos.
Ahora, mi cliente desea un Sistema que gestione las solicitudes de servicios realizadas por los clientes, tal y como explique al principio. Ya que este Sistema Administrativo no esta en capacidad de hacerlo. Y debo hacer uso de los clientes, servicios y técnicos que tienen registrados en la Base de Datos del Sistema Administrativo.
Me toco agregar unas cuantas tablas para que la aplicación que estoy construyendo cumpla con los requerimientos de mi cliente.
Ok, en esta base de datos me he conseguido con relaciones algo extrañas pero esto se debe a que la empresa que realizo el Sistema Administrativo diseño la Base de Datos a su manera para que no fuese blanco fácil de copia. O sea, cualquier persona que entre a la Base de Datos vea un diseño fácil de Base de Datos y luego se la copie y saque un Sistema idéntico.
Una vez explicado esto, te aclaro lo siguiente:
Si observas la imagen de la tabla "PRODUCTOS_SERVICIOS" te darás cuenta que los dos primeros campos a la misma vez que son PRIMARY KEY son támbien FOREING KEY. Esto se debe a que estos dos campos se encuentran relacionados con otra tabla llamada "PRODUCTOS_FACTURABLES" (Tabla Padre) la cual contiene el codigo y tipo de todos los productos que maneja el Sistema Administrativo.
Además de la tabla "PRODUCTOS_SERVICIOS" también existen otras tablas llamadas "PRODUCTOS_TERMINADOS", "PRODUCTOS_COMPUESTOS". Para que estas tres tablas puedan almacenar productos, dichos productos primero deben existir en la tabla "PRODUCTOS_FACTURABLES" que es la tabla padre donde se le asigna el código único y el tipo de producto. Y por ende los productos que se almacenan en las distintas tablas "Hijas" hacen uso del código y el tipo que ya se les ha sido asignado en la tabla padre "PRODUCTOS_FACTURABLES". Debido a esto estos códigos nunca se repiten en ninguna tabla. Adjunto esta una imagen donde veras un mini ejemplo de como se guardan los datos entre estas tablas.
Ahora, el detalle esta en que unas de las tablas que yo cree para mi aplicación hace uso de la tabla "PRODUCTOS_SERVICIOS" por lo cual debo tomar las claves primarias de esta tabla y relacionarlas como claves foráneas con la tabla que estoy creando. He creado en mi tabla un campo que corresponda al campo codigo_producto y otro al campo tipo_producto, cuando intento crear la restricción de clave foránea entre los dos campos que cree en mi tabla y los campos codigo_producto y tipo_producto en la tabla "PRODUCTOS_SERVICIOS" firebird me genera una excepción diciéndome que no es posible. He registrado la base de datos así como reiniciado el manejador de base de datos varias veces y me genera esta excepción. Pienso que debe ser por alguna configuración que hayan hecho las personas que diseñaron el sistema, pero como no tengo diccionario de datos y nada, pues ni idea.
Debido a esto relacione solo el campo codigo_producto de la tabla "PRODUCTOS_SERVICIOS" con el campo que le asigne en la tabla que cree. Al momento de crear esta restricción firebird me dice que debo declarar alguno de los dos campos que conforman la clave primaria en la tabla "PRODUCTOS_SERVICIOS" como único "UNIQUE", lo hice y listo, puede relacionar las tablas correctamente.
Y pues ya que hice esto la duda es, debido a que la tabla que contiene clave primaria compuesta por dos campos ya tiene datos y relaciones con otras tablas, quisiera saber si al crear esta restricción (UNIQUE en el campo codigo_producto) me causaría algún inconveniente posteriormente en algunas de las relaciones que existen con esta tabla.
En lo particular lo he pensado mucho y pienso que no, ya que si los productos deben existir primero en la tabla "PRODUCTOS_FACTURABLES" automáticamente se les asigna un código y un tipo, luego de eso es que se inserta en la tabla que corresponda ya sea "PRODUCTOS_SERVICIOS","PRODUCTOS_COMPUESTOS" o "PRODUCTOS_TERMINADOS". Por lo que, el código_producto en las tablas hijas no se va a repetir. Entonces podría crear una restricción de tipo UNIQUE para el campo codigo_producto en la tabla "PRODUCTOS_SERVICIOS". Según el ejemplo que colocaste quedaría algo así:
TABLA: PRODUCTOS_SERVICIOS
codigo_producto tipo_producto
1111111 X
2222222 X
3333333 X
Y pues bueno, pregunto por salir de dudas y saber que me recomiendan en el foro ya que no poseo ningún tipo de documentación sobre la base de datos (Diccionario de Dato o Modelo Lógico). Y en estos casos la situación se torna delicada debido a que si daño una relación todos sabemos que el Sistema no funcionara bien y hasta perdida de datos se pueden provocar.
Espero me haya dado a entender jejeje, es algo largo pero sino explico todo van a quedar muchos cabos sueltos.
Saludos!