我正在尝试决定哪一个更好:设计一个浪费大量空间并具有简单查询的表格或者编写一个非常紧凑的表格但是找到我正在寻找的内容的过程将是非常有效的激烈。
实际问题是:
想象一下,你有一个非常简单的表。 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
但这将是非常浪费和糟糕的糟糕设计,但是很容易访问数据以及层次结构和欠链。
答案 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 |
+----+--------+
您可以为每个结果人员重复此过程,直到没有结果(没有人被欠)。