Вобще-то лично мне составные 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 нету конечно...

Ответить