powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Структура таблиц этого форума
10 сообщений из 10, страница 1 из 1
Структура таблиц этого форума
    #32251014
Фотография Groove
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хочу сделать форум, в котором можно было бы постить незарегистрированных посетителям, типа как тут.

Есть таблица USER
IDUser
UName
UPassword

Есть таблица постов
IDPost
IDForum
IDThead
IDUser
PostSubj
PostBody

и еще пара таблиц

Так вот если сделать вьюху на эти две таблицы, то в ней не появятся незагегистрированные посетители.

Можно сделать фиктивного пользователя например с IDUser=1
и изменить таблицу постов следующим образом
IDPost
IDForum
IDThead
IDUser
ИМЯ_ПОД_КОТОРЫМ_ЗАПОСТИЛ
PostSubj
PostBody

и потом вязать таблицы

а можно взять таблицу юзеров и постов в последней редакции и не вязать вьюхой, а просто при вводе для незарегистрированных ставить ISUser=0 например и имя под которым он запостил.
И при выводе проверять если IDUser<>0, то
<a href ...>ИМЯ_ПОД_КОТОРЫМ_ЗАПОСТИЛ</a>
если ID User=0 то просто выводить
ИМЯ_ПОД_КОТОРЫМ_ЗАПОСТИЛ



Как правильно сделать БД?
...
Рейтинг: 0 / 0
Структура таблиц этого форума
    #32252319
Репликант
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хочу сделать форум, в котором можно было бы постить незарегистрированных посетителям, типа как тут. \r
\r
Физическая модель данных зависит от требований к вашему форуму\r
\r
Можно сделать фиктивного пользователя например с IDUser=1 \r
\r
Какой же он фиктивный? Это же "judge". Тогда уж с IDUser=0 :о)\r
\r
..и изменить таблицу постов следующим образом \r
IDPost \r
IDForum \r
IDThead \r
IDUser ....
\r
\r
А что вы сразу ddl не запостили? Да, такая модель очень проста в смысле запросов\r
\r
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
 /*\r
Table: Forums\r
Comment: Разделы форума.\r
*/ \r
create table Forums (\r
   IDForum    tinyint              identity( 1  ,  1 ),   -- Уникальный ID раздела форума.\r
 
   ForumName  varchar( 50 )          not null,   -- Уникальное название раздела форума.\r
 
   ForumDescr varchar( 255 )         not null,   -- Описание раздела форума.\r
 
   constraint PK_Forums primary key  (IDForum)\r
)\r
go\r
\r
 /*\r
Table: Topics\r
Comment: Топики или ветки (threads), содержащие постинги.\r
*/ \r
create table Topics (\r
   IDTopic              int                  identity( 1  ,  1 ),   -- Уникальный ID топика.\r
 
   IDForum              tinyint              not null,   -- ID раздела форума, к-му принадлежит топик.\r
 
   TopicName            varchar( 50 )          not null,   -- Название топика.\r
 
   constraint PK_Topics primary key  (IDTopic),\r
   constraint FK_Topics__Forums foreign key (IDForum)  references Forums (IDForum)\r
)\r
go\r
\r
 /*\r
Table: Users\r
Comment: Зарегистрированные пользователи форума (мемберы) и Гость (IDUser=0).\r
*/ \r
create table Users (\r
   IDUser     int                  identity( 0  ,  1 ),   -- Уникальный ID пользователя.\r
 
   UName      varchar( 30 )          not null,   -- Уникальное Имя пользователя (зарегистрированного и "Guest").\r
 
   UPassword  varchar( 30 )          not null,   -- Пароль пользователя.\r
 
   constraint PK_Users primary key  (IDUser)\r
)\r
go\r
\r
 /*\r
Table: Posts\r
Comment: Постинги (посты) в форуме.\r
*/ \r
create table Posts (\r
   IDPost               bigint               identity( 1  ,  1 ),   -- Уникальный ID постинга.\r
 
   IDTopic              int                  not null,   -- ID топика, к-му принадлежит постинг.\r
 
   IDUser               int                  not null,   -- ID пользователя, к-му принадлежит постинг.\r
 
   UName                varchar( 30 )          not null,   -- Имя пользователя, к-му принадлежит постинг.\r
 
   PostSubj             varchar( 50 )          not null,   -- Тема постинга.\r
 
   PostBody             varchar( 4000 )        not null,   -- Тело-сообщение постинга.\r
 
   constraint PK_Posts primary key  (IDPost),\r
   constraint FK_Posts__Users foreign key (IDUser)  references Users (IDUser),\r
   constraint FK_Posts__Topics foreign key (IDTopic)  references Topics (IDTopic)\r
)\r
go
\r
\r
и если зарегистрированный пользователь форума (member) может изменить свое имя, тогда при запросах (например, просмотр топика) имена мемберов (IDUser!=0) надо брать из Users.UName
...
Рейтинг: 0 / 0
Структура таблиц этого форума
    #32252722
