
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
21.09.2010, 12:08
|
|||
|---|---|---|---|
|
|||
Проектрование базы для новостей |
|||
|
#18+
Решил сделать свою cms (php+mysql) для простенького блога. Но возник вопрос по проектированию базы данных для новостей и рубрик к которым новости могут относится. Одна новость может быть в нескольких рубриках, и много новостей может быть в одной рубрике, т.е. связь много к много. Подскажите, как лучше такую базу спроектировать, в каком виде лучше получить результат выборки всех новостей вместе с данными о рубриках, к которым каждая новость относится. Решил отталкиваться от трёх таблиц: первая, таблица новостей: Код: plaintext 1. 2. 3. 4. 5. 6. 7. вторая, таблица рубрик: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. и третья, связывающая две предыдущих таблицы: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Теперь, выборкой получаем данные новостей, а так же стринг id рубрик, к которым каждая новость относится. Код: plaintext 1. 2. 3. Получаем: Код: plaintext 1. 2. 3. 4. 5. 6. Остаётся сделать один запрос для получения всех рубрик (SELECT id,name FROM categories;), и далее в цикле выводим на странице каждую новость, а стринг id рубрик разбиваем на массив (explode) и в цикле пишим название рубрики взависимости от id из массива (т.е. из уже разбитого стринга). Скажите на сколько такой вариант верный? Какие есть другие варианты? Может есть какая-нибудь статья об этом? Следующим шагом будет добавление меток, связь тоже много к много. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
21.09.2010, 12:15
|
|||
|---|---|---|---|
Проектрование базы для новостей |
|||
|
#18+
РомсРешил сделать свою cms (php+mysql) для простенького блога... Зачем? Чем неустраивают уже существующие? Вы уверены что Ваше творение будет лучше и функциональнее уже существующих? Невижу смысла изобретать велосипед. Надеюсь и Вы это поймете. ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
21.09.2010, 12:40
|
|||
|---|---|---|---|
|
|||
Проектрование базы для новостей |
|||
|
#18+
Злой БобрРомсРешил сделать свою cms (php+mysql) для простенького блога... Зачем? Чем неустраивают уже существующие? Вы уверены что Ваше творение будет лучше и функциональнее уже существующих? Невижу смысла изобретать велосипед. Надеюсь и Вы это поймете. ))) Чтобы получить опыт в программировании. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
21.09.2010, 13:23
|
|||
|---|---|---|---|
Проектрование базы для новостей |
|||
|
#18+
РомсЧтобы получить опыт в программировании. Опыт нужно получать на действующих системах а не лепить сферического коня в ваккууме. Пойдите на сайты фриланса. Там достаточно работы как раз для того что б набраться опыта. Хотя самое правильное устроиться на работу падаваном. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
21.09.2010, 13:27
|
|||
|---|---|---|---|
|
|||
Проектрование базы для новостей |
|||
|
#18+
Злой БобрРомсЧтобы получить опыт в программировании. Опыт нужно получать на действующих системах а не лепить сферического коня в ваккууме. Пойдите на сайты фриланса. Там достаточно работы как раз для того что б набраться опыта. Хотя самое правильное устроиться на работу падаваном. И всё же у Вас есть что сказать по теме? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
22.09.2010, 10:29
|
|||
|---|---|---|---|
Проектрование базы для новостей |
|||
|
#18+
Ромс И всё же у Вас есть что сказать по теме? Вы мыслите правильно. Но если хотите получить максимальную скорость храните в news.categories (к примеру) categories.id в виде строки с разделителями. По аналогии хранить в рубриках id новостей неправильно, т.к. новостей будет много. Следовательно для того чтобы найти все новости относящиеся к данной рубрике нужно будет проверить на вхождение categories.id в news.categories. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
22.09.2010, 10:55
|
|||
|---|---|---|---|
Проектрование базы для новостей |
|||
|
#18+
Ромс, почему у новости может быть несколько рубрик? Привидите пример, пожалуйста, подозреваю, что-то вроде: спорт-велосипедный спорт и тд? друой вариант7 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
22.09.2010, 10:59
|
|||
|---|---|---|---|
|
|||
Проектрование базы для новостей |
|||
|
#18+
> первая, таблица новостей: Есть смысл использовать устоявшиеся конструкции для описания сообщений. Их масса. > вторая, таблица рубрик: Та же история. Классификатор - как правило - древовидная структура, а не плоская. > и третья, связывающая две предыдущих таблицы: А здесь вопрос не технический, а методологический. Вообще классификация используется для структурирования чего-либо. Чем полнее классификатор, тем удобнее работать с классифицированными данными. Идеальный (или даже просто хороший) классификатор предполагает возможность однозначной классификации. > Скажите на сколько такой вариант верный? Если ваша задача - попробовать, нормальный вариант. > Какие есть другие варианты? Их масса. Вообще говоря, вы начали с достаточно сложной задачи, не очень подходящей для "набраться опыта". Не знаю ни одного новостного источника, который мог бы служить прототипом эталонной реализации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
22.09.2010, 11:58
|
|||
|---|---|---|---|
|
|||
Проектрование базы для новостей |
|||
|
#18+
Злой БобрВы мыслите правильно. Но если хотите получить максимальную скорость храните в news.categories (к примеру) categories.id в виде строки с разделителями. По аналогии хранить в рубриках id новостей неправильно, т.к. новостей будет много. Следовательно для того чтобы найти все новости относящиеся к данной рубрике нужно будет проверить на вхождение categories.id в news.categories. Если id категорий будут записаны строкой к каждой новости, то как тогда найти новости из определённой категории? Использовать like чтоли? ОзверинРомс, почему у новости может быть несколько рубрик? Привидите пример, пожалуйста, подозреваю, что-то вроде: спорт-велосипедный спорт и тд? друой вариант7 Например здоовье и спорт. Вы предлагаете упростить задачу и сделать свзять один к много (много новостей в одной категории)? Это не выход :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
22.09.2010, 12:19
|
|||
|---|---|---|---|
Проектрование базы для новостей |
|||
|
#18+
Ромс Если id категорий будут записаны строкой к каждой новости, то как тогда найти новости из определённой категории? Использовать like чтоли? Ну правильнее будет использовать IN. Т.е. для поиска распарсить поле news.categories по идентификаторам. Хотя можно использовать и LIKE, только дополняйте строку поиска разделителем который пользуетесь в строке. Т.е. пишем хранимку в которую передаем значение для поиска а она вернет нам результат или ошибку. При ошибке выдаем нужное сообщение. Какой метод поиска пользовать в хранимке выбирайте сами. Я так думаю что будет правильным попробовать и тот и другой, какой выдаст большую скорость тот и выбрать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
22.09.2010, 14:33
|
|||
|---|---|---|---|
Проектрование базы для новостей |
|||
|
#18+
Ромс, ушел бы я от того, что 1 новость может относиться к нескольким рубрикам. 1. select рубрика, новость в итоге выдаст корректное кол-во новостей в разрезе рубрики , но накопительный итог может быть неверен(1 новость относится к 2м рубрикам, в итоге это 2 новости, если не учеть в запросе) 2. update новость set where рубрикаид = 1 измениn кроме всего прочего новости. у которых >1рубрики + которые относятся к рубрикиид=1, если не учесть 3. delete - тоже самое :) то есть при банальных запросах треубется включать доп условия.. вообщем, ка кто так вижу я это ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
22.09.2010, 16:21
|
|||
|---|---|---|---|
|
|||
Проектрование базы для новостей |
|||
|
#18+
Злой Бобр Ну правильнее будет использовать IN. Т.е. для поиска распарсить поле news.categories по идентификаторам. Разве IN будет работать в таком случае? Код: plaintext 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
22.09.2010, 17:12
|
|||
|---|---|---|---|
Проектрование базы для новостей |
|||
|
#18+
Ромс, Я ж вам написал что для использования IN вам необходимо распарсить значение test.cats . Исходя из вашего примера вы должны строку '5,6,8' представить в следующем виде '5','6','8'. И соответственно если уж ведете поиск то ведите поиск не числа а строки. В вашем случае это выглядит примерно так: DECLARE a VARCHAR(64); SET a='6'; SELECT * FROM test WHERE a IN ('5','6','8') Надеюсь как представить cats в виде '5','6','8' сами поймете. Воспользуйтесь для этого поиском. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=32&mobile=1&tid=1542533]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
160ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
72ms |
get tp. blocked users: |
2ms |
| others: | 214ms |
| total: | 494ms |

| 0 / 0 |
