为动态逻辑数据库模式提供存储的推荐架构是什么?
澄清一下:如果系统需要为模型提供存储,而模型的模式在生产中可能会被用户扩展或更改,那么有哪些好的技术、数据库模型或存储引擎可以实现这一点?
几种可能的说明:
- 通过动态生成的 DML 创建/更改数据库对象
- 创建具有大量稀疏物理列的表并仅使用“覆盖”逻辑模式所需的列
- 创建一个“长而窄”的表,将动态列值存储为行,然后需要旋转这些行以创建一个包含特定实体的所有值的“短而宽”的行集
- 使用 BigTable/SimpleDB PropertyBag 类型系统
任何基于现实世界经验的答案将不胜感激
你所提出的建议并不新鲜。很多人都尝试过……大多数人发现他们追求“无限”的灵活性,但最终得到的却比这少得多。这是数据库设计中的“蟑螂汽车旅馆”——数据进入,但几乎不可能将其取出。尝试并概念化为任何类型的约束编写代码,您就会明白我的意思。
最终结果通常是一个更难以调试、维护并且充满数据一致性问题的系统。这不是always情况确实如此,但更多的时候,事情就是这样结束的。主要是因为程序员没有看到这列火车失事的到来,并且未能针对它进行防御性编码。而且,通常最终会出现这样的情况:“无限”的灵活性实际上并不是那么必要;当开发团队收到一个规范说“天哪,我不知道他们要在这里放什么样的数据,所以让他们放任何东西”时,这是一种非常糟糕的“气味”......而最终用户却很好拥有他们可以使用的预定义属性类型(编写通用电话号码,并让他们创建其中的任何号码 - 这在一个良好规范化的系统中是微不足道的,并且保持灵活性和完整性!)
如果您有一个非常优秀的开发团队并且密切意识到通过这种设计,您必须克服的问题中,您可以成功地编写出一个设计良好、没有严重错误的系统。大多数时候。
但为什么一开始就面临如此不利的局面呢?
不相信我?谷歌“一个真正的查找表”或“单表设计”。一些好的结果: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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)