Sql server 维护视频文件的ViewCount数

Sql server 维护视频文件的ViewCount数,sql-server,database,database-design,Sql Server,Database,Database Design,我需要有关架构更改的帮助。我有一个存储视频的视频表,我想知道视频的实际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

我需要有关架构更改的帮助。我有一个存储视频的视频表,我想知道视频的实际
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

所需的结构可能如下所示

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
创建一个表

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

这将对你有所帮助。你将能够从商业角度给出每个答案。如总视图、视图/天或唯一访问/天。周、月、年也是如此。还可以为UserVisit添加更多属性。

您需要一个像VideoId/UserID/FirstSeenDate 1:N这样的表,在VideoId/UserID上有唯一的键感谢@bummi的提示和
FirstSeenDate
列建议。很好的快速解决方案@Ravi。谢谢你。因此,我可以在这里找到应用程序用户的独特视图。如果我想将视图扩展到外部用户,会发生什么?我还能像YouTube一样保持唯一性吗?@Prabhat:你可以以匿名用户的身份登录他们。您可以添加
SessionNumber/Id int/UniqueIdentifier
作为列。您至少可以跟踪该会话的视图。是的@Ravi,我认为您在这里有一个很好的观点,但是当我的
Userid
int
类型时,如何区分用户和会话ID(我想这不会是
int
),谢谢@Ravi的澄清。现在我明白你的意思了。我试图让这两个答案都被接受,但我不能这样做,我也没有那么多的声誉去投票/指向这些答案。感谢@bummi为你的观点提供解决方案。如果我想将视图扩展到外部用户,会发生什么?我还能像YouTube一样保持唯一性吗?如果可以识别用户,您可以将其添加到ViedoView,如果不能使用主表中未识别的field ViewCount,则可以使用Count。Count将是ViewCountUnIdentified+(Subselect)。谢谢@bummi,是的,在我们进行Ip跟踪之前,目前无法识别公共视图(我想至少是这样)。那么
VideoFiles
表中的
ViewCountUnIdentified
列将有助于我思考?