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

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

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

14 ответов

9 просмотров

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

А что ты будешь делать когда кто-то отсоединит 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"

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

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

Какой-то там пердун в 90-х решил, что есть какая-то разная типизация. Кого вообще это волнует?
КТ315
49
void terminal_scroll() { memmove(terminal_buffer, terminal_buffer + VGA_WIDTH, buffer_size - VGA_WIDTH); memset(terminal_buffer + buffer_size - VGA_WIDTH, 0, VGA_WIDTH); ...
Егор
47
Всем привет! Подскажите, пожалуйста, в чем ошибка? Настраиваю подключение к MySQL. Либы лежат рядом с exe. Все как по "учебнику"
Евгений
16
А можете как-то проверить меня по знаниям по ассемблеру?
A A
132
Здравствуйте! У меня появилась возможность купить книгу "Изучай Haskell во имя добра!". Но я где-то слышал, что эта книга устарела. Насколько это правда??
E
22
Здравствуйте! Я вот на stepic решаю задачи на хаскеле https://stepik.org/lesson/8443/step/8?unit=1578 мой код import Data.List (isInfixOf) removing :: String -> [String] ->...
E
10
Камрады, кто тесно работал с vtv, хотел уточнить. Ширина column задаётся жёстко на этапе создания дерева или можно в рантайме ее менять программно (не мышкой)?
Ed Doc
10
да ладно ... что там неочевидного ? глянуть в исх-ки датасета и/или кверика чтобы понять в каком месте и как выполняется обращения к св-вам blablaSQL - минутное дело, даже е...
Сергей
7
Здесь для arm кто-нибудь кодит ?
Nothing
52
Всем привет, у меня есть сервер принимающий входящие HTTP подключения, как проверить, что подключение было через прокси или нет, есть какие то поля в заголовках по которым мо...
Кибер Бомж
8
Карта сайта