优化表格设计或优化查询

时间:2014-04-10 04:20:24

标签: mysql optimization

我正在尝试决定哪一个更好:设计一个浪费大量空间并具有简单查询的表格或者编写一个非常紧凑的表格但是找到我正在寻找的内容的过程将是非常有效的激烈。

实际问题是:

想象一下,你有一个非常简单的表。 ID号的第1列,第2列是名称列表,第3列是名称列表。第二列是第三栏中欠人的人员列表。

搜索应执行以下操作:

我在第3列中搜索名称,并在第2列中查看谁欠此人。一个名字或多个名字出现,然后我想知道谁欠他们,再次出现一堆名字,依此类推5级。

也许这是一个众所周知的方案,在表格设计或MySQL圈子中有一个众所周知的简单答案。任何人都可以建议一个MySQL查询或者可能是一个合适的表设计,我可以使用一个简单的查询吗?

实施例

ID      owes        owned to
1       Peter       John
2       John        George
3       Abdul       George
4       George      Anna

所以我可以像这样设计一个浪费的表

ID    1        2         3       4      5
1     Anna     George    Abdul  
2     Anna     George    John    Peter
3     George   Abdul
4     George   John      Peter
5     John     Peter

但这将是非常浪费和糟糕的糟糕设计,但是很容易访问数据以及层次结构和欠链。

1 个答案:

答案 0 :(得分:1)

这样的东西似乎合适:

people
+----+--------+
| id |  name  |
+----+--------+
|  1 | Marty  |
|  2 | Steven |
|  3 | John   |
+----+--------+

用表格建立欠人和欠款之间的关系:

loans
+-----------+-------------+
| lender_id | borrower_id |
+-----------+-------------+
|         1 |           2 |
|         1 |           3 |
|         2 |           1 |
+-----------+-------------+

你可以让一个给定贷方的所有人得到一些简单的东西:

SELECT people.id, people.name
FROM loans
INNER JOIN people ON people.id = loans.borrower_id
WHERE loans.lender_id = X

其中X是贷方的ID。例如lender_id 1(Marty)会产生:

+----+--------+
| id |  name  |
+----+--------+
|  2 | Steven |
|  3 | John   |
+----+--------+

您可以为每个结果人员重复此过程,直到没有结果(没有人被欠)。

相关问题