Вобще-то лично мне составные FK не нравятся по некоторым соображениям. Я
все таблицы делаю по такому вот шаблону:
CREATE TABLE "_MyTable" (
"Id" "GlobalId" NOT NULL PRIMARY KEY /* "GlobalId" =
BIGINT NOT NULL */,
"LocalId" "LocalId" /* "LocalId" = INTEGER NOT NULL */,
"InstanceId" "InstanceId" /* "InstanceId" = SMALLINT NOT NULL */,
UNIQUE ("LocalId", "InstanceId")
);
CREATE TRIGGER "_MyTable_BIU0" FOR "_MyTable"
ACTIVE BEFORE INSERT OR UPDATE POSITION 0
AS
BEGIN
IF (INSERTING) THEN
BEGIN
IF (NEW."LocalId" IS NULL) THEN
NEW."LocalId" = GEN_ID("GenMyTableId", 1);
IF (NEW."InstanceId" IS NULL) THEN
SELECT CAST("Value" AS INTEGER) FROM "GetParameter"('InstanceId')
INTO NEW."InstanceId";
END
ELSE IF (UPDATING AND OLD."LocalId" <> NEW."LocalId") THEN
EXCEPTION "UpdateError" '"_MyTable_BIU0": Íåäîïóñòèìîå èçìåíåíèå
ïåðâè÷íîãî êëþ÷à';*/
NEW."Id" = NEW."LocalId" + 4294967296 * NEW."InstanceId";
END
То есть глобальный ID есть величиной вычисляемой на основании локально
сгенерирированного значения и кода экземпляра базы. Потом на эту таблицу
вешаю соответствующее представление и с этим представлением и работаю.
Там уже полей LocalId и GlobalId нету конечно...