2013-03-08 54 views
0

我需要关于模式更改的帮助。我有一个存储视频的视频表,我想知道视频的实际ViewCount维护视频文件的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 2013-03-08 10:35:38

+0

上使用唯一键。感谢@bummi提示和FirstSeendate列建议。 – Prabhat 2013-03-08 11:13:09

回答

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 2013-03-08 11:11:42

+0

如果用户可以被识别,您可以将他添加到ViedeoView,如果您的维护中未使用ViewCountUnIdentified字段,则可以使用Count将被ViewCountUnIdentified +(Subselect)。 – bummi 2013-03-08 11:18:25

+0

谢谢@bummi和是的公众不能确定的视角,直到我们有IP跟踪(至少,我认为)。那么'VideoFiles'表中的'ViewCountUnIdentified'列将有助于我思考? – Prabhat 2013-03-08 11:22:01

1

创建一个表

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

这将有助于you.You就能从商业角度给出每一个答案。像总观看次数,查看次数/每天或独特访问次数/每天。同样为一周,几个月和一年。 UserVisit还可以添加更多属性。

+0

漂亮又快速的解决方案@Ravi。谢谢你。所以在这里我可以找到应用程序用户的独特视图。如果我想将视图扩展到外部用户会发生什么?我仍然可以像YouTube一样保持唯一性吗? – Prabhat 2013-03-08 11:06:05

+0

@Prabhat:您可以将它们记录为匿名用户。您可以添加'SessionNumber/Id int/UniqueIdentifier'作为列。您可以获得该会话的跟踪视图。 – 2013-03-08 11:20:34

+0

是的@Ravi,我认为你在这里有一个很好的观点,但是当我的'userid'是'int'类型的时候,我怎样才能将用户和会话ID分开(我认为这不会是'int')。 – Prabhat 2013-03-08 11:26:36