0

我的任务是改造一个运行 sql server 数据库的网站,该数据库包含 5 个主要类别,所有类别都挤在一个表中。

当前数据库有 2 个表:媒体和画廊。

媒体表包含 5 个主要类别中每个类别的所有信息。(视频、游戏、卡通、图片、笑话)

画廊表包含有关画廊(专辑)的信息。

某些列为空,因为没有与该 MediaType 关联的信息。例如:笑话永远不会有与之关联的 MediaHeight 或 MediaWidth。

以下是表格的外观。

媒体

媒体

画廊

在此处输入图像描述

最佳做法是将每个 MediaType 拆分到自己的表中吗?

就像是:

视频
ID
MediaID
MediaTypeID
VideoTitle
VideoDesc
等...

游戏
ID
MediaID
MediaTypeID
GameTitle
GameDesc
GameWidth
GameHeight
等...

笑话
ID
MediaTypeID
JokeTitle
JokeDesc

一旦所有数据都被拆分到各自的表中,我应该有一个主表来查询和执行连接吗?我不确定那张桌子会是什么样子......

目前,主页查询可能包含每个 MediaType 在任何给定时间的记录。内容会根据用户上传的内容频繁更改。使用这 5 个表格布局,包含来自每个媒体表格的数据的查询看起来如何?(视频、游戏、笑话等)

在向当前设计添加新媒体时,只需在 Media 表中添加新行,主页查询就会自动获取它。我不确定插入查询如何处理 5 个表。我需要更新主表,然后还需要更新单个 MediaType(例如:Jokes)表吗?

或者

我应该坚持这种臃肿的桌子设计吗?

我正在寻找一些方向,同时牢记最佳实践。

谢谢!

4

2 回答 2

1

如果可以提供帮助,请不要坚持当前的设计。正如您所说,它臃肿而丑陋,查询并且必须进行各种检查以判断列是否应该为空。这使得验证非常困难,如果有人正在创建一个新视频,您无法检查当前的媒体表以查看需要哪些字段,但您可以使用单独的视频表。

我认为不需要“主”表自动取款机。有几个具有媒体特定列的不同表很好。通常,有一个客户或用户字段将与此类数据相关联,这些数据将用作连接表,但它不适合您的用例,这很好。

对于主页,尝试使用 union。在过去一小时内从每个表中选择 * 并将结果合并以获得一个结果集。对于插入,只需插入到相应的表中。那张臃肿的桌子就是一团糟,不是很清楚,而且很难维护。

这五个表应该更容易编写代码。

于 2013-09-25T01:42:59.613 回答
0

我认为数据库在结构方面还算可以。如果您为每个类别制作一个表格,您将引入冗余,这对数据库设计来说是一个禁忌。您可以做的是为画廊添加一个标志并使用该标志按类型对画廊进行排序,但如果您只有几个画廊并且每个画廊只有一种类型,我真的不明白这一点。

我看到当前结构在 Media 表中有一个“MediaTypeID”字段。为了冗余,您可以将该字段移至 Gallery 表。

更新:我看到人们倾向于使用拆分到表格的方法,所以我觉得有必要解释我的观点。在我看来,您目前拥有的媒体类型共享大部分领域,或者我应该说全部。即使您有一些空值,即使您拆分表或不拆分表,生成的表也可能会有一些相同的空值。

于 2013-09-25T01:43:15.497 回答