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
列将有助于我思考?