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

Печать RSS
637

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)
Стикеры / Теги / Правила / Топ тем / Топ постов / Поиск