LINUX.ORG.RU

SQL, действие по изменении таблицы


0

0

Я полный нуб в БД. Прошу помощи по одному вопросу.

Есть две таблицы - Clients и Contracts - с одиннаковым столбцом ID. Нужно, чтобы при удалении клиента (из Clients) с определенным ID, этот-же ID удалялся и из таблицы Contracts.

Читал про функции и триггеры (выполнить функцию при изменении таблицы), но ни до чего не дошел..

Подскажите плз как действовать.

postgresql 8.3.1-1
phppgadmin 4.1.3-0.1
pgadmin3 1.8.2-0ubuntu1

create table clients (id integer primary key, ...);

create table contracts (id integer primary key, client_id integer not null, foreign key (client_id) references clients(id) on delete cascase, ...);

Может синтаксис не вполне правилен, но идея такая.

// Ѣ ходят на ЛОР не по ссылкам

gaa ★★
()
Ответ на: комментарий от kto_tama

insurance_company=# SELECT column_name FROM information_schema.columns WHERE table_name ='Clients';
 column_name 
-------------
 ID
 First Name
 Address
 Phone no.
 Middle Name
 Last Name
 Sex
 Birth
 Passport
 Company
(10 rows)

insurance_company=# CREATE TABLE Contracts (                                                       
Client_ID integer REFERENCES Clients(ID)
);
ERROR:  relation "clients" does not exist

henturis
() автор топика

А что именно не получается с триггерами. Если это программа можно программно (вручную) сначала удалить со стороны "многие", а потом со стороны "один"

разбиение один-к-одному нужно делать только если таблица уж слишком большая получается по количеству полей. И таки нужно пользоваться приемуществами реляционной базы данных: связывать таблицы тогда СУБД будет сама о целостности заботиться

temy4
()
Ответ на: комментарий от temy4

> А что именно не получается с триггерами.

Я НЕ знаю, как это вообще делается. Создать сначала функцию что-ли надо? А потом триггер с аргументом - этой фукнцией?

henturis
() автор топика
Ответ на: комментарий от henturis

не-не, триггер хоть это и та же процедура, но применима именно к таблице

что-нибудь вроде того:

CREATE TIGGER ON table FOR DELETE DELETE FROM Contracts WHERE id = deleted.id

а вообще, у тебя там какая связь?

temy4
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.