Sql 用户可以在其中创建数据类型的数据库

Sql 用户可以在其中创建数据类型的数据库,sql,database,nosql,Sql,Database,Nosql,我有一个非常旧的应用程序使用SQL数据库,我需要更新它。我也想借此机会改进数据库结构,并希望得到一些建议 基本问题是数据库的一个重要部分必须是用户可配置的,而不必接触代码。更具体地说,DB存储产品,这些产品根据类型具有不同的规格(即列)。应用程序必须能够搜索任何列。只有几个类型(~20),但管理员必须能够创建一个新类型,而不必触碰代码。 每个产品需要存储的数据可以是字符串,也可以是浮点数,每种类型的数据不能超过7个 实现了以下“解决方案”,而不是创建用于创建和删除表的接口。 -在Products

我有一个非常旧的应用程序使用SQL数据库,我需要更新它。我也想借此机会改进数据库结构,并希望得到一些建议

基本问题是数据库的一个重要部分必须是用户可配置的,而不必接触代码。更具体地说,DB存储产品,这些产品根据类型具有不同的规格(即列)。应用程序必须能够搜索任何列。只有几个类型(~20),但管理员必须能够创建一个新类型,而不必触碰代码。 每个产品需要存储的数据可以是字符串,也可以是浮点数,每种类型的数据不能超过7个

实现了以下“解决方案”,而不是创建用于创建和删除表的接口。 -在Products表中,id有一列;ProducTypeID的一列;7个字符串列和7个浮点列 -在ProductType列中,ProducTypeID有一列,14个字符串列表示每个产品类型的7个字符串列和7个浮点列的名称。如果一个产品不需要这么多列,则列名称为空

这是可行的,但由于额外的间接性,维护客户机代码非常烦人


问题是:我应该使用SQL DB并添加一种创建/删除表的方法,还是应该使用noSQL DB?每种情况的优缺点是什么?

请记住,在SQL数据库中,在大表上添加和删除列可能是一项非常昂贵的操作,可能需要几分钟甚至几小时。在飞行中做这件事真是个坏主意。向表中添加一堆“多用途”列并没有什么好处。很难查询,而且您对一个产品可以拥有多少属性有一个限制

当每个产品具有0-n动态属性时,通常的按书解决方案是创建第二个表
ProductID(主键)| PropertyName(主键)| PropertyValue
。这允许每个产品具有任意数量的属性。您可以轻松地
将它与main products表连接起来,以获得所有具有其属性的产品


当您对切换数据库技术持开放态度时,还可以使用面向文档的NoSQL数据库,它不使用MongoDB或CouchDB之类的固定模式。在这样的数据库中,集合中的每个文档都可以有一组不同的字段。但在决定执行此步骤之前,请评估这样一个数据库将如何影响应用程序的其他部分。在不了解整个应用程序的情况下列出所有可能受到积极或消极影响的内容是一个过于宽泛的问题。

并非所有的NoSQL数据库都是无模式的。@Philipp:你说得不对。感谢您的澄清。在这个“按书”的解决方案中,您如何处理多种数据类型。我需要为FloatProperties和StringProperties创建一个表吗?@Hernan这是一个选项。另一个选项是创建一个表,其中包含两个不同类型的属性列。