Немного упрощенно так:
Код: Выделить всё
CREATE TABLE BOOK (
B_ID INTEGER NOT NULL,
B_NUMBER INTEGER,
B_DATE DATE,
B_AMOUNT NUMERIC(15,2)
);
ALTER TABLE BOOK ADD CONSTRAINT PK_BOOK PRIMARY KEY (B_ID);
CREATE TABLE ENTRY (
E_ID INTEGER NOT NULL,
E_B_ID INTEGER NOT NULL,
E_D_A_ID INTEGER,
E_C_A_ID INTEGER,
E_DATE DATE,
E_AMOUNT NUMERIC(15,2)
);
ALTER TABLE ENTRY ADD CONSTRAINT PK_ENTRY PRIMARY KEY (E_ID);
ALTER TABLE ENTRY ADD CONSTRAINT FK_ENTRY FOREIGN KEY (E_B_ID) REFERENCES BOOK (B_ID);
Клиенты все разные Firebird версии 1.0.3.972 и 1.5.2.4731.
Сервер не зависал и не падал 100%. Про клиентов однозначно сказать не могу, но все клянуться, что никто не зависал.
Теперь периодически (в среднем из 500 одна) появляются записи с разных машин в зависимой таблице ENTRY со значением "0" (не NULL, а именно 0) по связанному полю E_B_ID. Физического удаления записей из BOOK не существует вообще. Т.е. я могу 100% гарантировать, что delete в BOOK не осуществлялся.
Ну ладно было бы NULL, можно было бы подумать, что это программа где-то глючит. Но какого черта 0 то подставляется? Куда копать? До смены сервера баз данных таких глюков замечено не было. Программа простейшая и находиться в эксплуатации уже года три как. Такая же программа стоит и в других местах со значительно большим количеством данных. Нигде кроме как в этом месте вышеуказанных проблем нету. Пока пересоздали все ключи. Завтра посмотрю, что получилось.
Может в дополнение к FK еще триггеры сделать?