1

我有一个相当大的数据库,其中包含多个表和复杂的关系以及数千条记录。只是为了简化问题,假设我有一个 MySQL 数据库,如下所示:

[表格1]

  • ID
  • table2_id
  • table3_id
  • name_id

[表2]

  • ID
  • name_id

[表3]

  • ID
  • name_id

[姓名]

  • ID
  • 文本

然后是关系:

  • table1.name_id -> name.id
  • table1.table2_id -> table2.id
  • table1.table3_id -> table3.id
  • table2.name_id -> name.id
  • table3.name_id -> name.id

表格包含:

  • 表 1 中有 50,000 条记录
  • 表 2 中有 10,000 条记录
  • 表 3 中有 5,000 条记录
  • 25,000 条记录

我需要在显示列文本名称的 DataGridView 中显示 table1。

我需要将过滤器应用于每个 table1 请求,其中我可以为每个表包含名称搜索关键字:table1、table2、table3。

我一直在尝试使用 DataAdapters 手动填充 DataSet 并添加 DataRelations 并发现一些问题:

  • 让 DataSet 充满所有数据需要很长时间和大量内存。显然我不需要一次所有的东西,如果我可以将 table1 限制为 5,000 条记录并应用过滤器,我会很高兴
  • 考虑到 DataAdapters 和 DataSets,我无法设法将 WHERE 条件设置为子行以检索过滤后的 table1 数据 - 例如:我想获取 table1 的列表,其中 table2 name text = "a" and table3 text = "b"

我真的不想构建'SELECT ... LEFT JOIN'或'SELECT ....table1,table2,table3'查询,就像我之前提到的那样,我处理超过6个具有嵌套关系的表(例如,相关的表与另一张表相关等)

我不想检索所有 table1 记录,然后像我之前所说的那样在 C# 端过滤它们 - 这需要很长时间,并且不需要在屏幕上显示所有记录。必须仅根据过滤记录来考虑所有记录,然后结果可以限制为 5,000 项。

我了解在这种情况下使用 DataSet 和 DataAdapters 可能是错误的。任何其他想法都非常受欢迎,我相信也会有所帮助。谢谢你。

有人可以指出我正确的方向吗?

4

0 回答 0