【发布时间】:2022-01-19 09:29:38
【问题描述】:
一个 csv 文件包含以下两列:admission_number、project_name。 两个实体之间的关系是多对多关系:一个特定的 admission_number 可以用于多个项目。一个特定的项目可能有多个admission_number。
数据将如下所示,最初有“1000 百万”行,并且该表中的数据将每天更新,将达到 1300 百万行。
admission_number,project_name
1234567890,ABC1234567
1234567890,ABC1234568
1234567891,ABC1234569
1234567892,ABC1234569
1234567893,ABC1234570
1234567894,ABC1234567
1234567895,ABC1234567
对于特定的录取编号(比如说 1234567890),我想知道所有从事相同项目的录取编号(ABC1234567,ABC1234568)。上述查询的输出将是 1234567894,1234567895。
解释:由于录取编号为“1234567890”,项目名称为“ABC1234567”和“ABC1234568”。在这两个项目中,其他“admission_number”的工作方式为“1234567894”、“1234567895”
我想出了两个解决方案,要存储数据,将使用 RDBMS。
方法 1:使用两个检索查询:第一个查询应返回特定“admission_number”的所有项目名称,第二个查询将返回“项目名称”的所有 admission_number。
select admission_number from table where project_name IN (select project_name from table where admission_number='ABC1234567'.
方法 2:在这种方法中,在加载之前,我会预处理结果,直接将结果存储在数据库中。我只存储所有连接的“admission_number”。
例如。对于 project_name 'ABC1234567',这 3 个 admission_number '1234567890'、'1234567894'、'1234567895' 正在工作。我想将所有连接的 admission_number 存储在具有两列(number,connected_number)的表中,例如('1234567890','1234567894'),('1234567890','1234567895'),('1234567894','1234567895'),并查询将适用于两列(number 和 connected_number)。
但是在这种方法中会有很多行意味着如果一个特定的 project_name 'p',有 n 'admission_number' 比总行数将是 n(n-1)/2
如何将所有连接的 admission_number 存储在 RDBMS 中?数据加载可能很慢,但检索应该很快。
【问题讨论】:
标签: database data-structures rdbms