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

start [/forum/topic.php?fid=32&msg=36857151&tid=1542533]: |
0ms |
get settings: |
8ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
156ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
32ms |
get tp. blocked users: |
1ms |
| others: | 218ms |
| total: | 438ms |

| 0 / 0 |
