MySQL中的父子关系设计
需要输入数据模型设计 我有家长表作为MySQL中的父子关系设计,mysql,sql,database,database-design,data-modeling,Mysql,Sql,Database,Database Design,Data Modeling,需要输入数据模型设计 我有家长表作为 id (PK) current_version latest_child_id id (PK) parent_table_id (FK to parent) version (running number . largest number implies latest child record) 子表 id (PK) current_version latest_child_id id (PK) parent_table_id (FK to paren
id (PK)
current_version
latest_child_id
id (PK)
parent_table_id (FK to parent)
version (running number . largest number implies latest child record)
子表
id (PK)
current_version
latest_child_id
id (PK)
parent_table_id (FK to parent)
version (running number . largest number implies latest child record)
父_表与子_表之间的关系为1:m。
此外,父表还保留一个指针,指向子表中记录的最新版本
系统将在子_表中插入n个可变行,并更新父_表以指向最新版本,以便更快地读取
我的问题是:
- 投入更多的硬件:最简单的方法。只要买一台更大的机器,问题就解决了。。。至少在一段时间内,直到您的系统再次增长
- 使用乐观锁定:这种策略根本不需要执行任何实际的锁定。但是,您需要添加一个额外的数字列来存储行的版本号
- 切换到另一个数据库:MySQL可能无法很好地处理非常大的容量。如果是这样的话,你可以考虑PostgreSQL,甚至是Oracle数据库,它肯定有更好的缓存技术,但也非常昂贵。
- 投入更多的硬件:最简单的方法。只要买一台更大的机器,问题就解决了。。。至少在一段时间内,直到您的系统再次增长
- 使用乐观锁定:这种策略根本不需要执行任何实际的锁定。但是,您需要添加一个额外的数字列来存储行的版本号
- 切换到另一个数据库:MySQL可能无法很好地处理非常大的容量。如果是这样的话,你可以考虑PostgreSQL,甚至是Oracle数据库,它肯定有更好的缓存技术,但也非常昂贵。
- 负面:占用更多存储空间。假设这不重要
- 否定:需要更多的代码。更多的代码意味着更多的bug机会。考虑在测试套件中封装数据访问代码。
- 否定:非规范化模式可能需要额外的“大脑空间”-您必须记住,您计算(例如)父级拥有的子级数量,但通过查看父表中的属性来查找最新的子级。在理想情况下,规范化模式描述业务上下文,而不必记住实现细节
- 负面:可能会使您的数据模型在将来更难扩展。随着您添加更多的实体和属性,此非规范化表可能越来越难以保持同步。一个非规范化列通常很容易使用,但是如果有很多非规范化列,那么要使它们都保持最新可能非常困难
- 负面:对于不经常访问的数据,非规范化设计可能比动态计算对性能的影响更大。你的问题2就是一个例子。在复杂的场景中,多个线程可能会在非规范化数据中产生不一致
- 正面:数据经常被读取,并且