什么是在我的sql数据库中存储自定义报告设置的推荐架构/数据库设计?

时间:2015-01-24 17:33:45

标签: sql-server json database-design report

我正在构建一个工具,允许人们创建自定义报告。我的问题解决了获得正确的数据库架构和设计以支持一些自定义报告设置。

在设计方面,我有各种幻灯片,每个幻灯片都有一堆设置(如日期范围等)。 报告基本上是幻灯片的有序列表

要求是:

  1. 用户可以通过按照他们希望的任何顺序组合“幻灯片”列表来创建报告
  2. 用户可以在具有不同设置的报告中包含相同的幻灯片两次
  3. 所以我想考虑下面的表格:

    报告表: ID,名称,说明
    幻灯片表:,Id,说明
    ReportSlide表: ReportId,SlideId,订单,幻灯片设置

    我的两个主要问题是:

    1. 订单:这是管理用户可以在任何指定报告上订购幻灯片这一事实的最佳方式

    2. SlideSettings:因为每张幻灯片都有不同的设置(输入),我想把它存储为json blob,然后在前端解析出来。有人认为这是错误的设计吗?是否有更好的方法来存储此信息(同样,每张幻灯片都有不同的输入,您可以在报告中将相同的幻灯片列出两次,每个幻灯片都有不同的设置

4 个答案:

答案 0 :(得分:2)

  

订单:这是管理

的最佳方式吗?

这是正确的方法。

  

SlideSettings:...将其存储为json blob

如果您从不打算查询这些值,那就没关系。

您可能希望将ReportSlide重命名为SlideInReport。关系不应仅列出引用的表,而应列出关系的性质。

有些人(我)更喜欢给PK列和FK列提供相同的名称。然后,您无法使用Id,但您需要将其称为sld_id, rep_id

答案 1 :(得分:1)

可能你应该有一个设置表。您可能还需要ValueTypes表来定义哪个设置可以采用何种值。 (例如日期范围)。然后让设置ID列表存储在幻灯片中。

毋庸置疑,这些"最佳方式将取决于存储的数据的类型和数量等。我是JSON等新手,但据我所知,它并非如此一个好主意是将JSON字符串保留为数据库字段,但不是规则。

答案 2 :(得分:1)

我认为,从高层次来看,您的架构将起作用。但是,您可以考虑修改某些表结构。例如:

设置

最好为ReportSlide表的每个设置添加列,而不是JSON blob。根据您允许的输入,为每个输入提供一列。例如,您的日期范围需要有StartDate / EndDate,整数,文本字段等。

幻灯片表的用途是什么?如果您的数据库允许幻灯片和报告之间存在多对多关系,则ReportSlide表将保留您的所有设置。你的幻灯片表会有属性吗?如果没有,那么也许你需要报告幻灯片。例如:

Report Table: ReportID | DateCreated | UserID | Description
ReportSlides Table: ReportSlideID | ReportID | SlideOrder | StartDate | EndDate | Description...

除非您的Slide表将包含在每个报表中都很常见的特定属性,否则您不需要额外的连接或空格。

根据工具的不同,您可能还希望拥有DateCreatedUserIDFolderID等属性,以便人们整理报告。

如果幻灯片彼此依赖,您将需要添加约束,因此如果幻灯片3依赖幻灯片2,则无法删除幻灯片2。

<强>顺序

关于订单,拥有SlideOrder列会有效。由于每个ReportSlideID都有相应的报告,因此仍可以更改SlideOrder。这样,如果ReportSlideID = 1属于ReportID = 1且具有特定设置,则可以订购第7或第3个并仍然有效。

请注意您的命名约定。如果Order列直接引用Slide Order,则继续并将其命名为SlideOrder。

我确信还有其他一百种方法可以提高效率。这是我最初的想法,基于你提供的内容。

答案 3 :(得分:1)

报告表:ID(主键),名称,说明,....

幻灯片:ID(PK),名称,说明,...

Slide_x_report表:ID(PK),ReportID(FK),SlideID(FK),订单

Slide_settings表:ID(PK),NameSetting,DescriptionSettings,SlideXReportID(FK),...

我认为你应该有这样的结构,并且在Slide_settings表中你将按报告设置不同的幻灯片。

想象一下,slide_settings表可能包含动态表单,这些表格应该与报表的特定幻灯片相关,这样您可以正确存储它们和slide_settings表,您只需要定义一个列所需的列幻灯片的元素。