在设计新的关系数据库时,通常每个对象类型由相应的表表示.哪个是设计数据库的最佳实践,它存储了大量不同的对象类型,以避免创建和维护数千个数据库表?对于这种情况,存在哪种更好的关系数据库替代方案?
使用 NoSql 数据库(Lucene、Mongo、Cassandra、Solr、Elastic 搜索、Hadoop 等),它存储可以包含任意数量字段的文档(想想键/值的映射)。在关系数据库术语中,就像每个“行”可以有不同的行定义。我过去已经实现了这一点,我发现存储一个class字段很方便,这样我就可以重建正确类型的对象(在我的例子中是 Java,但适用于任何语言)。
您还可以使用支持 JSON 列类型的关系数据库(例如 Postgres),将对象序列化到 JSON 或从 JSON 反序列化,并将它们存储在 JSON 类型列中。为了创建一个方便的单表解决方案,您可能需要一个存储对象类型的列以使反序列化变得简单。我也实现了这个选项并且它对我有用。
两种选择都不错。第一个是更好的技术契合度。如果您已经熟悉 RDBMS,那么第二个可能就不那么神秘了。
您不想做的是使用任何 ORDBM 解决方案,其中每个对象类型都有一个专用表,其中的列与类字段匹配。如果你改变了你的类的定义,它就会变得非常僵化,如果不同类的数量增长到甚至超过一个非常小的数量,它就会完全无法扩展。