建议对数据库设计进行改进

时间:2011-04-14 08:39:17

标签: sql database sql-server-2008 database-design

设计: -

1)故事板上有许多幻灯片,每张幻灯片都有一个或多个标题或图片。

2)每个故事板可以有一个或多个作者,零个或多个评论者。

3)每个对象的图像,幻灯片和标题(可能更多的对象将在稍后出现,如音频等)可以对它们进行评论。这些评论可以由作者或评论者提供。为了存储评论,我创建了一个评论表。

4)有必要记住幻灯片中幻灯片的顺序和图像的顺序,我正在使用幻灯片和图像编号字段。

5)由于可以对任何对象给出注释,我需要为每个对象都有一个全局ID,因为它们的引用将存储在注释表中。为了维护全局id,所有以name GID结尾的字段是使用默认值生成的唯一标识符:NEWID()。

6)用户存储在用户表中。

7)用户应该只能查看和加载他是作者,评论者或所有者的故事板。

请建议对此数据库设计进行改进。

Database Diagram

1 个答案:

答案 0 :(得分:1)

我发现并非所有的表都有PK,实际上我只看到用户表有一个,故事板使用名称和所有者作为PK?

我更喜欢对我的所有表使用id,除了用于NxN关系的中间表,就像你在作者和审阅者那样。你做了同样的事,但你称之为GID。我将它们用作PK(也是自动增量)。

如果一个对象与另一个表上的另一个对象具有相同的GID,请不要担心,因为在您的注释表中,您有ObjType指定与该对象相关的表。如果用户的GID与StoryBoard的GID相同,那就没问题。

我不习惯sql-server图表,但似乎关系没有很好地定义:我看到用户和故事板在1xN中相关但看起来像故事板和幻灯片是相关的1x1关系,当它也应该是1xN

故事板有一个拥有者和不同的作者,这意味着如果我创建一个故事板,故事板将在OwnersUserId中拥有我的id,我的id也将存储在authors表中?如果是的话,似乎没必要。或者......好吧......这取决于你的模型的概念。我看到两个选择:

  • 一个StoryBoard有一个作者和一个 或许多合作者

    (不要改变你的模型,只将作者表重命名为合作者或更精确的东西)

  • 一个StoryBoard有一个或多个 作者和其中一个是 所有者

    (删除用户和故事板之间的1xN关系,并将type列添加到作者表中)

最后的观察:

  

用户应该只能查看和加载他创建的故事板。

它不会改变数据模型.. =)但是,如果只有作者可以查看故事板,谁会审查它们?

我的观察只是肤浅的,我发现模型很好地适应了问题

祝你好运