动态数据库结构

时间:2010-12-08 16:20:15

标签: database database-design

我想在特定问题上提供一些数据库/编程建议。

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

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

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

我的问题是:

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

3 个答案:

答案 0 :(得分:3)

  

如何保持结构动态,而不必重新审视我的标准布局以适应新的数据字段或不同的结构?

基本上,您可以转动列和行的正常数据库概念。

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

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

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

数据字段可以保存每种类型的数据。在大多数数据库中,这将是VARCHAR(MAX)。由上传过程将日期和数字转换为字符串。

您的数据表将包含识别数据字段所属人员的其他信息的外键。

  

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

简短的回答是,你不能。

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

  

我最后也是最重要的问题。是否有更好的方法来实现这一目标而不是上传基础设施?

这是一个难以回答的问题,在不了解更多关于您正在接收的数据类型的情况下,但是有一些软件允许您在没有大量编程的情况下加载数据库,方法是定义输入数据结构并将该结构映射到你的数据库表。

答案 1 :(得分:1)

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

使用非关系表的常用方法:

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

一切都很好,但如果偶尔出现一部手机,一部手机,一部传真电话等,你会怎么做?

相反,你所做的是:

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

Person和Phones之间存在一对多的关系,并且可以有从0到数万的任意数量的关系。这些表由Person_ID加入。您必须具有枚举Phone_Type列的业务和表示逻辑(或者只是让它成为自由格式,这不是那么有用但更容易)。

您可以为任何属性执行此操作,并且是关系数据库的全部内容。我希望这会有所帮助。

答案 2 :(得分:0)

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

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

您可以强制客户符合您的型号吗?这允许您提前了解字段并使业务逻辑对字段起作用。它还允许您编写有意义的报告,而不仅仅是轮转数据转储。