【问题标题】:Best Practice for storing HistoryOfAllEvents and EventDetails存储 HistoryOfAllEvents 和 EventDetails 的最佳实践
【发布时间】:2013-05-03 12:50:21
【问题描述】:

我是数据库设计的新手,我正在尝试修复现有的混乱。

我有一个事件列表(包含事件的参数列),每个事件都有另一个事件详细信息表。
例如,这可能是一堆科学仪器的使用,然后每个运行事件在运行时都会收集一堆数据。

你会推荐什么结构?

我的第一个想法是为使用历史创建一个表,然后每一行都链接到自己的表,该表存储其收集的数据。但是如何将行链接到它的表?整个表是否有类似外键的东西?

我的第二个想法是拥有一个单一的收集数据表,并使用 P-key、F-key 将使用历史链接到收集的数据。但是如果我有数百台仪器,每台仪器每天收集数千个数据点,那么这张表会变得非常大(可能是 GB/年)。这样可以吗? (我是一名微控制器/嵌入式工程师,所以任何超过 MB 的东西对我来说都是巨大的。)

任何建议将不胜感激。谢谢!

【问题讨论】:

  • 这真的取决于特定的实现。您能向我们展示一些示例数据吗?我认为您的任何一个想法都可能奏效,但哪个最好——或者是否有第三种更好的方法——实际上取决于您的数据是什么样的。
  • 顺便说一句,每年增加 1GB 的数据应该不是问题。我想很多人会认为数 GB 的数据库非常小。
  • @JeffRosenberg 不幸的是,我不能发布任何真实的例子,所以我必须使用假设。您能否就哪些因素使一种方法优于另一种方法提出建议?
  • 在我假设的情况下,“使用历史”表有一堆小的 nvarchar()、Int、Float 和 Datetime,还有一个大的 nvarchar。 “事件详情”是一堆整数和浮点数。
  • 对我来说,这只是一个问题,即哪个空间浪费最少。如果使用您的第一种方法,您需要多少个子表?如果使用您的第二个,使用表中有多少列是可重复使用的,有多少列仅用于某些工具?

标签: sql foreign-keys primary-key database-schema


【解决方案1】:

根据您上面的 cmets,我认为您的第二个选项似乎是最好的 - 有一个收集数据的表,通过外键链接。只要你索引你的外键,你应该对几 GB 大小的表没有问题。

如果不查看您的数据,我真的无法建议是否有任何替代方案可能会更好,但这应该就可以了。

【讨论】:

    猜你喜欢
    • 2012-02-05
    • 2010-10-05
    • 1970-01-01
    • 2012-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-20
    相关资源
    最近更新 更多