За последние 24 часа нас посетили 17947 программистов и 1581 робот. Сейчас ищут 1282 программиста ...

Помогите со структурой БД

Тема в разделе "MySQL", создана пользователем antiKILLER, 8 май 2008.

  1. antiKILLER

    antiKILLER Активный пользователь

    С нами с:
    6 май 2008
    Сообщения:
    16
    Симпатии:
    0
    Адрес:
    Заречный, Пенз.обл.
    Такая вот делема передо мною встала.
    Например в БД есть таблица, в которой хранится информация о ссылках в меню (существующих на сайте категориях). В этой таблице есть некое поле «strname» (например со значением «news», но естественно что значение будет много), значение которого соответствует GET запросу категории (например «index.phtml?category=news») и есть ещё одна таблица, с таким же именем («news» в дано случае), в которой хранятся сами записи.
    Я хочу добавить возможность комментирования записей пользователями. Т.е. чтобы зарегистрированный мог добавить комментарий.
    Как это лучше сделать?
    Есть в уже существующей таблице добавить одно поле, в котором будет хранится комментарий – то будет довольно проблематично в случае, когда комментариев будет много.. ведь придётся разбивать брать большой кусок текста и разбивать его на сам комментарий, автора.
    Может лучше создавать ещё одну таблицу, например «commentNews» и в ней хранить всё комментарии. А определять к какой записи в таблице «news» какой комментарий соответствует по некому доп. полю (например, ID). Но тогда придётся как-то ещё узнавать порядок комментариев… Ведь в ID статей повторятся не будет, а у каждого комментария может быть свой ID.
    Но ведь в таблице «news» будет много записей и к каждой из них много комментариев?
    А создавать отдельную таблицу для каждой записи… довольно тяжело, т.к. в моём случае нет явно уникального поля, которое не может быть одинаковым во всех таблицах со статьями… да и при этом сама БД со временем разрастется до гигантских размеров.
    Что посоветуете, как лучше поступить?
    А создавать отдельную таблицу с комментариями для каждой записи – это вообще бред… одних таблиц тогда будет тысячи со временем.

    Как быть, как вы устраиваете комментирование записей у себя на сайте?
     
  2. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Второй вариант - оптимальнее.
    Моя структура базы с комментариями:
    [sql]+-----------+------------------+------+-----+---------+----------------+
    | Field | Type | Null | Key | Default | Extra |
    +-----------+------------------+------+-----+---------+----------------+
    | id | int(10) unsigned | NO | PRI | NULL | auto_increment |
    | section | varchar(20) | NO | MUL | | |
    | parent_id | int(10) unsigned | NO | MUL | | |
    | date | int(10) unsigned | NO | | | |
    | text | tinytext | NO | | | |
    | nick | varchar(50) | NO | | | |
    +-----------+------------------+------+-----+---------+----------------+[/sql]
    Обратите внимание, что parent_id & section - индексные столбцы. Если у вас комментарии только в новостях, то соответственно section не нужен.

    Комментарии имеют свой id. Чем позднее добавлен - тем больше id. Вот и можно сортировать по ним.
    [sql]SELECT * FROM `comments` WHERE `parent_id`='.$id.' ORDER BY `id` DESC[/sql]
     
  3. antiKILLER

    antiKILLER Активный пользователь

    С нами с:
    6 май 2008
    Сообщения:
    16
    Симпатии:
    0
    Адрес:
    Заречный, Пенз.обл.
    Т.е. создать одну таблицу со всеми коммен6тариями, а потом выбирать оттудова только имеющие отношение к данной категории и к данной записи в категории. (т.е. выборку по 2-м полям делать).
    Да, этот вариант мне нравится... всего одна таблица, хоть и большая. Kreker, спасибо за помощь.
     
  4. lexa

    lexa Активный пользователь

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    antiKILLER, MySQL это реляционная БД. "Реляционная" от слова relations (отношения). Тебе следует почитать про это в инете.