2010-12-29 3 views
0

Я пытаюсь создать таблицу голосования и максимизировать производительность. Поскольку голосование может быть только UP или DOWN, я думаю об использовании bit, где 1 = up и 0 = down это неинтуитивно? Есть ли способ лучше?Помощь с использованием схемы схемы голосования

UserVotes (3 way primary key between all three tables) 
+----------+----------+-------------+ 
| UserID | IsUp | CommentID | 
+----------+----------+-------------+ 
| 1  | 1  | 99   | 
| 2  | 0  | 99   | 

т.д.

Обновления будут происходить, когда пользователь нажимает на голосование вверх или вниз голосование кнопка

If VoteUpButtonClicked Then 
    VoteService.Add(userID,True, CommentID) 
End If 

If VoteDownButtonClicked Then 
    VoteService.Add(userID, False, CommentID) 
End If 

Тогда звонки будут "считать"

Dim TotalUpVotes = VoteServce.QueryVotes().Where(Function(v) v.IsUp And v.CommentID = CommentID).Count 
Dim TotalDownVotes = VoteService.QueryVotes().Where(Function(v) Not v.IsUp And v.CommentID = CommentID).Count 

Я использую SQL Server 2008 и Linq to SQL.

И да, я хотел бы разрешить пользователям удалять голоса.

+0

Как вы будете использовать стол? Сколько обновлений в секунду? Сколько запросов в секунду? Какие запросы? –

+0

Кроме того, какая база данных и версия? –

+0

могут ли пользователи удалять свои голоса? – hunter

ответ

0

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

UpVote INT DownVote Int

+1 к применимому колонку, когда пользователь голосов.

Хранить голоса в таблице журнала

UserID CommentID ISUP (бит)

Если пользователь удаляет свой голос, вы можете опрашивать ISUP и -1 на любом UpVote или DownVote.

+0

Это может быть не плохая идея, чтобы дополнить ответ @ hunter. благодаря –

3

Как насчет:

UserId (int) PK 
CommentId (int) PK 
Vote (tinyint) (1 or -1) 
Voted (Date) 

Тогда вы можете просто просуммировать значения

+0

Поскольку это одна из моих самых частых таблиц хитов, я пытаюсь разработать ее с учетом производительности. Будет ли «tinyint/sum» работать одинаково, а также «бит/счет»? –

+0

Не забывайте 'CommentID' –

+0

@Tim Это было добавлено позже, но я обновлю – hunter

0

Так как вы один, который будет оборачивать таблицу логики для выполнения требований проекта, я бы предположить его вам нужно ответить на вопрос, интуитивно ли он или нет. Он должен быть интуитивным для вас.

Смежные вопросы