Фотография Groove
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уважаемый Репликант!
Вы не первый раз отвечаете на мои вопросы и поэтому позвольте выразить признательность и сказать Огромное Вам спасибо за ваши ответы на мои, и не только, вопросы, и вообще за то что Вы тратите свое, наверняка, драгоценное время, чтобы передать нам свой опыт!
СПАСИБО!!!

2judge
Я не хотел Вас назвать фиктивным посетителем :-))), так получилось...
...
Рейтинг: 0 / 0
Структура таблиц этого форума
    #32276430
Фотография Groove
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Позвольте еще раз вернуться к этой теме...

появился еще один вопрос:
как делать сортировку по дате
если вопрос только что добавлен, то он станет первым
если на вопрос двухлетней давности ответят, то он тоже станет первым

вопрос в следующем: как это делается для тех вопросов, для которых нет ответов?
...
Рейтинг: 0 / 0
Структура таблиц этого форума
    #32276438
папа Карло
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
зачем изобретать велосипед? времени не жалко?

http://www.phpbb.com/
...
Рейтинг: 0 / 0
Структура таблиц этого форума
    #32276793
Фотография Groove
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уважаемый, папа Карло !
Моя задача не только сделать, но и разобраться с запросом.
У меня есть вопрос и я его задал.
Если трудно, или не интересно отвечать на него, то извините, - значит вопрос не для Вас.
...
Рейтинг: 0 / 0
Структура таблиц этого форума
    #32277579
Репликант
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Groove:
Моя задача не только сделать, но и разобраться с запросом.

Очень хорошо, ладно, разберемся :о)

появился еще один вопрос:
как делать сортировку по дате
если вопрос только что добавлен, то он станет первым
если на вопрос двухлетней давности ответят, то он тоже станет первым


Во всех нормальных удобных форумах так есть и так должно быть - наверх топик (вопрос) 2-летней давности "поднимает" не его дата-время, а дата-время последнего поста (ответа) в этот топик.
Предлагаю использовать одни и те же термины:

форум (то же, что и раздел форума) - строка в таблице Forums

топик (то же, что и ветка) - строка в таблице Topics

пост(инг) (то же, что и сообщение) - строка в таблице Posts

вопрос в следующем: как это делается для тех вопросов, для которых нет ответов?

В принципе возможны 2 варианта сортировки, когда имена топиков упорядочены:


по дате последнего поста в топике (обычный режим)

по дате создания топика (по запросу пользователя)

