¿Necesito una clave principal para mi tabla, que tiene una ÚNICA (4 columnas compuestas), una de las cuales puede ser NULA?

Tengo la siguiente tabla (PostgreSQL 8.3) que almacena los precios de algunos productos. Los precios se sincronizan con otra base de datos, básicamente, la mayoría de los campos a continuación (aparte de uno) no son actualizados por nuestro cliente, sino que se eliminan y actualizan de vez en cuando para sincronizar con otra base de datos de valores:

<code>CREATE TABLE product_pricebands (
    template_sku varchar(20) NOT NULL,
    colourid integer REFERENCES colour (colourid) ON DELETE CASCADE,        
    currencyid integer NOT NULL REFERENCES currency (currencyid) ON DELETE CASCADE,
    siteid integer NOT NULL REFERENCES site (siteid) ON DELETE CASCADE,

    master_price numeric(10,2),

    my_custom_field boolean, 

    UNIQUE (template_sku, siteid, currencyid, colourid)
);
</code>

En la sincronización, BORRADO, básicamente, la mayoría de los datos anteriores, excepto los datos DONDE mi campo de personal es VERDADERO (si es VERDADERO, significa que el cliente actualizó este campo a través de su CMS y, por lo tanto, este registro no debe eliminarse). Luego INSERTO 100s a 1000s de filas en la tabla, y UPDATE donde el INSERT falla (es decir, donde ya existe la combinación de (template_sku, siteid, currencyid, colourid)).

Mi pregunta es: ¿qué práctica recomendada debe aplicarse aquí para crear una clave principal? ¿Es incluso necesaria una clave principal? Quería hacer la clave principal = (template_sku, siteid, currencyid, colourid), pero el campo de color es NULL, y no es posible usarlo en una clave principal compuesta.

Por lo que leí en otras publicaciones del foro, creo que he hecho lo anterior correctamente, y solo necesito aclarar:

1) ¿Debo usar una clave primaria "serial" en caso de que alguna vez la necesite? Por el momento no, y creo que nunca lo haré, porque los datos importantes de la tabla son el precio y mi campo personalizado, que solo se identifica mediante la combinación (template_sku, siteid, currencyid, colourid).

2) Ya que (template_sku, siteid, currencyid, colourid) es la combinación que usaré para consultar el precio de un producto, ¿debería agregar más indexación a mis columnas, como el "template_sku" que es un varchar? ¿O es la restricción ÚNICA un buen índice ya para mis SELECT?

Respuestas a la pregunta(1)

Su respuesta a la pregunta