1
我已经继承了一个遗留应用程序,它利用自引用表来促进分层结构。这导致递归方法调用正在产生“难闻的气味”。重新设计自引用mysql表
的PARENT_ID列引用同一个表的主键,这里有大约25万条记录:
+-------------+---------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+---------+------+-----+---------+----------------+
| phase_id | int(10) | NO | PRI | NULL | auto_increment |
| plat_id | int(10) | YES | MUL | NULL | |
| name | text | YES | | NULL | |
| parent_id | int(10) | YES | MUL | NULL | |
| plan_id | int(10) | YES | MUL | NULL | |
+-------------+---------+------+-----+---------+----------------+
mysql> show table status like 'ref'\G
*************************** 1. row ***************************
Name: phase
Engine: MyISAM
Version: 10
Row_format: Dynamic
Rows: 25223658
Avg_row_length: 20
Data_length: 509450960
Max_data_length: 281474976710655
Index_length: 1026267136
Data_free: 0
Auto_increment: 25238013
我对这种结构的几个问题:
- 是实现自引用表通常是不好的做法?我能想到的主要负面因素是,在单个查询中获取层次结构的最大深度是很困难/不可能的,因为可能会有X个孩子。
- 值得重新设计吗?拥有如此多的数据使得移动它变得更加困难。
- 我有什么选择?我已经听到了关于表格分区的一些信息,但不知道它是否适合我的情况。
任何指针将是非常赞赏 NS
可能的[在关系数据库中存储分层数据的选项是什么?]的重复(http://stackoverflow.com/questions/4048151/what-are-the-options-for-storing-hierarchical-data-关系数据库) – Sebas 2012-07-12 14:10:02
感谢您的链接Sebas,我没有在我的搜索中找到。本文中描述的'平板模型'听起来非常好:http://www.ferdychristant.com/blog//articles/DOMM-7QJPM7 – nonshatter 2012-07-12 14:33:39
是的,这是一个非常有趣且富有挑战性的主题。 – Sebas 2012-07-12 14:35:09