|
|
|
| Здравствуйте, опыта проектирования бд не имею, поэтому хочу узнать мнение профессионалов в правильном ли направлении я иду.
Делаю аналог личной почты на сайте, т.е. входящие/исходящие сообщения для пользователей сайта.
1 таблица (пользователи)
id пользователя
id отправленных сообщений
id входящих сообщений
2 таблица (сообщения всех пользователей)
id сообщения
от кого (id пользователя)
кому (id пользователя)
текст сообшения
Мне кажется, что получается не очень. Особенно не нравится, что придется в первой таблице в ячейке id отправленных сообщений хранить и каждый раз дописывать id отправленных сообщений в каком-то таком виде: 123123|435435|325325|54757|3654356| и каждый раз обрабатывать на php эту ячейку, выуживая там id сообщений.
Наверняка есть какие-то более простые способы, буду рад любым советам. Спасибо. | |
|
|
|
|
|
|
|
для: smash
(13.08.2009 в 13:17)
| | так не храните там кол-во сообщений...
делайте 2 запроса или многотаблич. запросы. | |
|
|
|
|
|
|
|
для: а-я
(13.08.2009 в 13:29)
| | он количество вроде и не хранит.
Хотя ужас-ужас - это да.
Автору:
users(id, username)
messages(id, author_id, subject, creationdate, msgtext)
folders(id, user_id, foldername)
posts(id, folder_id, message_id, to_user_id, read_flag, read_date, answer_id)
Папки в приципе можно убрать. | |
|
|
|
|
|
|
|
для: Trianon
(13.08.2009 в 13:36)
| | Именно кол-во автор и хранит и даже понимает, что это не правильно, потому на форум и пришел.
Trianon
Спасибо большое, я предполагал такую структуру, но не понимаю как из нее БЫСТРО получить входящие или исходящие?
Выдержит ли такая база, если на сайте уже более 1000 пользователей онлайн? | |
|
|
|
|
|
|
|
для: smash
(13.08.2009 в 13:50)
| | >Именно кол-во автор и хранит и даже понимает, что это не правильно, потому на форум и пришел.
Я не увидел. Увидел что Вы храните список ключей в поле.
>Спасибо большое, я предполагал такую структуру, но не понимаю как из нее БЫСТРО получить входящие или исходящие?
Быстро получить сами входящие/исходящие или их количество?
SELECT COUNT(*) FROM posts WHERE to_user_id = $userid
SELECT COUNT(*) FROM posts WHERE author_id = $userid
author_id можно в принципе продублировать в posts
>Выдержит ли такая база, если на сайте уже более 1000 пользователей онлайн?
Думаете - рухнет? | |
|
|
|
|
|
|
|
для: а-я
(13.08.2009 в 13:29)
| | Каких 2 запроса? Можно немного подробнее? Спасибо | |
|
|
|
|
|
|
|
для: smash
(13.08.2009 в 13:17)
| | Я так понял, у Вас проблемы с счетчиком, кол-во вход. и исходящих.
можно так поступить!
НЕ ТЕСТИРОВАЛ
<?
$sql = '
SELECT
COUNT( * ) AS `all` ,
(`user_1` = '.$user_id.') AS `type`
FROM
`messages`
GROUP BY
`type`
';
$ms = mysql_query($sql) or die(mysql_error());
for($data=array(0,0); $result = mysql_fetch_assoc($ms); $data[$result['type']] = $result['all']);
?>
входящих: <?=$data[0]?><br />
исходящих: <?=$data[1]?><br />
|
--------
UPDATE:
только заметил, что в 1ой табл. Вы хотите хранить id всех исход. сообщений!
так делать нельзя.!
при авторизации юзера у Вас есть его id/
храните в сессиях?
потом просто в запросах ставите условие, на вход и исход по этому id | |
|
|
|
|
|
|
|
для: а-я
(13.08.2009 в 14:22)
| | а-я, спасибо за помощь, буду пробовать.
да, при авторизации юзера у меня есть его id, я хотел хранить все исход сообщения или хотя бы пробовать записывать туда id 10 последних сообщений, чтобы не делать тяжелые запросы к базе с неск. млн сообщений, типа
SELECT message FROM message_table WHERE id = 167892332 ORDER BY
date
|
а сразу обращаться к нужным сообщениям, но видимо по другому никак. | |
|
|
|
|
|
|
|
для: smash
(13.08.2009 в 15:14)
| | ну.. чтоб не терять скорость, необходимо использовать index'ы! | |
|
|
|