【问题标题】:Optimal Database Design with a lot of text(active record and postgres)具有大量文本的最佳数据库设计(活动记录和 postgres)
【发布时间】:2014-02-17 10:10:14
【问题描述】:

我有一个在逻辑嵌套结构中存储大量数据的模型。数据的结构是一个嵌套数组,如下:

A>B>C

A 中大约有 50k 个项目,每个 A 有 200 个 B,每个 B 有 50 个 C。因此有 1000 万个 B,5 亿个 C。但是,每个 C 都很小,通常是 2-10 个字符文本。

看来我有三个选择:

1.Have one table for A, and store B and C as text in a column in table A
2. Have two tables, one for A and one for B that is associated with A, 
3. Have three tables, one for each of the levels in my hierarchy.

我是数据库设计的新手,所以我不确定哪个是最好的。我担心一个 5 亿行的表即使正确索引也会使访问该表中的任何条目变慢。因此,例如如果每个 C 在 b_id 上都有一个索引,那么搜索具有特定 b_id 的所有 C 将非常慢。

【问题讨论】:

  • A、B、C三者关系的本质是什么?一对多?
  • 是一对多,所以 A 有很多 B,B 有很多 C
  • 我对反过来更感兴趣:每个 C 只有一个 B?每个 B 只有一个 A?
  • 每个 B 可以属于多个 A 吗?
  • 抱歉,不清楚。是的,每个C只有一个B,每个B只有一个A

标签: sql performance postgresql activerecord


【解决方案1】:

使用三个表,A、B 和 C。Postgres 通常会处理得很好...... Postgres 数据库比你在野外描述的要大得多;例如,Skype。

因此,例如,如果每个 C 在 b_id 上都有一个索引,那么搜索具有特定 b_id 的所有 C 将非常慢。

如果索引正确,那将是快速。不慢。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-16
    • 2012-08-10
    • 2015-10-17
    • 2014-07-18
    • 2012-11-30
    • 1970-01-01
    • 1970-01-01
    • 2011-08-27
    相关资源
    最近更新 更多