首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >没有SQL的RDBMS

没有SQL的RDBMS
EN

Stack Overflow用户
提问于 2016-05-26 16:00:16
回答 3查看 2.1K关注 0票数 8

是否存在没有SQL的RDBMS。我不是在谈论NoSQL和所有XML和Javascript对象类型的数据。

我的意思是,数据库不是通过SQL命令的,而是直接通过一些API命令的。根本不应该有SQL。

我的意思是,就像微软过去有它的ADO对象一样,这些对象有方法来做SQL现在做的所有事情。

我并不是在要求一个ORM框架。框架只是在内部生成和调用SQL代码。我不想这样。我想要直接与数据库对话的函数或方法调用。

我对windows平台很感兴趣。我希望关系型数据库支持的语言是PHP和Python;也许还有C#。

我想要管理的数据是日常SQL-RDBMS处理的所有数据。

是的,我希望DBMS管理实体关系。但我不希望SQL出现在图片中。

我不是在为任何人做项目。这只是一个品味或偏好的问题,避免从一个级别/语言跳到另一个级别/语言。

我试着在谷歌上搜索,但结果只出现了我不喜欢的NoSQL。

EN

回答 3

Stack Overflow用户

发布于 2017-08-05 18:01:01

我认为这是一个非常合理的问题。为什么必须使用SQL而不是一些低级API来查询数据库?我认为有几个原因--并不是确切的答案:

SQL试图为任何数据库提供一个标准接口,使用准备好的statements.

  • Also可以降低解析的成本,一些开发人员强烈地面向数据库和
  • ,而另一些开发人员则强烈地面向编程语言。虽然经常是对立的,但它们在许多方面都是互补的技能。

"nosql“的出现重新激发了在界面上改进SQL的尝试,同时在实现端尝试不同的数据布局。许多"nosql“一代都在发明自己的查询语言。然后,你有像apache drill这样的项目,试图让所有的数据库都可以从一个通用的应用程序接口再次访问。

但是为什么不提供一个低级的接口来避免解析SQL的成本呢?一个答案是,现在的数据库通过提供prepared statements来降低成本。SQL被解析一次,然后您就有了一个参数化的查询对象,它或多或少地代表了低级API。

对于特定的用例,您可以通过使用库或手工构造的数据结构以及手工编码的查询来提高性能。例如,如果您只需要键/值存储,则可以使用散列映射或REDIS等。

解析SQL是有危险的,比如sql注入。通过创建一个以安全的方式转换为SQL的API,可以避免这些问题。例如,ORM或类似于LINQ的东西。从理论上讲,它们可以分解为一个低级的API,而不是一起创建SQL。这必须在一个数据库的基础上完成,正如您已经注意到的,大多数数据库专注于提供SQL接口,并且通常根本不公开低级API。在我看来,一个好的数据库库应该试图提供一个API,它可以在原则上实现这一点(即从SQL中抽象出来),然后它可以成为特定语言中标准化的候选者。大多数只是包装SQL,不要试图将其抽象得太远,因为这是一场艰苦的斗争。

在Berkley DB书的“SQL有什么不好”一节中有一个关于SQL的good quote。如果你用谷歌搜索,你可能也会访问到像this这样的页面

这或多或少只是证明了问题的合理性,而不是回答它。最接近答案的可能是我上面说过的准备好的语句。

您可能最终需要特定于数据库才能优化查询计划(这可能就是为什么您首先希望使用较低级别的API?)。

票数 4
EN

Stack Overflow用户

发布于 2021-04-13 01:48:24

我没有答案,但也许我可以澄清这个问题。很多人都在谈论SQL,好像它是查询数据库本身的语言。然而,SQL被转换成一种关系代数的形式,然后导致对数据库结构的处理。关系代数(至少在理论上)是查询关系对象结构的基础级别。我也希望看到一个完全没有SQL的关系数据库。SQL的结构是通过键盘而不是代码来编写的。编写通用SQL编写器来处理与关系代数相同的事情是非常困难的。关系代数是正交的,可以在不影响结果的情况下重新排列(仅影响性能)。对于SQL这样的语言,在不同的时间、出于不同的原因在代码库中添加where子句这样的事情是非常困难的,但是对于关系代数这样的正交操作来说却是微不足道的。

事实上,据我所知。关系数据库将SQL转换为某种形式的关系代数,以便对其进行性能优化。为什么不跳过中间人,在客户端创建关系代数,并将其直接发送到数据库?

我绝对明白,有些人只是在解释风景,我并不是要争论我们所处的位置。

我相信对于postgres这样的数据库,有几种语言可供选择,但它们都是非常非标准的,不幸的是,使用它们是有风险的,因为它们经常没有得到很好的维护,而且它们也不为人所知,因此将开发人员添加到您的组织中是具有挑战性的。

希望有一天有人能开发出一个易于部署的数据库,它使用的是与关系代数关系更密切的东西。

下面是一个可以安装在postgres上的更接近关系代数的语言的示例。http://www.andl.org/

这个项目(至少是网页)实际上是在2020年7月更新的

票数 3
EN

Stack Overflow用户

发布于 2020-01-21 03:21:38

由于阻抗不匹配,您需要有一种查询语言来操作数据库中的数据。

数据库使用SQL、QBE、QUEL或TUTORIAL D等查询语言工作。这些语言可以进行集合运算,而C、Ada、Pascal、C++、Java…等普通编程语言则可以进行集合运算只能在迭代模式下运行,不能在事务模式下运行。

事务(每个简单的SQL order都是一个事务)必须操作一组数据,并且不能逐行操作…。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37454915

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档