[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Модель данных для блога.
Avner
Разрабатываю первый раз. Народ, поделитесь опытом, как бы это все получше обустроить.
Для начала планирую 3 таблицы:
1)Posts
-----------
|post_id
|title
|text
|category
|date
|...
---------------------
2)Categories(рубрики)
---------------------
|cat_id
|cat_name
|...
-------------
3)Comments
-------------
|comment_id
|comment_post_id
|text
|date
|ip
|...
--------------
Сложность в том, что я пока плохо понимаю как это все связать.
Какую таблицу делать главной? Посты(posts) или рубрики(categories)?Какие поля связывать? Какие поля еще добавить?
Также нужно как-то обеспечить целостность. Как сделать чтобы при удалении рубрики, не удалялись ее посты, а просто связь разрывалась? Но при изменении имени рубрики, во всех постах эти изменения отражались? (если можно,то с примерами для mysql)
ps. Гуглить пробовал. Вобщем то информация есть, но мне бы было интереснее и понятнее на моем примере это все разобрать smile.gif



Спустя 38 минут, 18 секунд (28.04.2010 - 12:04) Jinus написал(а):
Насколько я понимаю, "главной" таблицей обязана быть Posts. А связать таблицы ещё проще, чем придумать что будет "главным":
1. posts.category и categories.cat_id
2. posts.post_id и comment_post_id
Вот и всё. Теперь мы создаём категорию, потом создаём пост с выбором категории и комментим созданный пост...
Что касается вывода:
На странице категории запрашиваем все посты с category равной cat_id(выбранная категория). Далее, на странице поста, запрашиваем все комменты где comment_post_id равен post_id(текущему посту).
Помоему, таким способом решаются все вышеописанные задачи.

Спустя 5 часов, 41 минута, 59 секунд (28.04.2010 - 17:46) Avner написал(а):
С полями вроде разобрался, спасибо. Думал, конечно, может кто-то подскажет как с foreign key все правильно сделать. Но может для такого простого случая и не надо никакие внешние ключи?

Спустя 14 часов, 16 минут, 29 секунд (29.04.2010 - 08:02) Jinus написал(а):
Цитата (Avner @ 28.04.2010 - 14:46)
С полями вроде разобрался, спасибо. Думал, конечно, может кто-то подскажет как с foreign key все правильно сделать. Но может для такого простого случая и не надо никакие внешние ключи?

Ну я не использовал никогда их smile.gif

Спустя 22 часа, 56 минут, 34 секунды (30.04.2010 - 06:59) Romms написал(а):
Я уже поднимал эту тему...
Вот что у меня вышло:
-- 
-- Структура таблиці `articles`
--

CREATE TABLE `articles` (
`id` bigint(255) NOT NULL auto_increment,
`name` varchar(255) default NULL,
`short` text,
`text` text,
`keywords` text,
`date` datetime NOT NULL,
`ip` varchar(255) default NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- --------------------------------------------------------

--
-- Структура таблиці `connection`
--

CREATE TABLE `connection` (
`id_tag` bigint(255) NOT NULL,
`id_article` bigint(255) NOT NULL,
KEY `id_tag` (`id_tag`,`id_article`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- --------------------------------------------------------

--
-- Структура таблиці `tags`
--

CREATE TABLE `tags` (
`id` bigint(255) NOT NULL auto_increment,
`name` varchar(255) default NULL,
`description` text,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

И такие запросы:

Вывод статей за ИД тега:
SELECT `tags`.`id` AS `tags.id`,
`tags`.`name` AS `tags.name`,
`articles`.`id` AS `articles.id`,
`articles`.`name` AS `articles.name`,
`articles`.`short`,
`articles`.`date`,
`articles`.`ip`
FROM articles, tags, connection
WHERE articles.id = connection.id_article
and tags.id = connection.id_tag
and articles.id IN (
SELECT id_article
FROM connection
WHERE id_tag=17
)
ORDER BY articles.date

Вывод статьи за ИД статьи:

SELECT `tags`.`id` AS `tags.id`,
`tags`.`name` AS `tags.name`,
`articles`.`id` AS `articles.id`,
`articles`.`name` AS `articles.name`,
`articles`.`short`,
`articles`.`date`,
`articles`.`ip`
FROM articles, tags, connection
WHERE articles.id = connection.id_article
and tags.id = connection.id_tag
and articles.id = 12
ORDER BY articles.date

Но есть проблема... Я незнаю как "прикрутить" сюда лимит... Все скажут: "Да просто! Допиши в конец LIMIT 0,10 и всё". Но это не так. кто попробует выполнить эти запросы, тот поймет почему "не так" smile.gif

PS. Ключи я уже выставил( в дампе их видно ) Но неуверен что выставил правильно.
В приложеном файле оставил полный дамп таблиц
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.