【问题标题】:Database structure for non linear data非线性数据的数据库结构
【发布时间】:2011-01-03 19:12:54
【问题描述】:

我需要有关数据库结构的建议。我需要在少数特定网站上从网络上捕获有关某个特定主题的数据,并将该数据插入数据库。

这个任务的问题是信息不是线性的,如果我尝试为所有可能的数据设计带有字段的表,我最终会得到许多具有 NULL 值的行字段。这有什么问题(最终有许多具有 NULL 值的行字段)?或者我应该使用其他类型的结构?例如,将数据存储在一个字段中,该字段包含与数据的关联数组。

我对非线性数据的意思如下:

array(
      'name' => 'Don',
      'age'  => '31'
     );


array(
      'name' => 'Peter',
      'age'  => '28',
      'car'  => 'ford',
      'km'   => '2000'
     );

在特定的网站搜索中,我将仅存储“姓名”和“年龄”,而在其他网站中,我将存储“姓名”、“年龄”、“汽车”和“公里”。

我不知道我是否解释了我的问题。我的英语不是很好。

最好的问候。

【问题讨论】:

    标签: database-design


    【解决方案1】:

    这类问题正是 NoSQL 解决方案擅长的领域。对于传统数据库,您必须提前指定所有列,而 NoSQL 解决方案让您可以选择添加任何类型的数据。

    因此,这取决于您是否拥有固定数量的数据。如果您已经知道将使用的所有列。您可以将列添加为NULL

    如果您还不知道所有列并期望将来会有更多列,那么 NoSQL 解决方案会更好。

    【讨论】:

      【解决方案2】:

      你有很多选择,

      • 使用支持对象的数据库

      • --"-- 支持xml

      • 您的解决方案,将 baseinfo 保存在一个表中,将属性保存在另一个表中。

      就我个人而言,我会使用 3),既简单又快速。并且不会将您束缚在特定的范围内 数据库或软件。

      问候, /t

      【讨论】:

        【解决方案3】:

        好的,让我们回顾一下..假设您对数据库最熟悉..您总是可以将非线性结构分解为线性类型..只有查询性能会受到影响..

        在具有大量空值的行中没有问题。取决于 db 实现,但我以前见过这样的设计,它们非常灵活。

        让我举个例子 假设我们必须存储每周的工作时间..但在您的情况下,一周可以有任意天数。

        所以你定义了一个包含像

        这样的列的表

        StartDate, Id, MondayHour, Tuesdayhour, etc..upto SundayHour 如果您想添加另一个小时,例如 MondayHour1,只需添加该列并修改您的查询。

        存储相同的结构是线性(规范化)方式(不确定线性是否在这里是一个正确的词)只需定义一个表如下DayID,DayName

        然后您的小时表将包含 StartDate、ID、DayID、Hours.. 只是现在您需要连接两个表。

        希望我已经正确理解并回答了您的问题

        【讨论】:

          猜你喜欢
          • 2015-08-09
          • 1970-01-01
          • 1970-01-01
          • 2014-10-18
          • 1970-01-01
          • 2018-01-12
          • 2011-02-28
          • 1970-01-01
          • 2010-10-30
          相关资源
          最近更新 更多