我有这样的数据层次结构:
Country
-President // A Person
--Central
---Prime Minister // A Person
----State
-----Chief Minister // A Person
------District
-------District Minister // A Person
--------Area
---------Area Minister (AM) // A Person
所以基本上我想在这里做的是,我想在Focus
上Area Minister
。因为他将成为我申请的灵魂。其他人只是等级制度的一部分。因此,假设我添加Area Minister
,那么他/她将在Area
下,而Area
位于District Minister
之下且District Minister
位于District
之下District
和Chief Minister
位于SO ON......
和Area Minister
我在这里做的是将MySQL Database
的这些详细信息添加到我的AM
所以我在数据库中所做的是,我创建了以下表格:
问题是要提取**PHP**
到**MySQL**
的详细信息。我从AM
获取数据,而AM - Data
是我正在寻找的核心数据,但在某些点也需要相关数据。但核心是10 - TEN TABLES
。但是,如果我正在通过这种方式,我正在尝试从Area
获取数据。我感到痛苦。
因为要获取所需数据,我会在AM
中匹配District Minister
ID,然后在Area
中匹配AM i.e Area Manager's Data
ID,依此类推至层次结构的起始级别。
我有什么方法可以尽量减少这个过程。我想要的核心数据只是AM
。
任何方式我都可以很好地构建它。或者,如果有任何寻求帮助,有人可以向我提供有关如果可以通过存储过程完成此操作的见解。
我只是在寻找一种方法来降低PHP中代码的复杂性以及MySQL中的许多表,当核心数据仅存在于{{1}}时。
请提供建议。
答案 0 :(得分:1)
您具有正确的基本表结构,并且您指定的内容似乎是表数据的合理结构。如果要减少访问区域管理器时打开的表的数量,可以执行一些操作。
使用装饰器。您可以创建一个区域管理器对象,该对象仅加载获取区域管理器时所需的最小数据。向该对象添加方法,从其他表中获取数据,并仅在需要该数据时运行查询。例如:
class AreaManager {
public function __construct() {
//do code which loads the basic table data for an area manager
}
public function getPresident() {
// do the SQL needed to load the president from the relational tables
}
}
非常规化您的数据。您可以定期运行一个脚本来获取数据并将其放入一个表中 - 因此您有一个这样的结构:
area_manager_id | country_name | president | prime_minister | etc.
此脚本必须在您更改关系时更新,但允许您通过单个查询轻松访问数据。
所有这些,您已经按照它们应该使用的方式设置了关系表,而10表查询通常不是世界末日。
答案 1 :(得分:1)
只要您索引外键,然后使用连接就可以获取内容,您的数据就不会那么糟糕。
最后不是关于你的表,因为你的表是用正确的关系键正确构建的,而是你的索引优化和你将运行的查询。