(目前正在观看视频)的表格设计?

时间:2010-04-16 06:18:26

标签: asp.net sql

我正在视频门户上做一个项目。在那,我正在尝试建立一个目前观看视频的地方。为了吸引目前正在观看该视频的人,我设计了一个这样的表:

表:(列)

斯诺
视频ID
会话ID
用户ID
createddate

这些是专栏,但我认为这还不够。如果可能,你能帮助我吗?我该如何设计桌子?我们如何才能完美呈现当前观看的视频?

请帮帮我。谢谢。

2 个答案:

答案 0 :(得分:0)

一般来说,我会推荐类似于以下的模型:

<强>表格

  • 用户
  • 视频
  • VideoView

[User]和[Video]的列将包含特定于每个实体的属性,例如“createdate”。 [VideoView]表格为link table,其中包含以下列:

<强>列

  • VideoViewID (非空) - 如果需要可以命名为Sno
  • VideoID (非空) - 链接到[Video]表的主键
  • UserID (非空) - 链接到[用户]表的主键
  • StartDate (非空) - 表示视图开始日期时间戳的日期时间值
  • EndDate (null) - 表示视图结束日期时间戳的日期时间值
  • SessionID (非空) - 唯一标识用于跟踪的Web服务器会话
  • 创建(非空) - 创建/保存记录到db时的datetime值reporesenting

由于您可能有访问者“下载”,用户在以编程方式存储VideoD的EndDate之前关闭其浏览器,您可能希望对数据进行后处理以更新EndDates具有null值价值&lt; VideoView.StartDate + Video.Length&gt;使用更新语句和计划任务。


目前观看的视频可以使用SQL查询:

select * from VideoView 
where StartDate <= getdate() 
and isnull( EndDate, getdate() ) >= getdate()

希望有所帮助

答案 1 :(得分:0)

你的设计很好看。我会添加两个字段:

beginView : DATETIME (not NULL)
endView : DATETIME 

当您开始流式传输视频时,您可以使用userid,sessionid,videoid,beginView时间和视频打开时间向表中添加新行(假设当前时间,除非您有其他可用信息。 )我假设Sno是一个标识列,您可以通过调用来插入行。此ID存储在会话中。当会话关闭时,可以通过更新endView值来关闭所有打开的记录 - 它们不再是“当前”视图。

要查找当前行,请使用WHERE子句

WHERE endView IS NULL. 

endView中的NULL值表示视频仍在观看中。

通过常见的浏览器行为,视频会流式传输到客户端,通常比查看视频要快得多。要准确报告视频何时不再被观看,您可以安排浏览器发回视频已完成的通知。

您可能想要考虑用户长时间点击暂停按钮时会发生什么。他们还在看那个视频吗?

请注意,除非您在门户网站中明确禁止该视频,否则同一用户可能会同时观看多个视频,可能是相同的视频,并且根据您的会话管理情况,它们可能会出现在相同的视频下会话。这会影响用于存储会话中正在查看的视频的数据结构。

为了确保合理的性能,我会在videoid和endView上添加索引。这将支持查询正在观看特定视频的人,例如

SELECT [DISTINCT] userid FROM VideoView where videoid=? AND endView IS NULL.

DISTINCT标志严格正确,但这仅适用于同一用户多次查看视频的情况。它可以减慢查询速度,因此可以对重复数据删除的成本进行分析和权衡。

在启动时,您可能希望运行更新查询,将endView设置为endView为NULL的行的startView。如果会话未正确关闭服务器端(例如,应用服务器崩溃),就会发生这种情况。