多维数据类型

时间:2013-11-18 02:48:27

标签: data-structures types language-agnostic

所以我在想......想象一下,你必须编写一个代表整个大学时间表的程序。

该时间表有几个方面(例如):

  • 时间
  • 位置
  • 参加的个人
  • 讲师(S)
  • 受试者

您必须能够从多个角度显示日程安排:

  • 在特定时间范围内在一个地方举行的所有活动
  • 在特定时间范围内由个人参加的一切
  • 在某个时间段内由某位讲师讲授的所有内容

您如何保存此类数据,并保持从不同角度查看数据的能力?

我能想到的唯一方法是将它保存在您可能需要的每种形式中:

E.g。你有文件夹“学生”,其中每个学生都有一个文件,它包含何时,何地以及他必须在哪里。但是,您还有一个文件夹“locations”,每个位置都有一个文件,其中包含谁和为什么以及何时必须在那里。您拥有的角度越多,每个信息的比例就越大。

但这似乎非常低效,空间。

还有其他办法吗?

我对Javascript的了解是0,但是我想知道这样的事情是否可能,即使是这种空间效率低下的形式。

如果不是这样,我想知道它是否适用于任何其他标准(C ++,C#,Java等)语言,主要是Java ...

编辑:这可以通过使用MySQL数据库来完成吗?

1 个答案:

答案 0 :(得分:2)

基本上,您尝试首先存储数据,然后将其呈现在不同的视图下。

SQL数据库就是为此而准备的:从一端构建模式并在数据库中实例化它以存储数据(该语言称为数据定义语言,DDL),然后使用查询语言对其发出请求(SQL),你称之为“视图”。在SQL数据库中甚至有“视图”对象来构建这些视图在数据库中(而不是在用户代码中使用请求的代码)。

MySQL可以肯定地做到这一点,请注意,可以为Javascript(例如SQLite)编译一些SQL引擎,并使用本地Web存储来存储数据。

您的问题还有另一个方面:优化查询。虽然SQL可以为您的视图执行大部分请求作业。有时优选在所谓的“数据集”中创建请求结果的实际副本(这称为对请求进行非规范化),以便每个周期执行一次选择或计算聚合/组函数等的艰苦工作时间(假设特定视图仅在星期一更改),然后请求者只需阅读这些结果。在这种情况下,至少在语义上将主要数据与次要数据分开是很重要的(出于性能/用户权利原因,物理隔离通常是一个好主意)。

请注意,正如你引用MySQL一样,我写了关于SQL的文章,但是大多数数据库技术都可以做你搜索过的事情(层次化,面向对象,XML ......),只要你使用的特定实现足够灵活为您的数据和请求。

简而言之:

  • 我会使用SQL数据库来存储数据
  • 制作适当的观点/请求
  • 如果我需要巨大的请求性能,请提供适当的非规范化数据
  • 那里的语言并不重要,任何人都会这样做