172 похожих чатов

Есть таблица firms (id, data…), есть clients (firmId, clientId, …data) дальше

куча разных таблиц со ссылаками на clientId, но в них же продублирован firmId, для более оптимальной выборки.
Можно ли силами бд проверять что firmId и clientId соответствуют друг другу? То есть чтобы нельзя было воткнуть в запись фирму и клиента из другой фирмы

14 ответов

10 просмотров

Как вариант, могут помочь триггерные функции...

А что ты будешь делать когда кто-то отсоединит clientId от filmId

FK на clients (firmId, clientId) (но придётся добавить "лишний" индекс) или триггеры.

Aleksei-Kleandrov Автор вопроса
Yaroslav Schekin
FK на clients (firmId, clientId) (но придётся доба...

так это не гарантирует мне соответветствия что клиент в этой фирме

Aleksei-Kleandrov Автор вопроса
Алексей Шашенков
А что ты будешь делать когда кто-то отсоединит cli...

такого нет по бизнесу, ну и я привел частный случай, есть много сущностей где есть желание гарантировать такую консистентность

Aleksei-Kleandrov Автор вопроса

как?

Aleksei Kleandrov
так это не гарантирует мне соответветствия что кли...

Хмм... почему? По-моему, гарантирует. Если нет — покажите пример.

Aleksei-Kleandrov Автор вопроса
Yaroslav Schekin
Хмм... почему? По-моему, гарантирует. Если нет — п...

это гарантирует только то что такая фирма и такой клиент есть, а я говорю про принадлежность клиента к фирме

Aleksei Kleandrov
это гарантирует только то что такая фирма и такой ...

И я говорю про принадлежность клиента к фирме. Я, наверное, чего-то не понимаю. :(

Aleksei-Kleandrov Автор вопроса
Yaroslav Schekin
И я говорю про принадлежность клиента к фирме. Я,...

может и я не так понял) как ключ (firmId, clientId) будет гарантировать что у этого clientId в своей таблице стоит тот же firmId что и в ключе?

Aleksei Kleandrov
может и я не так понял) как ключ (firmId, clientId...

Потому, что https://t.me/pgsql/317773 Или я не так понял? Почему бы Вам, опять-таки, не показать пример таблиц (мне кажется, тут хватит и трёх)?

Aleksei-Kleandrov Автор вопроса
Yaroslav Schekin
Потому, что https://t.me/pgsql/317773 Или я не та...

firms (id, name) clients (id, firmId) tickets (firmId, clientId, name)

Aleksei Kleandrov
firms (id, name) clients (id, firmId) tickets (fir...

CREATE TABLE firms ( id int GENERATED ALWAYS AS IDENTITY PRIMARY KEY, name text NOT NULL ); INSERT INTO firms(name) VALUES ('name'); CREATE TABLE clients ( id int GENERATED ALWAYS AS IDENTITY PRIMARY KEY, firmId int NOT NULL REFERENCES firms, UNIQUE (id, firmId) ); INSERT INTO clients(firmid) VALUES (1); CREATE TABLE tickets ( clientId int NOT NULL, firmId int NOT NULL, name text NOT NULL, FOREIGN KEY (firmId, clientId) REFERENCES clients(id, firmId) ); И потом INSERT INTO tickets(clientid, firmid, name) VALUES (1, 2, 'name1'); ERROR: insert or update on table "tickets" violates foreign key constraint "tickets_firmid_fkey"

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
Карта сайта