除了Linq之外,他们是否还有其他尝试将关系特性集成到面向对象的语言本身中,而不仅仅是库?
更新 最明显的例子是一对一、一对多或多对多关系。然后,您还可以考虑具有自身属性的关系。
除了Linq之外,他们是否还有其他尝试将关系特性集成到面向对象的语言本身中,而不仅仅是库?
更新 最明显的例子是一对一、一对多或多对多关系。然后,您还可以考虑具有自身属性的关系。
据我所知不是。事实上,LINQ 本身在最初的“Codd”意义上并不是特别“关系”。(SQL 也不是,但那是另一回事了。)
只是为了定下基调,LINQ 甚至没有关系的概念(松散地说,一组符合标题的名称/值元组,即名称/类型元组)。它处理序列而不是集合和对象而不是元组。甚至匿名对象也与关系模型意义上的命名元组不同,因为new { b = 2, a = 1 }
不仅不等于new { a = 1, b = 2 }
,它们甚至都不是同一类型!
公平地说,LINQ 是过去 40 年数据访问火车残骸的巨大改进,但这只是朝着正确方向迈出的一小步,我怀疑没有采取任何进一步措施的打算。事实上,在我看来,LINQ-to-EF 似乎是朝着错误方向迈出的一大步,朝着面向 OO 建模和远离关系模型(当然,并不是每个人都会同意我的观点 ;-)。
在 C 中有用于 postgres的嵌入式 SQL : http ://www.postgresql.org/docs/8.4/interactive/ecpg.html
但我自己从来没有用过。
在大多数情况下,一个简单的库可以很好地访问 SQL 数据库,并在“关系”世界和面向对象世界之间提供良好的分离(尽管,正如 Marcelo Cantos 所说,SQL 实际上在最初的理论意义上不是关系...... )。
但是,也许您正在寻找在关系和面向对象之间“映射”的东西?有一种称为面向对象映射的技术可以为关系数据库创建某种面向对象的视图(参见http://en.wikipedia.org/wiki/Object-relational_mapping)。但请注意,这听起来不错,但实际上会产生一些问题(有关详细信息,请参阅http://en.wikipedia.org/wiki/Object-relational_impedance_mismatch)。