нужен совет по дизайну моей базы данных - PullRequest
0 голосов
/ 02 августа 2010

Я использую cakePHP 1.26.
Я собираюсь построить очень простой форум на localhost.
Вот концептуальный дизайн базы данных:

Таблица:
Пользователь {user_id, name, date}
Тема {post_id, title, content, date}
Ответить {post_id, content, date}
Quote {quote_post_id, post_type, post_id}

У пользователя может быть много тем
Пользователь может иметь много ответов
В теме может быть много цитат
В ответе может быть много цитат
(И Тема, и Ответ могут быть указаны один или несколько раз)

Пожалуйста, помогите и посоветуйте.

Ответы [ 3 ]

3 голосов
/ 02 августа 2010

Пользователь {id, имя, логин, пароль}

Тема {идентификатор, заголовок, содержание, дата, идентификатор пользователя}

Ответить {id, content, date, topic_id, user_id}

Я не уверен насчет Quote ... Я не знаю, почему это не подходит под Reply.

1 голос
/ 02 августа 2010

Я попытаюсь взять ответ потерянного в другом направлении:

Пользователь {id, имя, логин, пароль}

Post {id, title, content, date, parent_post_id, user_id}

Цитата {post_id, quoted_post_id}

В этой модели пост - это тема, если parent_post_id имеет значение NULL. В ответах будет установлен parent_post_id с идентификатором их темы. (Или вы можете разрешить древовидную структуру ответов.)

Предупреждение: мой опыт работы с обычным SQL. Я не знаю, как все работает в cakephp, поэтому кто-то другой должен помочь вам в этом.

1 голос
/ 02 августа 2010

Вы определенно хотите ввести поле с именем id, так как несколько избыточно называть поле user_id, если это поле id в таблице users. В дополнение к этому CakePHP обрабатывает некоторые поля как automagic . Automagic означает, что cakephp может идентифицировать внешние ключи без вас - разработчика, который должен явно их указывать. Но чтобы CakePHP помог вам с automagic , вам нужно придерживаться нескольких соглашений . Одно из этих соглашений, которое когда-то выучилось довольно удобно, заключается в том, что внешние ключи автоматически обнаруживаются, когда вы их называете YOUR_MODEL_NAME_IN_SINGULAR_HERE_id; например: автор имеет много сообщений, пост принадлежит автору (*). В этом случае вы можете сохранить внешний ключ как autor_id в таблице posts. Позже, когда вы используете скрипт cake bake или функцию скаффолдинга, вы поймете силу соглашения!

Еще одна вещь, которую я заметил в вашем посте, это то, что вы могли бы пропустить, что в CakePHP установлены отношения двунаправленно . Это означает, что вы работаете не только с одним определением hasMany , но и в другом направлении с определением , принадлежащим .

Поэтому я предлагаю вам перефразировать ваши высказывания, чтобы реализовать более поздний кулер.

...