Вопрос о проектировании БД
1.
php (07.05.2019 / 02:59)
Интересный вопрос у меня возник: как можно сохранить в БД несколько значений для одной сущности? Например, мне нужно сохранить для одного имени кол-во книг на полке, а у него их несколько. Как можно организовать бд с учетом таких обстоятельств?
Добавлено через 03:21 сек.
Причем, если у кого-то могут быть общие?
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)
Может быть я и так уже все сделал, только сам пока об этом не догадываюсь?
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)
Какой ужасный костыль)
А формулировка вопроса точная?
Для одного имени количество книг, а у него их несколько? Если несколько книг, и есть количество, то просто +1 к количеству нет? Здесь крч что-то не так с вопросом)
13.
php (07.05.2019 / 23:16)
JustZero, это уже про код говоришь наверное, а я имел ввиду чиста средствами mysql обойтись, безо всякого лишнего кода.
Добавлено через 07:34 сек.
JiGaN,
у статьи м.б. несколько авторов, у автора - сколько угодно статей. Схема многие:многим. Так вот я и хочу выяснить моей структуры бд достаточно будет, чтобы реализовать соответствующую выборку? (см. выше) В т.ч. есть необходимость выбрать из бд авторов у которых >=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