设计: -
1)故事板上有许多幻灯片,每张幻灯片都有一个或多个标题或图片。
2)每个故事板可以有一个或多个作者,零个或多个评论者。
3)每个对象的图像,幻灯片和标题(可能更多的对象将在稍后出现,如音频等)可以对它们进行评论。这些评论可以由作者或评论者提供。为了存储评论,我创建了一个评论表。
4)有必要记住幻灯片中幻灯片的顺序和图像的顺序,我正在使用幻灯片和图像编号字段。
5)由于可以对任何对象给出注释,我需要为每个对象都有一个全局ID,因为它们的引用将存储在注释表中。为了维护全局id,所有以name GID结尾的字段是使用默认值生成的唯一标识符:NEWID()。
6)用户存储在用户表中。
7)用户应该只能查看和加载他是作者,评论者或所有者的故事板。
请建议对此数据库设计进行改进。
答案 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
列添加到作者表中)
最后的观察:
用户应该只能查看和加载他创建的故事板。
它不会改变数据模型.. =)但是,如果只有作者可以查看故事板,谁会审查它们?
我的观察只是肤浅的,我发现模型很好地适应了问题
祝你好运