是否有任何编程语言都具有内置数据库作为一流语言功能,而不是连接到外部SQL(或其他)数据库?这种功能的弊端和好处是什么?这样的功能会是什么样子,它将如何改变我们的编程方式?
是否有任何编程语言都具有内置数据库作为一流语言功能,而不是连接到外部SQL(或其他)数据库?这种功能的弊端和好处是什么?这样的功能会是什么样子,它将如何改变我们的编程方式?
Answers:
我能想到的唯一语言是旧的xBase语言,例如DBase,Clipper和FoxPro。有一个GNU项目提供了一个免费的且几乎兼容的版本,称为Clip
也是Pick Basic,它将编程语言直接绑定到数据库平台。
已经完成了。进化的死胡同限制了语言访问数据的方式。
语言是“小”,数据库是“大”;因此,无论何时将两者结合在一起,它都不是以数据库为特征的语言,而是以语言为特征的数据库。许多数据库都有一些专有语言,例如PL / SQL,T-SQL。
我不一定认为正确的问题是“为什么不在那里?” 但是“为什么要有?”。将数据库作为语言的特征将会带来什么?请记住,语言是编程堆栈的最底层。使语言膨胀会影响一切。因此,语言设计人员在添加新功能(特别是那些涉及此类投资的功能)时需要慢一些。
fopen()
”。
有3种符合您要求的旧系统:
Pick和MUMPS是在有关关系型数据库的第一篇学术论文之前开发的(距第一个基于商业SQL的数据库系统进入市场大约十年了-这是我们现在称为Oracle的公司; IBM在产品上的首次尝试失败了,后来成功的基于SQL的系统)。您可能会发现它们仍在使用中(我们的本地公共交通系统直到最近才将其用于旅行计划系统)。您不希望选择Pick或MUMPS,而且我能给的最好建议是“双手悬空离开键盘!” 如果您确实与他们有任何关系,那么“您会后悔”这句话应该会在您耳边响起。
Microsoft Access在IT界受到严重嘲笑和批评,因为对于非开发人员而言,很容易使用Access制作关键的业务应用程序,并将其转变为公司无法生存的东西。也很可能有许多开发人员开始通过MS Access进行开发,并且随着事情不断陷入困境,他们学习了如何修复它们(传统上,第一步是学习视觉基础,然后先在VB中重写Access应用程序,然后在“更好”的东西)。可以使行为良好的Access应用程序运行时分发大量数据(我已经看过了),但是做事更简单,而且制作(和维护)设备所需的技能要少得多VB和SQL Server之外的行为正常的应用程序。
从SQL Server 2005开始,Microsoft引入了将CLR放入存储过程和函数中的功能。而且,如果您想对此加以棘手,则可以创建数据类型,然后将其用作数据库中的列。我认为Oracle与Java有相似之处。
话虽如此,我认为没有什么可以阻止您创建一个或对其进行假设。Pick和MUMPS比大多数编码器都古老,它们反映了一种看待世界的非常轻松的方式。
我个人的建议是使事情分开。使用一种善于处理项目所需数据的语言(需要注意的是,有时“最佳”语言是可以轻松找到可以读写代码的程序员的语言)。使用擅长保留项目所需数据的数据库系统。
呃。
好吧,首先,您要问为什么该语言所使用的框架没有提供数据库。语言仅是表达您想要在集合语法中完成的事情的一种手段。它并没有真正提供这样的服务。:)
也就是说,有几个原因。
构建高效的数据库存储系统是一个难题,可能比构建.NET Framework 的数量级或更大。如果一个团队试图在其框架中包括一个数据库,那将是他们最终的工作。
获取负载的数据库应位于其自己的单独计算机上,而不是在访问它的代码过程中。
ORM提供了很多类型安全性和编译时检查,这将是此类操作的好处,而实际上没有使框架尝试成为数据库。
就是说,我想在框架中包含某种SQLite实现会很整洁,对数据访问需求较小的应用程序可以对之进行操作。我不确定它在非平凡的应用程序中是否有用。
我认为您的实际问题是“为什么数据库库没有提供任何编程语言”。
通用语言将所有IO视为一个整体,无论是向磁盘,网络摄像头,网络,屏幕,内存中的位置写入或读取磁盘,网络摄像头,网络,屏幕,内存中的位置-都是IO,而这正是编程语言所关注的全部用。
实际上,除了对堆和堆栈进行读/写之外,大多数编程语言甚至不执行任何实际的IO。某些语言提供了用于表达 IO操作的本机功能(例如,BASIC中的print
命令),但是大多数语言只是将它们视为常规函数调用(例如,printf
在C中),并让库处理实际的编写。
诸如C#之类的某些语言提供了用于表达查询的语言功能,但即使如此,这些也只是列表(或IEnumerable
s,在.NET中称为s)的最基本数据结构上的表达式,这些表达式已由库转换为SQL操作-语言本身仍在使用非常抽象的IO概念。
至于为什么将数据库程序包构建到编程语言的标准库中并不是一个好主意,这很可能是因为标准库中的其他内容通常都不依赖于数据库功能。
如上所写,该问题在某种程度上是错误的,如上面的一些反例所示。
因此,我首先将问题简化为:“为什么通常不将DBMS集成为通用,高级编程语言的功能?”
出于同样的原因,通常不会内置其他软件产品,例如操作系统,文件系统,Web服务器,缓存层等。通用语言通常在高于此类产品的抽象级别上运行。所以这是合理的程序员来实现DBMS 中通用语言,并且DBMS甚至可以公开其父语言或DB特定的声明性语言的各个方面,以供DB程序员使用。但是在编写DBMS时有太多设计选择,因此明智的选择是将它们修复为通用编程语言。如果您确实要解决它们,则会遇到MUMPS这样的情况,这两种情况的纠缠导致整个行业陷入鸡与蛋的问题,被过时的DBMS和过时的编程语言所困扰。
用于在NonStop / SQL中工作,该SQL已完全集成到NonStop / C,NonStop / C ++,NonStop / Cobol,NonStop / Fortran和其他语言中,并且已与NonStop / Guardian(计算机所使用的操作系统)完全集成跑了
我认为这可能是您可以获得的最接近的集成,数据库是操作系统的文件系统。这也是一个死胡同,无法解耦任何组件,数据库,操作系统,硬件以及上面编写的任何软件,它们永远都不能单独使用,而是移植到另一个环境。
您将在PC上获得的最接近的产品可能是MS Access,紧随其后的是Embarcadero / Borland Delphi。
之后,您要查看的是应用程序中的嵌入式数据库,这对于那些创建需要一组不容易存储在简单配置文件中和/或需要在应用程序运行时进行定期更新的层次结构数据的独立应用程序的应用程序而言,可能具有有限的吸引力。或者对于希望拥有可移植版本的应用程序的用户,该版本可以维护较大数据库的一部分的快照,并可能在应用程序可以建立连接时与较大数据库同步(例如,经常无法到达的销售人员)公司网络仍需要为其客户群或需要病历但由于无法访问网络而无法连接到医院网络的现场医生的销售数据)。