2013-03-08 3 views
0

Мне нужна помощь в изменении схемы. У меня есть видеозапись, в которой хранятся видеоролики, и я хотел узнать фактическое ViewCount для видео.Поддержание количества просмотров для видеофайлов

Вот видео схема таблицы, которая у меня сейчас:

CREATE TABLE dbo.VideoFiles(
VideoId  int IDENTITY(1, 1) PRIMARY KEY, 
VideoTitle nvarchar(64) NOT NULL, 
VideoDescription nvarchar(2048), 
PublishDate date, 
Duration time, 
VideoUrl nvarchar(256), 
--ViewCount bigint, 
UpdateTime datetime default CURRENT_TIMESTAMP) 

я могу иметь ViewCount столбец, который будет увеличен на +1 на каждом запуске видеофайла, который выглядит как простой способ. Но как я могу управлять уникальностью в виде видео?

User1 view Video1 = Video1 Count =>1 
User2 view Video1 = Video1 Count =>2 
User1 view Video2 = Video2 Count =>1 
User1 view Video1 = Video1 Count =>2 (not increased as he already seen this video) 

Спасибо,
Prabhat

+0

Вам понадобится таблица, такая как VideoId/UserID/FirstSeenDate 1: N с уникальным ключом на VideoId/UserID. – bummi

+0

Спасибо @bummi за подсказку и предложение FirstSeendate. – Prabhat

ответ

1

Требуемая структура может выглядеть следующим образом

CREATE TABLE [dbo].[ViedeoViews](
    [VideoID] [int] NOT NULL, 
    [UserID] [int] NOT NULL, 
CONSTRAINT [PK_ViedeoViews] PRIMARY KEY CLUSTERED 
(
    [VideoID] ASC, 
    [UserID] ASC 
) ON [PRIMARY] 
) ON [PRIMARY] 

GO 

ALTER TABLE [dbo].[ViedeoViews] WITH CHECK ADD CONSTRAINT [FK_ViedeoViews_VideoFiles] FOREIGN KEY([VideoID]) 
REFERENCES [dbo].[VideoFiles] ([VideoId]) 
GO 

ALTER TABLE [dbo].[ViedeoViews] CHECK CONSTRAINT [FK_ViedeoViews_VideoFiles] 
GO 



Create View V_VideoFiles as 
Select dbo.VideoFiles.*,(Select COUNT(*) from ViedeoViews vv where vv.VideoID=VideoFiles.VideoID) as ViewCount 
from VideoFiles 
+0

Спасибо @bummi за ваше решение с видом. Что произойдет, если я хочу расширить представление для внешних пользователей? Могу ли я сохранить уникальность, как YouTube? – Prabhat

+0

Если пользователь может быть идентифицирован, вы можете добавить его в ViedeoView, если не поле ViewCountUnIdentified в вашей основной таблице может использоваться Count будет ViewCountUnIdentified + (Subselect). – bummi

+0

Спасибо @bummi, и да, взгляд со стороны общественности не может быть идентифицирован в тот момент, пока мы не будем отслеживать Ip (как минимум, я думаю). Значит, столбец «ViewCountUnIdentified» в таблице «Видеофайлы» поможет мне подумать? – Prabhat

1

Создать таблицу

UserId int/UniqueIdentifier 
VideoId Int 
TimeOfView Datetime 
SessionId int/UniqueIdentifier 

Это поможет you.You сможет дать каждый ответ из бизнес-точки. Как общий просмотр, просмотр/день или уникальные посещения/день. Аналогично за неделю, месяцы и год. Для UserVisit могут быть добавлены дополнительные атрибуты.

+0

Хорошее и быстрое решение @Ravi. Спасибо за это. Поэтому здесь я могу найти уникальный вид для пользователей приложения. Что произойдет, если я хочу расширить представление для внешних пользователей? Могу ли я сохранить уникальность, как YouTube? – Prabhat

+0

@Prabhat: Вы можете зарегистрировать их как ANONYMOUS user. Вы можете добавить 'SessionNumber/Id int/UniqueIdentifier' в качестве столбца. Вы можете по меньшей мере отслеживать представления для этого сеанса. –

+0

Да @ Ravi, я думаю, у вас есть хороший момент, но как я могу отделить пользователей и идентификаторы сеанса (я думаю, что это не будет 'int'), когда мой' Userid' является 'int'. – Prabhat

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