布局此数据库设计的正确方法是什么?目前的设计看起来很臃肿

时间:2013-09-25 01:33:45

标签: c# asp.net sql sql-server database

我的任务是修改一个运行在sql server数据库中的网站,该数据库包含5个主要类别,这些类别都被卡在一个表中。

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

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

“画廊”表包含有关图库(专辑)的信息。

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

以下是表格的样子。

媒体

MEDIA

画廊

enter image description here

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

类似的东西:


ID
MediaID
MediaTypeID
VideoTitle
VideoDesc
等...

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

笑话
ID
MediaTypeID
JokeTitle
JokeDesc

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

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

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

OR

我应该坚持使用这种臃肿的桌面设计吗?

我正在寻找一个方向,并牢记最佳实践。

谢谢!

2 个答案:

答案 0 :(得分:1)

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

我不认为需要一个"主要"表atm。有几个具有媒体特定列的不同表是可以的。通常情况下,有一个客户或用户字段与此类数据相关联,这些数据将用作连接表,但它不适合您的用例,这很好。

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

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

答案 1 :(得分:0)

我认为数据库在结构方面相对较好。如果为每个类别创建一个表,您将引入冗余,这对于数据库设计来说是禁忌。你可以做的是为画廊添加一个标志,并使用该标志按类型对画廊进行排序,但我真的没有看到这一点,只要你有一些画廊,每个画廊只有一种类型。 / p>

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

更新:我看到人们倾向于选择分组表格,所以我觉得有必要解释我的意见。 在我看来,你目前所拥有的媒体类型分享了大部分领域,或者我应该说全部。即使你有一些空值,即使你拆分了表,或者你没有,结果表可能会有一些相同的空值。