我知道RDBMS基于Relational Model,Relational Algebra支持。
各种关系代数理论概念,如Selection,Projection,Joins,在SQL等查询语言中实现。但这些操作主要是 CR(创建,读取,更新,删除)的 R(读取)。
CRUD 是编程的圣杯,特别是在企业界。
我想知道哪种编程语言是独立的,理论基础(可能是也可能不是数学)是INSERTS,UPDATES,DELETES的模型?这样的理论是否存在?
如果它存在,它可能会解释诸如数据库约束之类的事情。
例如:
如果不指定唯一列(WHERE clasue),则无法更新单行(元组)。
或者,
如果删除了一对多关系,则会删除多方的实体(其中包含另一个表的主键的表)。
为简单起见,我们假设所有CRUD仅在关系模型上运行。
我之所以要问的原因是因为我需要为希望自动化CRUD的产品做一个深入的R& D. 我知道我知道人们已经尝试过但失败过,但我仍然希望能够指出一些理论基础!
编辑这也有助于ORM的设计,它可以生成独立于底层数据库模型的所有CRUD操作
编辑我刚刚找到此链接 - > https://cs.stackexchange.com/questions/43672/a-relational-algebra-extended-to-model-the-full-dml-crud-domain这类似于我不得不提出的问题,不幸的是OP的问题圈成了具体的实现!
答案 0 :(得分:4)
在关系术语中,CREATE,UPDATE和DELETE操作都是赋值。例如。将I插入T可以通过以下方式完成:
T = T UNION I;
任何实用的关系语言都应该具有这些操作的语法快捷方式。例如,请参阅Tutorial D。
答案 1 :(得分:3)
CRUD可以简化为关系,关系代数,变量和(可选)类型理论。数据库被视为一组关系变量,类似于任何命令式编程语言中的变量,除了它们保持关系而不是标量值。查询将一系列关系代数运算符应用于存储在关系变量中的值。读取查询将结果返回给调用者。创建,更新和删除查询将结果分配回原始关系变量。
ORM的一个问题是它们混淆了实体的行,实体集的表和属性的列。 Chen的原始论文指出实体由值表示,属性是由对值表示的一对一关系。另一个问题是在底层系统使用集合时尝试操作一行。另一个是试图抽象一个非常高级的声明性数据子语言。
我不想要ORM,我希望我的对象能够在SQL中相互交谈,但这是一个不同的主题。
答案 2 :(得分:0)
评论太长了。
"关系"数据库只是松散地实现了关系代数。 "关系"例如,在关系代数中,指(和其他)事物之间的关系"属性" (列)及其在"元组内的值#34; (表中的行)。在大多数SQL数据库中,表中的所有行("元组和#34;)具有相同的列。这不是关系代数的要求。另一个例子是表格中的重复。关系代数处理"元组"的集合,其中不允许重复。然而,关系数据库允许表中的重复,除非明确定义主键。
CRUD的语义更多地受到数据库的ACID属性(原子性,一致性,隔离性和持久性)的驱动。这些属性驱动关系数据库的事务语义。
根据我的经验,成功的实际应用通常与理论基础不同。