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

Разве, тогда я смогу вставлять пользователей не с ролью студент

для одной и той же библиотеки?

18 ответов

24 просмотра

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

Andrew-Grom Автор вопроса
Ilya Zviagin
Не знаю, твою стркутуру надо смотреть. Но этот три...

Идея такова, что есть таблица пользователь-библиотека(fk- пользователя, fk-библиотеки). Ограничение заключается в том, что пользователи с ролью учитель, могут иметь отношение с библиотекой многие ко многим, а вот пользователи с ролью студент не могут, им доступно только один ко многим(тойсть один студент может иметь несколько библиотек)

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

Andrew Grom
Идея такова, что есть таблица пользователь-библиот...

А Вы его хотя бы по шагам проверили (у нас-то DDL этих таблиц нет)? И да, в дополнение к https://t.me/pgsql/509304 — constraints не нужно проверять в before-триггерах, т.к. это в принципе ненадёжно.

Radist
Можете создать частичный уникальный индекс, туда п...

А там нужный признак в другой таблице... кажется (\d нам пока не показали).

Andrew-Grom Автор вопроса
Yaroslav Schekin
А Вы его хотя бы по шагам проверили (у нас-то DDL ...

Прошу прощение, просто только учусь работать с БД. Вот таблицы: create table university_user ( id bigserial primary key, first_name varchar(64) not null, last_name varchar(64) not null, user_role varchar(64) not null ); create table library ( id bigserial primary key, title varchar(64) not null ); create table user_library ( user_id bigint, library_id bigint, foreign key (library_id) references library (id) on delete cascade on update cascade, foreign key (user_id) references university_user (id) on delete cascade on update cascade );

Andrew Grom
Прошу прощение, просто только учусь работать с БД....

Т.е., у вас связь студента с библиотекой не многие-ко-многим, а 0..1 ко многим? Может тогда поменять связи?

Andrew-Grom Автор вопроса

Просто у меня одинаковые атрибуты у пользователей и это причина, почему я так создал связь. Не хочу создавать лишние таблицы. Но если Вы можете дать совет, как решить такую проблему и есть ли смысл создавать несколько одинаковых по структуре таблиц

Andrew Grom
Прошу прощение, просто только учусь работать с БД....

Ну и УМВР (для некоторого значения понятия "работает" ;) ): NOTICE: Attempting to insert user_id: 2, library_id: 2 ERROR: Cannot add more than one student to a library CONTEXT: PL/pgSQL function prevent_multiple_students_in_one_library() line 9 at RAISE Кстати, почему у Вас нет PK в user_library (это грубая ошибка проектирования, если что)?

Andrew Grom
Просто у меня одинаковые атрибуты у пользователей ...

Во-первых, user_role должен быть не строкой, а нужна отдельная траблица-справочник, на которую таблица пользователей должна ссылаться. В вашем случае (я так понимаю, у вас в библиотеке может быть только один студент), можно сделать ссылку из библиотеки на студента, а связь многие-ко-многим использовать только для других ролей. Правда, появляется другая проблема - вы можете сослаться на не-студента. Решить это на уровне констрейнтов возможно, но решение несколько странное: https://stackoverflow.com/questions/68025556/postgres-how-can-i-create-an-fk-reference-on-a-partial-index

Radist
Во-первых, user_role должен быть не строкой, а нуж...

Это "решение" — нарушение 2NF (ну и даже с т.з. здравого смысла const_neg_one int generated always as (-1) stored, — это дурь, нет?). ;( Лучше уж сразу "наследование" реализовывать (т.е. roles → students), мне кажется (тут это как раз имеет смысл). Тоже не без недостатков, но они, хотя бы, технические.

Konstantin Zaitsev
вот зачемм ттакое в бд?)

Я и пишу, очень странное решение (к тому же, в примере автора там можно было обойтись одним generated полем)

Konstantin Zaitsev
роли чем нарушают 2nf?

не роли, а странное решение со "ссылкой на частичный индекс"

Konstantin Zaitsev
роли чем нарушают 2nf?

Я про association из https://stackoverflow.com/a/68025696 , неужели непонятно? Или Вы ещё где-то увидели const_neg_one int generated always as (-1) stored,?

Andrew Grom
Идея такова, что есть таблица пользователь-библиот...

Знаете что... я вот перечитал это описание, и уже не уверен, что Вам на самом деле нужно. :( Вы можете примеры привести (того, как может быть, и того, как обязано не быть)?

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
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
Карта сайта