文章
· 八月 31, 2023 阅读大约需 1 分钟
常见问题--如何根据ID重建索引

InterSystems 常见问题解答

通过在持久类(=table)定义中提供的%BuildIndices() 方法的参数中指定要重建索引的 ID 的开始值和结束值,您可以仅重建该范围内的索引。

例如,要仅针对 ID=10 到 20 重建 Sample.Person 类中的 NameIDX 索引和 ZipCode 索引,请执行以下代码(ID 范围在第 5 个和第 6 个参数中指定)。

0 0
0 105
文章
· 八月 4, 2023 阅读大约需 3 分钟
在 InterSystems IRIS 中创建具有超过 999 个属性的类/表

InterSystems IRIS 目前将类限制为 999 个属性。

但是,如果您需要为每个对象存储更多数据该怎么办?

本文将回答这个问题(附加了社区 Python 网关的客串以及如何将广泛的数据集传输到 Python 中)。

答案其实很简单 - InterSystems IRIS 目前将类限制为 999 个属性,但不限制 999 个基元(primitives)。 InterSystems IRIS 中的属性可以是具有 999 个属性的对象等等 - 该限制很容易被忽略。

0 0
0 83
文章
· 四月 3, 2023 阅读大约需 2 分钟
M:N 多对多关系

如果您使用过 Caché Objects,你已经知道所有关于关系(一对多,父子孙继承等)......
但是您不会在文档中找到关于多对多关系的地方。

但我经常遇到 Caché 对象的新用户提出的问题:
“是否可以实现多对多关系?”答案是——当然!

如何实现取决于相关的任务:有一个比较重的和一个轻量级的解决方案。
两者的共同点是它们不能开箱即用需要添加一些代码来管理它。

让我们举一个基于 SAMPLES 命名空间的例子:

我们有 N:1 关系的情况

但是,您如何处理超过 1 个公司的员工?

重的解决方案:
您添加一个额外的持久类,与双方都有一个:多的关系。

1 0
0 121
文章
· 二月 22, 2023 阅读大约需 12 分钟
InterSystems IRIS的面向对象数据库特性

面向对象编程的优势

在应用程序开发时,我们使用的大多数开发语言都是面向对象编程 object-oriented programming (OOP)语言,例如大家熟悉的Java、.NET。而TIOBE的2023年2月的最新开发语言流行排行榜上,前5大语言都是面向对象编程语言,连排名第六的Visual Basic都有了越来越多的OO特性:

2 0
0 312
文章
· 八月 9, 2022 阅读大约需 1 分钟
Caché ObjectScript 快速参考

在Caché基础课程中,同学们同时学习了Caché开发和ObjectScript语法。为了帮助大家完成练习,我们提供了ObjectScript快速参考(俗称 "小抄")。

它不是所有ObjectScript的参考资料! 它是学生在课程中使用的ObjectScript命令和函数的列表,以及对象、集合等的常用语法。它还包含一些有用的宏。

我们正在为开发者社区提供一个pdf版本。

0 0
0 296
文章
· 六月 26, 2022 阅读大约需 5 分钟
跟踪数据更改 - 审计日志 - 下篇

前一篇文章中,我已经演示了一种简单的方法来记录数据的变化。在这个时候,我改变了负责记录审计数据的 "审计抽象类 "和记录审计日志的数据结构。

我已经将数据结构改为父子结构,其中将有两个表来记录 "交易 "和在该交易中改变的 "字段的值"。

看一下新的数据模型:

看看从 "审计类 "改变的代码吧:

0 0
0 127
问题
· 四月 29, 2022
Cache 动态 SQL 分页

我想知道是否有更好的方法来使用动态SQL对数据集进行分页,而不是我下面使用的方法。问题是,当潜在的数据池变大时,这段代码就会变慢,以至于无法使用。在分析下面的每一行代码时,似乎速度变慢与最初的rset.%Next()迭代有关。 有没有什么不需要子查询/%VID的可用方法,比如简单的LIMIT/OFFSET?

我的代码类似于:

s sql=##class(%SQL.Statement).%New()

s query="SELECT *,%VID FROM (SELECT prop FROM table WHERE prop=x) WHERE %VID BETWEEN 1 AND 100"

s sc=sql.%Prepare(query)

s rset=sql.%Execute()

