存储此数据的最佳方式?

时间:2010-06-11 14:20:29

标签: database-design

我刚被指派翻新一个旧网站,我可以将它从一些旧的古老系统转移到drupal。唯一的问题是它是一个房地产系统,并存储了大量数据。目前所有信息都存储在一个表中,id表示房子,然后其他所有信息都是键/值对。每个庄园可能有243个密钥,系统中有23840个庄园。您可以想象系统很慢且难以查询。

我认为243行的表格不是一个好主意,可能比目前情况更糟糕。我做了一些调查,这是我发现的:

  • 缺少数据并不表示0值,数据是从两个唯一的源/格式合并而来的。涉及一些猜测。我无法控制数据来源。
  • 共有4个键 所有的庄园,所有的价值观都像 通常搜索的东西 可以编入索引
  • [90-100]%范围内有10个键
    • 其中8个是像谁在卖它的信息,以及它的地址。
    • 其他两个似乎属于以下范围
  • 有80个键位于[80-90)%范围内
    • 这个范围似乎主要是列出房间类型和房子的数量(例如卧室_可用,浴室,family_room_3等)
    • 此范围还包括一些次要信息,如学区,地址上还有一两条数据。
  • [0-80)%范围内的179个键包含有关庄园的各种杂项信息
  • 键是静态,有些可能会被输入随意添加或删除(虽然很少见。)

我最好的想法是混合方法,创建一个存储重要的公共信息的表,并保留一个较小的键/值表。

您如何存储此信息?

3 个答案:

答案 0 :(得分:2)

创建relational model

你已经有了

  • 卖方

  • 地址

  • Estate n - 1卖家

  • 遗产1--1地址

  • 卖家1--1地址

  • Estate 1 - n Room

对于其他misc数据(动态?),创建一个id / key / value表

答案 1 :(得分:1)

从某种意义上说,你很幸运,数据库已经做了很多确定需要为你存储哪些数据的工作。令人遗憾的是,懒惰的程序员不愿意为自己的工作做好准备。

我会将存储所有不同键值的关系表放在一起(你可以把它们组合在一起,我会有重复的值只有略有不同的名称)至少占20%记录。您的大多数字段都将允许空值。

我认为你是对的,定义最常见的东西,然后使用从这里添加的少数几个键值。或者如果你想要,你可以为非标准信息添加XML字段或文本字段。如果它是非标准的,那么查询的可能性有多大?

设置表格时,不要让它们太宽。你可能想要创建具有1-1关系而不是宽表的单独表。由于数据库如何存储数据页面的一些技术规范,这可以帮助提高性能。 JUst确保将所有必需的东西放在主表中而不是扩展表中。

答案 2 :(得分:0)

您需要查看实体关系模型。但是,如果你已经有了一个suck表,你应该查看Wikipedia上的五个规范化阶段。他们可以将suck表转换为一组好表。