Вопрос о проектировании БД

1. php (07.05.2019 / 02:59)
Интересный вопрос у меня возник: как можно сохранить в БД несколько значений для одной сущности? Например, мне нужно сохранить для одного имени кол-во книг на полке, а у него их несколько. Как можно организовать бд с учетом таких обстоятельств?

Добавлено через 03:21 сек.
Причем, если у кого-то могут быть общие? oy

2. Кевин Митник (07.05.2019 / 06:33)
Это связи один-ко-многим. Реализация очень простая: используя внешний ключ сущности, мы указываем его для каждого атрибута.

3. Андрей (07.05.2019 / 08:22)
php, ты не думал хранить инфу обработаную к примеру serialize(), а на выходе его прочитывать

4. php (07.05.2019 / 08:59)
Типа того, только организовать архитектуру бд таким образом, чтобы можно было без нее обойтись.
Не создавать же по таблице для всего подряд?

5. php (07.05.2019 / 15:51)
Может быть я и так уже все сделал, только сам пока об этом не догадываюсь? D
INSERT INTO BooksAuthors
    (ArticleId, AuthorId)
VALUES
    (1, 1),
    (2, 1),
    (3, 1),
    (4, 2),
    (5, 2),
    (6, 3),
    (7, 4),
    (7, 5),
    (7, 6),
    (7, 7),
    (7, 8)

Это запрос к таблице-посреднику между таблицами со статьями и с авторами. Эта таблица устанавливает соответствие между статьями и авторами посредством идентификаторов. Вопрос-то на самом деле следующий: при такой структуре я могу сделать выборку авторов, например, тех у кого >=5, >= 10 статей? Мне просто хватит алгоритма. Или бд спроектирована неправильно для этого? Вот решить этот вопрос затрудняюсь(

6. JustZero (07.05.2019 / 16:03)
php, наверное лучше счётчик сделать в авторов)

7. php (07.05.2019 / 16:45)
JustZero, бл@ ну и гемор! Тип SERIAL подойдет для этого?

Добавлено через 03:08 сек.
Я могу счетчик сделать с помощью пхп кода и добавлять его в бд, когда что-то новое появляется, а чиста средствами mysql это можно замутить как-нибудь? Кстати, в таблице с авторами не получится счетчик сделать, ведь автоинкрементный тип только один должен быть.

8. JustZero (07.05.2019 / 17:02)
php, какой гемор? Поле типа int в которое плюсуешь при написании или минус при удалении?

9. php (07.05.2019 / 17:25)
JustZero, ну да, поле с автоинкрементом может быть только одно, для счетчика чего либо отдельную таблицу делать надо тогда наверное.
М.б. выборку лучше придумать типа: select такое-то поле from такой-то таблица и вывести количество title_id у каждого из авторов?

10. php (07.05.2019 / 19:23)
Кому интересно если, так сделал:
SELECT * FROM `co_auth` WHERE `title_id` IN (SELECT `author_id` FROM `co_auth` GROUP BY `author_id` HAVING COUNT(title_id) < 5)


11. JustZero (07.05.2019 / 20:00)
php, что мешает самому писать количество? у тебя же есть таблица автор. вот в ней сделай поле articles типа int. при создании или удалении постов делай articles++ или --

12. JiGaN (07.05.2019 / 20:06)
Кому интересно если, так сделал: SELECT * FROM `co_auth` WHERE `title_id` IN (SELECT `author_id` FROM `co_auth` GROUP BY `author_id` HAVING COUNT(title_id) < 5)
@php (Сегодня / 19:23)
Какой ужасный костыль)
А формулировка вопроса точная?
Для одного имени количество книг, а у него их несколько? Если несколько книг, и есть количество, то просто +1 к количеству нет? Здесь крч что-то не так с вопросом)

13. php (07.05.2019 / 23:16)
JustZero, это уже про код говоришь наверное, а я имел ввиду чиста средствами mysql обойтись, безо всякого лишнего кода.

Добавлено через 07:34 сек.
JiGaN, klass у статьи м.б. несколько авторов, у автора - сколько угодно статей. Схема многие:многим. Так вот я и хочу выяснить моей структуры бд достаточно будет, чтобы реализовать соответствующую выборку? (см. выше) В т.ч. есть необходимость выбрать из бд авторов у которых >=5, >=10 статей.

14. php (07.05.2019 / 23:30)
Короче говоря, существует ли в природе такой запрос, чтобы удовлетворить мои условия или структуру бд переделывать?
В случае с запросом - конечно, если он будет более-менее лаконичным. Определение функций и т.п. в запросе мне не нужны.

21 век на дворе, а мы все еще юзаем реляционные бд! - такая шняга.. Пора бы придумать что-нибудь получше.


15. Dmitry Kokorin (09.05.2019 / 10:22)
Юзер: id counter
Статья: id text
Авторы: id author article
Запрос:
Выборка авторов у которых более 4х статей (5+)
SELECT id FROM users WHERE counter > 4

Выборка статей определенного автора
SELECT text FROM articles WHERE id IN (SELECT article FROM authors WHERE author = ID_AUTHORS)

Выбрать всех авторов статьи 
SELECT author FROM authors WHERE article = ID_ARTICLE


16. php (09.05.2019 / 12:46)
Dmitry Kokorin, что в text и article хранится?

17. Dmitry Kokorin (10.05.2019 / 17:16)
php, в text - текст статьи, в article - ид статьи
Повнимательнее прочитай предыдущий пост, там структура всех 3 таблиц расписана

URL: https://visavi.net/topics/44182