если предположить такую схему - уточнение схемы выше (см. Дата: 1 сен 03, 09:19):

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
 /*
Table: Forums
Comment: Форумы или разделы форума.
*/ 
create table Forums (
   IDForum      tinyint              identity( 1  ,  1 ),   -- Уникальный ID форума.
 
   FName        varchar( 50 )          not null,   -- Уникальное название форума.
 
   FDescr       varchar( 255 )         not null,   -- Описание форума.
 
   constraint PK_Forums primary key  (IDForum)
)
go

 /*
Table: Users
Comment: Зарегистрированные пользователи форума (мемберы) и Гость (IDUser=0).
*/ 
create table Users (
   IDUser       int             identity( 0  ,  1 ),   -- Уникальный ID пользователя.
 
   UName        varchar( 30 )     not null,   -- Уникальное Имя пользователя (зарегистрированного и "Guest").
 
   UPassword    varchar( 30 )     not null,   -- Пароль пользователя.
 
   URegistered  smalldatetime   not null  default getdate(),   -- Дата регистрации пользователя.
 
   ULocation    varchar( 30 )     not null,   -- Местонахождение пользователя ("Откуда").
 
    /* ... другие атрибуты профиля пользователя ... */ 
   constraint PK_Users primary key  (IDUser)
)
go

 /*
Table: Topics
Comment: Топики или ветки (threads), содержащие посты.
*/ 
create table Topics (
   IDTopic      int             identity( 1  ,  1 ),   -- Уникальный ID топика.
 
   IDForum      tinyint         not null,   -- ID форума, к-му принадлежит топик.
 
   IDUser       int             not null,   -- ID пользователя (0 = Guest), к-рый создал топик.
 
   UName        varchar( 30 )     not null,   -- Имя пользователя, к-рый создал топик.
 
   TCreated     smalldatetime   not null  default getdate(),   -- Дата-время создания топика.
 
   TName        varchar( 50 )     not null,   -- Название топика.
 
   constraint PK_Topics primary key  (IDTopic),
   constraint FK_Topics__Forums foreign key (IDForum)  references Forums (IDForum),
   constraint FK_Topics__Users foreign key (IDUser)  references Users (IDUser)
)
go

 /*
Table: Posts
Comment: Посты (постинги) в форуме.
*/ 
create table Posts (
   IDPost               int             identity( 1  ,  1 ),   -- Уникальный ID поста.
 
   IDTopic              int             not null,   -- ID топика, к-му принадлежит пост.
 
   IDUser               int             not null,   -- ID пользователя, к-му принадлежит пост.
 
   UName                varchar( 30 )     not null,   -- Имя пользователя, к-му принадлежит пост.
 
   PCreated             smalldatetime   not null  default getdate(),   -- Дата-время создания поста.
 
   PSubj                varchar( 50 )     not null,   -- Тема поста.
 
   PBody                varchar( 4000 )   not null,   -- Тело-сообщение поста.
 
   constraint PK_Posts primary key  (IDPost),
   constraint FK_Posts__Topics foreign key (IDTopic)  references Topics (IDTopic),
   constraint FK_Posts__Users foreign key (IDUser)  references Users (IDUser)
)
go


то соответственно и запросы для этих вариантов:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
 /*
 Возвращает имена топиков, сортируя по дате создания топика.
 */ 
select t.TName from Topics as t
 where t.IDForum = @forum_id order by t.TCreated desc

 /*
Возвращает имена топиков, сортируя по дате последнего поста. 
*/ 
select t.TName from Topics as t inner join Posts as p
 on p.IDTopic = t.IDTopic and t.IDForum = @forum_id order by p.PCreated desc 

Извиняюсь, что немного унифицировал имена ("TopicName" -> "TName" и т.д) по аналогии с таблицой Users
...
Рейтинг: 0 / 0
Структура таблиц этого форума
    #32277769
Фотография Groove
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уважаемый Репликант!

Вопрос то и заключался в том КАК СЛИТЬ ЭТИ ДВА ЗАПРОСА В ОДИН
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
 /*
 Возвращает имена топиков, сортируя по дате создания топика.
 */ 
select t.TName from Topics as t
 where t.IDForum = @forum_id order by t.TCreated desc

 /*
Возвращает имена топиков, сортируя по дате последнего поста. 
*/ 
select t.TName from Topics as t inner join Posts as p
 on p.IDTopic = t.IDTopic and t.IDForum = @forum_id order by p.PCreated desc 

и получить набор топиков, отсортированный, как я понимаю, следующим образом:
либо по дате создания топика, если нет постов для этого топика
либо по дате последнего поста, если есть посты для этого топика
...
Рейтинг: 0 / 0
Структура таблиц этого форума
    #32278969
Репликант
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и получить набор топиков, отсортированный, как я понимаю, следующим образом:
либо по дате создания топика, если нет постов для этого топика
либо по дате последнего поста, если есть посты для этого топика


А под "нет постов для этого топика" имеется в виду, что топик был создан, но никто в него не постил, т.е там есть только один пост от автора топика?
...
Рейтинг: 0 / 0
Структура таблиц этого форума
    #32279008
Фотография Groove
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
начинаю втыкаться. :-)))
При создании ветки создается топик и первый пост одновременно???
я то думал только топик, без поста!!!
тогда вопросов нет вообще!
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Структура таблиц этого форума
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]