SQL表名称===类名吗?反之亦然?

时间:2014-11-03 18:30:28

标签: intersystems-cache

所以我只是学习缓存,对表格,类和全局变量有疑问,有什么区别?

我正在做教程,看起来,因为这是一个面向对象的数据库,一个类是一个表,反之亦然。因此,如果我创建一个类并使其具有属性的持久性,我可以使用SQL来查询它。这是真的?什么是全球化的呢?

我问的原因是因为我使用管理门户网站来处理我们的一个缓存应用程序,虽然我可以在WinSQL和Documatic中看到一个表,但同样的表似乎并不存在于类浏览器中(在管理门户网站下)...无法弄明白,是否隐藏?是否有命令在终端中查看类def?

谢谢!

1 个答案:

答案 0 :(得分:4)

在Caché中,类是表,表是类。您可以选择何时使用SQL访问以及何时使用面向对象的访问。

Globals是稀疏的多维数组,它们作为类/表下的存储空间。查看类末尾的存储定义,以查看存储持久类的实际全局变量(例如^ Sample.PersonD)

默认情况下,类名被投影为表名,但是有一些规则适用于确保表名符合SQL标准:

  • 如果你有一个深度为几个包的类(例如MyApp.Data.Person),那么除了最后一个“。”将在表名中替换为“_”(例如,MyApp_Data.Person将是表名)
  • 您不能在表名中使用保留的SQL关键字,因此如果您在User包中创建了一些内容(class:User.Person),那么Caché将更改包名称(例如,SQLUser.Person将是表)

我建议您参考http://docs.intersystems.com/cache20141/csp/docbook/DocBook.UI.Page.cls?KEY=GORIENT_ch_persistence了解更多详情