2010-12-08 95 views
0

我想就特定问题提供一些数据库/编程建议。动态数据库结构

我有5个不同的人(生活在世界的不同地区)为我提供数据。遵循标准的结构布局,这些数据以各种方式提供给我。然而,它并不总是协调一致的,数据可能有额外的东西不在标准中,所以我希望结构尽可能动态以适应人们想要使用的东西。

然后将这5个数据源放置在主机的中央数据库中。所以基本上我有5个数据源按照标准结构格式化,并且它们被上传到我的本地数据库。

我想尽可能为提供数据的人自动上传这些数据,所以我希望他们上传自动插入到本地数据库的新数据集。

我的问题是:

  1. 我应该如何保持结构的动力,而不必重新审视我的标准布局,以适应新的数据字段,或者不同的结构?
  2. 如何让他们以增量方式上传数据?例如,他们可能正在上传他们的数据的XML版本,我的上传代码应该找出已经存在的内容。
  3. 我最后的也是最重要的问题。有没有更好的方法去做这件事,而不是有一个上传基础设施?
+0

也许一些静态结构的核心列和EAV的动态?数据收到时会发生什么?这些附加字段如何使用? – 2010-12-08 16:25:02

回答

3

我应该如何保持结构动态而不必重新访问我的标准布局以适应新的数据领域或不同的结构?

基本上,您将透视列和行的正常数据库想法。

您有一个数据名称表,它包含数据字段的唯一名称,以及一个指示符,用于告知导入过程存储了哪些类型的数据,如日期,时间戳或整数。

您有一个数据表,其中包含数据名称id,序列号,数据字段和用于标识信息的外键。

序号用于区分同一数据名称的不同值。

数据字段包含可能的每种类型的数据。这在大多数数据库中都是VARCHAR(MAX)。上传过程将日期和数字转换为字符串。

您的数据表将有一个外键用于标识数据字段所属的其他信息。

如何让他们以增量方式上传数据?例如,他们可能正在上传他们的数据的XML版本,我的上传代码应该找出已经存在的内容。

简短的回答是,你不能。

您的上传过程必须识别重复数据,而不是将其存储在数据库中。

我最后的也是最重要的问题。有没有更好的方法去做这件事,而不是有一个上传基础设施?

这是一个很难的问题没有更多地了解您收到的数据类型来回答,但是有软件,让您加载数据库,而很多节目,通过定义输入数据结构和地图该结构到您的数据库表。

1

这是一个非常普遍的问题,但我想我有一个普遍的答案。我认为解决您的问题的方法是构建一个新的关系演算,其中附加到主记录的属性不是预先确定的。这是一个涉及电话簿应用程序的例子。使用非关系表

常用方法:

  • 表PERSON有名称, HOMEPHONE,OfficePhone列。

一切都很好,但你会怎么做,如果偶尔人显示了一个手机,一个以上的移动电话,传真电话等

相反,你要做的是:

  • 表人名有Person_ID, 名称。
  • 表电话有列Person_ID, Phone_Type,PhoneNumber。

人与电话之间存在一对多的关系,可以有任意数量的从零到数万的关系。这些表由Person_ID联接。您必须具有列举Phone_Type列的业务逻辑和表示逻辑(或者让它成为自由格式,这不是很有用,但更容易)。

你可以为任何属性做这件事,并且是关系数据库的全部内容。我希望这有帮助。

0

正如其他人所说,EAV表格可以处理动态结构。 (请注意大桌子上的性能问题)

但是您的数据库字段是否由客户端指定是否符合您的兴趣?你不能编写商业逻辑来对这些新领域采取行动,因为它们还不存在,它们可能是任何东西。

你能强制客户端符合你的模型吗?这使您可以提前知道这些字段,并使业务逻辑根据字段进行操作。它还允许您编写有意义的报告,而不仅仅是调整数据转储。