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

Печать / RSS
24

P

Пацак
+1
Интересный вопрос у меня возник: как можно сохранить в БД несколько значений для одной сущности? Например, мне нужно сохранить для одного имени кол-во книг на полке, а у него их несколько. Как можно организовать бд с учетом таких обстоятельств?

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

Айсберг Визави
0
Это связи один-ко-многим. Реализация очень простая: используя внешний ключ сущности, мы указываем его для каждого атрибута.

Пацак
0
@php, ты не думал хранить инфу обработаную к примеру serialize(), а на выходе его прочитывать
P

Пацак
0
Типа того, только организовать архитектуру бд таким образом, чтобы можно было без нее обойтись.
Не создавать же по таблице для всего подряд?
P

Пацак
0
Может быть я и так уже все сделал, только сам пока об этом не догадываюсь? 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 статей? Мне просто хватит алгоритма. Или бд спроектирована неправильно для этого? Вот решить этот вопрос затрудняюсь(
J

Оранжевые штаны
0
@php, наверное лучше счётчик сделать в авторов)
P

Пацак
0
@JustZero, бл@ ну и гемор! Тип SERIAL подойдет для этого?

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

Оранжевые штаны
0
@php, какой гемор? Поле типа int в которое плюсуешь при написании или минус при удалении?
P

Пацак
0
@JustZero, ну да, поле с автоинкрементом может быть только одно, для счетчика чего либо отдельную таблицу делать надо тогда наверное.
М.б. выборку лучше придумать типа: select такое-то поле from такой-то таблица и вывести количество title_id у каждого из авторов?
P

Пацак
0
Кому интересно если, так сделал:
SELECT * FROM `co_auth` WHERE `title_id` IN (SELECT `author_id` FROM `co_auth` GROUP BY `author_id` HAVING COUNT(title_id) < 5)
Для выполнения действия необходимо авторизоваться!
Стикеры / Теги / Правила / Топ тем / Топ тем / Поиск