O artigo do August Article Bounty sobre Global Masters, e um dos tópicos propostos me pareceu bastante interessante para uso futuro em minhas aulas. Então, é isso que eu gostaria de dizer aos meus alunos sobre tabelas no IRIS e como elas se correlacionam com o modelo de objeto.
Primeiro, o InterSystems IRIS possui um modelo de dados unificado. Isso significa que, ao trabalhar com dados, você não está preso a um único paradigma. Os mesmos dados podem ser acessados e manipulados como uma tabela SQL tradicional, como um objeto nativo, ou até mesmo como um array multidimensional (um global). Isso significa que, ao criar uma tabela SQL, o IRIS cria automaticamente uma classe de objeto correspondente. Ao definir uma classe de objeto, o IRIS a torna automaticamente disponível como uma tabela SQL. Os dados em si são armazenados apenas uma vez no eficiente motor de armazenamento multidimensional do IRIS. O motor SQL e o motor de objeto são simplesmente diferentes "lentes" para visualizar e trabalhar com os mesmos dados.
Primeiro, vamos ver a correlação entre o modelo relacional e o modelo de objeto:
Nem sempre é uma correlação de 1:1, já que você pode ter várias tabelas representando uma classe, por exemplo. Mas é uma regra geral.
Neste artigo, discutirei a criação de uma tabela listando suas colunas.
A abordagem mais básica:
CREATE TABLE [IF NOT EXISTS] table (
column1 type1 [NOT NULL],
column2 type2 [UNIQUE],
column3 type3 [PRIMARY KEY]
...
[CONSTRAINT fKeyName FOREIGN KEY (column) REFERENCES refTable (refColumn)]
)
[ ] designam as partes opcionais.
Vamos criar uma tabela DC.PostType
,que consiste em três colunas: TypeID
(chave primária), Name
, eDescription
:
CREATE TABLE DC.PostType (
TypeID INT NOT NULL,
Name VARCHAR(20),
Description VARCHAR(500),
CONSTRAINT Type_PK PRIMARY KEY (TypeID)
)
Como resultado, obteremos a seguinte classe após a execução da instrução SQL acima:
Class DC.PostType Extends %Persistent [ ClassType = persistent, DdlAllowed, Final, Owner = {UnknownUser}, ProcedureBlock, SqlRowIdPrivate, SqlTableName = PostType ]
{
Property TypeID As %Library.Integer(MAXVAL = 2147483647, MINVAL = -2147483648) [ Required, SqlColumnNumber = 2 ]
Property Name As %Library.String(MAXLEN = 20) [ SqlColumnNumber = 3 ]
Property Description As %Library.String(MAXLEN = 500) [ SqlColumnNumber = 4 ]
Parameter USEEXTENTSET = 1
Index DDLBEIndex [ Extent, SqlName = "%%DDLBEIndex", Type = bitmap ]
Index TypePK On TypeID [ PrimaryKey, SqlName = Type_PK, Type = index, Unique ]
Storage Default
{
<Data name="PostTypeDefaultData">
<Value name="1">
<Value>TypeID</Value>
</Value>
<Value name="2">
<Value>Name</Value>
</Value>
<Value name="3">
<Value>Description</Value>
</Value>
</Data>
<DataLocation>^B3xx.DXwO.1</DataLocation>
<DefaultData>PostTypeDefaultData</DefaultData>
<ExtentLocation>^B3xx.DXwO</ExtentLocation>
<IdFunction>sequence</IdFunction>
<IdLocation>^B3xx.DXwO.1</IdLocation>
<Index name="DDLBEIndex">
<Location>^B3xx.DXwO.2</Location>
</Index>
<Index name="IDKEY">
<Location>^B3xx.DXwO.1</Location>
</Index>
<Index name="TypePK">
<Location>^B3xx.DXwO.3</Location>
</Index>
<IndexLocation>^B3xx.DXwO.I</IndexLocation>
<StreamLocation>^B3xx.DXwO.S</StreamLocation>
<Type>%Storage.Persistent</Type>
}
}
Principais Observações:
TABLE DC.PostType
se tornouClass DC.PostType
.
- A classe
Extends %Persistent
,que é o que informa ao IRIS para armazenar seus dados no banco de dados.
VARCHAR
se tornou %String
.
INT
se tornou%Integer
.
- A restrição
PRIMARY KEY
criou um Index
com a palavra-chave PrimaryKey
.
Agora você pode usar esta tabela/classe de qualquer lado, por exemplo, usando SQL:
INSERT INTO DC.PostType (TypeID, Name, Description) VALUES (1, 'Question', 'Ask a question from the Community')
Há muito mais sobre a criação de tabelas usando SQL, por favor, leia a documentação fornecida abaixo.