2013-03-08 43 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