Правильный способ поддержания отношения Один ко многим с фиксированным количеством дочерних строк? - PullRequest
0 голосов
/ 07 февраля 2020

Я моделирую общую связь один-ко-многим между таблицей авторов и таблицей книг.

По соглашению Автор может назначить максимум 30 книг. Таким образом, когда автор получает максимальное количество книг, а другая хочет быть назначена одному и тому же автору, я должен удалить самую старую и добавить новую.

Я мог бы выполнить очевидную операцию удаления самой старой книги и добавьте новый, чтобы сохранить ограничение в 30 книг, но мне интересно, если это более прямой способ сделать это или это обычная практика в этой ситуации.

Ответы [ 2 ]

1 голос
/ 07 февраля 2020

Если вы не хотите заранее вставлять 30 наборов данных для каждого автора, вы можете создать хранимую процедуру, в которой сначала учитываются авторы, и, если их меньше 30, вы делаете вставку, в противном случае вы обновляете автора как «Клубника». предлагает. Если вы обращаетесь к БД через репозитории, вы можете обращаться с ним таким же образом в репо-методе.

0 голосов
/ 07 февраля 2020

Вы могли бы рассмотреть следующее:

CREATE TABLE my_table(id SERIAL PRIMARY KEY,author_id INT NOT NULL,book VARCHAR(50) NULL);

INSERT INTO my_table (author_id) VALUES (1),(1),(1);

UPDATE my_table SET book = 'my first book' WHERE author_id = 1 ORDER BY book,id LIMIT 1;

SELECT * FROM my_table;
+----+-----------+---------------+
| id | author_id | book          |
+----+-----------+---------------+
|  1 |         1 | my first book |
|  2 |         1 | NULL          |
|  3 |         1 | NULL          |
+----+-----------+---------------+

UPDATE my_table SET book = 'my second book' WHERE author_id = 1 ORDER BY book,id LIMIT 1;

UPDATE my_table SET book = 'my third book' WHERE author_id = 1 ORDER BY book,id LIMIT 1;

UPDATE my_table SET book = 'my fourth book' WHERE author_id = 1 ORDER BY book,id LIMIT 1;

SELECT * FROM my_table;
+----+-----------+----------------+
| id | author_id | book           |
+----+-----------+----------------+
|  1 |         1 | my fourth book |
|  2 |         1 | my second book |
|  3 |         1 | my third book  |
+----+-----------+----------------+

О, забыл добавить метку времени (или механизм для редактирования идентификатора) -: - $, но, надеюсь, вы поняли идею; Я отредактирую это, если у меня будет минута

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