while rset.%Next() {.....

0 1
1 294
文章
· 二月 24, 2022 阅读大约需 7 分钟
列出类的所有属性 (我喜欢 ObjectScript 的原因)

@Ming Zhou 在 https://community.intersystems.com/post/how-get-all-properties-defined-c 上问了一个很好的问题......而这个答案正好总结了为什么ObjectScript 是我最喜欢的语言。

当我第一次向别人介绍ObjectScript或IRIS时,我总是解释说,你可以写一个类,编译它,得到一个表,并从对象或关系的角度来处理你的数据--这是一种最自然的方式。

0 1
0 183

作为一个12岁的书呆子,我最喜欢的书是斯蒂芬-皮尔写的《英雄失败之书》,这是一本关于人类不足之处的纪事。对我来说,这本书的亮点是佩德罗-卡罗莱纳的故事,一个努力开发葡语-英语短语手册的人。这是一项崇高的事业,但由于他缺乏说英语的能力,也没有一本葡英字典,因此受到阻碍。

然而,他确实拥有一本法英词典,一本葡法词典和一种真正能干的态度。他的劳动成果对葡萄牙度假者毫无益处,却让12岁的我笑得歇斯底里。我经常愉快地回忆起这个故事,但直到我开始工作时,我才开始把自己和卡洛琳娜先生进行比较。

我的工作是一名信息建模师。信息建模师的工作可以轻描淡写地概括为把现实变成可以存储在数据库中的东西。这是通过设计信息模型来完成的。在传统的软件设计中,有三种类型的信息模型。概念性、逻辑性和物理性。你从概念模型开始,它是对我们想要数字化的东西以及它们之间的关系的一个高级描述。然后你转到逻辑模型,描述这些对象如何在数据库中理想地创建。最后,你在物理模型中实现这一点,物理模型是由用户维护数据的数据库的实际实现。

"这是信息建模的传统智慧。但这种方法是否能实现目的有待商榷"。

这是信息建模的传统智慧。但这种方法是否能实现目的有待商榷。佩德罗的短语书的故事之所以有趣,是因为其方法明显不合适,而且客观上结果很差。这在语言学上相当于用叉子喝汤。但是,当主题比较模糊时,就很难推断方法是如何以及何时有缺陷的。

1 0
0 316
文章
· 四月 15, 2021 阅读大约需 15 分钟
精华文章--访问IRIS数据平台的四种方式

IRIS 中支持的四种方式:

SQL、Objects、REST 和 GraphQL

卡济米尔·马列维奇,《运动员》(1932)

>

> “你当然无法理解! 习惯了坐马车旅行的人怎么可能理解乘坐火车或者飞机旅行的人的感受和印象?”
>

> >

> 卡济米尔·马列维奇 (1916)
>

## 引言

我们已经讨论过为什么在主题领域建模使用对象类型优于使用 SQL。 当时得出的结论和总结的事实如今依然适用。 那么,我们为什么要退后到对象和类型之前的时代,讨论将对象的操作拖回到使用global的技术? 我们又为什么要鼓励面条式代码?难道是为了用它难以跟踪的错误考验开发者的技能熟练度?

目前有几种观点支持通过基于 SQL/REST/GraphQL 的 API 传输数据,而不是将其表示为类型/对象:

  • 这些技术经过深入研究,相当易于部署。
  • 知名度非常高,已在便捷的开源软件中广泛实现。
  • 您通常别无选择,只能使用这些技术,尤其是在网络和数据库中。
  • 最重要的是,API 仍然使用对象,因为它们提供了在代码中实现 API 的最适途径。

在讨论实现 API 之前,我们先来看一下底层的抽象层。 下图显示了数据在永久存储位置与处理并向应用程序用户呈现的位置之间的移动方式。

0 0
0 495
文章
· 一月 14, 2021 阅读大约需 7 分钟
使用类投影安装 Caché 应用程序

您好! 本文介绍另一种为基于 InterSystems Caché 的解决方案创建安装程序的简单方法。 主题将涵盖只需一项操作即可安装或从 Caché 中完全删除的应用程序。 如果您仍在编写需要执行多个步骤才能安装应用程序的安装说明,是时候将这个过程自动化了。

0 0
0 98
文章
· 一月 11, 2021 阅读大约需 9 分钟
跟踪数据更改 - 审计日志 - 上篇

简介

许多应用程序都需要记录数据库中的数据变化,包括:哪些数据被更改、更改人和更改时间(审计日志记录) (维基百科audit logging)。 关于这个问题已经有了很多文章,而关于如何在Caché中实现也有很多不同的方法。

本文将介绍一个机制,帮助您实现用一个框架来跟踪和记录数据更改。一旦您的持久类继承自“审计抽象类”(Sample.AuditBase),此机制将通过“objectgenarator”方法创建一个触发器。由于这个持久类继承了Sample.AuditBase,所以当您编译持久类时,将自动生成用于审计更改的触发器。


Audit Class

这是将记录更改的类。

0 0
0 225
文章
· 一月 11, 2021 阅读大约需 3 分钟
类、表和Globals——工作原理

当我向技术人员介绍InterSystems IRIS时,我一般会先讲其核心是一个多模型DBMS。

我认为这是其主要优势(在DBMS方面)。数据仅存储一次。您只需访问您想用的API。
- 您想要数据的概要?用SQL!
- 您想用一份记录做更多事情?用对象!
- 想要访问或设置一个值,并且您知道键?用Globals!

乍一看挺好的,简明扼要,又传达了信息,但当人们真正开始使用InterSystems IRIS时,问题就来了。类、表和Globals是如何关联的?它们之间有什么关系?数据是如何存储的?

本文我将尝试回答这些问题,并解释这些到底是怎么回事。

第一部分 模型偏见

处理数据的人往往对他们使用的模型有偏见。

开发者们把数据视为对象。对他们而言,数据库和表都是通过CRUD(增查改删,最好是基于ORM)交互的盒子,但底层的概念模型都是对象(当然这对于我们大多数使用面向对象编程语言的开发者来说没错)。

而DBA大部分时间都在搞关系型DBMS,他们把数据视为表。对象只是行的封装器。

对于InterSystems IRIS,持久类也是一个表,将数据存储在Global中,因此需要进行一些澄清。

1 0
0 115