sql - 动态数据库模式

标签 sql database-design architecture dynamic-data

为动态逻辑数据库模式提供存储的推荐架构是什么?

澄清一下:如果系统需要为模型提供存储,而模型的模式在生产中可能会被用户扩展或更改,那么有哪些好的技术、数据库模型或存储引擎可以实现这一点?

几种可能的说明:

  • 通过动态生成的 DML 创建/更改数据库对象
  • 创建包含大量稀疏物理列的表,并仅使用“重叠”逻辑架构所需的列
  • 创建一个“长而窄”的表,将动态列值存储为行,然后需要旋转这些行以创建包含特定实体的所有值的“短而宽”的行集
  • 使用 BigTable/SimpleDB PropertyBag 类型系统

任何基于现实世界经验的答案将不胜感激

最佳答案

您的提议并不新鲜。很多人都尝试过……大多数人发现他们追求“无限”的灵 active ,但最终得到的却比这少得多。它是数据库设计中的“蟑螂汽车旅馆”——数据进入,但几乎不可能将其取出。尝试并概念化为任何类型的约束编写代码,您就会明白我的意思。

最终结果通常是一个更难以调试、维护并且充满数据一致性问题的系统。情况并非总是如此,但通常情况下,结果就是这样。主要是因为程序员没有看到这列火车失事的到来,并且未能针对它进行防御性编码。而且,通常最终会出现这样的情况:“无限”的灵 active 实际上并不是那么必要;当开发团队收到一个规范说“天哪,我不知道他们要在这里放什么样的数据,所以让他们放任何数据”时,这是一种非常糟糕的“气味”......而最终用户却很好拥有他们可以使用的预定义属性类型(编写通用电话号码,并让他们创建其中的任何号码 - 这在良好规范化的系统中是微不足道的,并保持灵 active 和完整性!)

如果您拥有一支非常优秀的开发团队,并且密切了解您必须通过此设计克服的问题,那么您就可以成功编写出一个设计良好、没有严重错误的系统。大多数时候。

为什么一开始就面临如此不利的局面呢?

不相信我?谷歌“一个真正的查找表”或“单表设计”。一些好的结果: http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:10678084117056

http://thedailywtf.com/Comments/Tom_Kyte_on_The_Ultimate_Extensibility.aspx?pg=3

http://www.dbazine.com/ofinterest/oi-articles/celko22

http://thedailywtf.com/Comments/The_Inner-Platform_Effect.aspx?pg=2

关于sql - 动态数据库模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66385/

相关文章:

mysql - 更新表格以根据文本列记录位置

php - 从表中提取数据,然后按降序回显

mysql - 如何跨不同数据库维护外键约束?

asp.net-mvc - 在 ASP.NET MVC 中将实体映射到模型并执行业务逻辑

PHP查询帖子并将未查询的帖子添加到末尾

mysql - 在 MySQL 中使用 Group by 和 Order by

数据库设计思路/反馈

database-design - RBAC(基于角色的访问控制)ER 图

java - Dynamic Verticles - 如何为简单的 vert.x 游戏正确设计 vert.x 架构?

java - 带有简单数据库的Android应用程序架构