Postgresql Trigger - PullRequest
       7

Postgresql Trigger

0 голосов
/ 28 января 2012
CREATE TABLE stop_times
(
   trip_id int NOT NULL,
   arrival_time time NOT NULL,
   departure_time time NOT NULL,
   stop_id int NOT NULL,
   stop_sequence int NOT NULL,

   FOREIGN KEY(trip_id) REFERENCES trips,
   FOREIGN KEY(stop_id) REFERENCES stops
);

CREATE TABLE trips
(
   trip_id int NOT NULL,
   trip_name text NOT NULL,
   trip_start time,
   trip_end time,

   PRIMARY KEY(trip_id)
);

Что я хотел бы сделать, так это то, что после добавления / обновления / удаления записей (записей) в таблицу stop_times таблица поездок обновит trip_start как минимум (прибытие_ время) для группы trip_ids и trip_end как Макс (время прибытия) для группы trip_ids.

1 Ответ

0 голосов
/ 25 марта 2013

Во-первых, всегда начинайте с представлений и настраивайте все как можно лучше с соответствующими индексами. Подобный триггер создаст вам проблемы с обслуживанием, и вы захотите избежать его, когда сможете. Во-вторых, если у вас есть триггер на что-то подобное и вы делаете массовые обновления, это сделает вашу производительность проблемной (я знаю из опыта). Это может вызвать ошибки в кеше, которые могут сильно испортить вашу способность вставлять или обновлять данные в большом количестве.

Во-вторых, если вам нужно сделать это, лучше всего иметь отдельную таблицу trip_times и периодически материализировать данные для прошлых поездок. Это лучше всего работает, если данные в stop_times доступны только для чтения по истечении определенного периода времени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...