SQL Geeks Indonesia

explore - brainstorm - share
See also: Other Geeks@INDC

News

where is the news

Community Web Site

February 2006 - Posts

Must Know : OLAP v.s OLTP

The design of a data warehouse database and online analytical processing (OLAP) cubes is fundamentally different than a transactional processing

database (OLTP). The data warehouse is specifically designed to facilitate super fast query times and multi-dimensional analysis. The following table

summarizes the major differences between OLTP and OLAP system design.

 

OLAP vs OLTP

 

 

OLTP System

Online Transaction Processing

(Operational System)

 

OLAP System

Online Analytical Processing

(Data Warehouse)

 

Source of data

 

Operational data; OLTPs are the original source

of the data.

 

Consolidation data; OLAP data comes from the

various OLTP Databases

 

Purpose of data

 

To control and run fundamental business tasks

 

To help with planning, problem solving, and

decision support

 

What the data

Reveals

 

A snapshot of ongoing business processes

 

Multi-dimensional views of various kinds of

business activities

 

Inserts and

Updates

 

Short and fast inserts and updates initiated by

end users

 

Periodic long-running batch jobs refresh the data

 

Queries

 

Relatively standardized and simple queries

Returning relatively few records

 

Often complex queries involving aggregations

 

Processing

Speed

 

Typically very fast

 

Depends on the amount of data involved; batch

data refreshes and complex queries may take

many hours; query speed can be improved by

creating indexes

 

Space

Requirements

 

Can be relatively small if historical data is

archived

 

Larger due to the existence of aggregation

structures and history data; requires more indexes

than OLTP

 

Database

Design

 

Highly normalized with many tables

 

Typically de-normalized with fewer tables; use of

star and/or snowflake schemas

 

Backup and

Recovery

 

Backup religiously; operational data is critical to run the business,

data loss is likely to entail

significant monetary loss and legal liability

 

Instead of regular backups, some environments

may consider simply reloading the OLTP data as a

recovery method

 

 

Share this post: | | | |
Regional setting Brake our data format !!!

Dari milis SQLServer-Indo ada pertanyaan tentang bagaimana agar setiap data yang masuk kedatabase kita tidak mengalami ketergantungan dengan regional setting di pc client. 

contoh select statmentnya :

cm.CommandText = "SET NOCOUNT ON" + vbNewLine + _

" UPDATE [Trans Arisan Sub Table] SET StatusBayar = 'Lunas', [Tgl Terima]='" + CStr(Format(Me.Tgl_Terima, "yyyy-mm-dd")) + "', [Jenis Bayar]='" + CStr(Me.Jns_bayar) + "'," + _

" [Kode Rekening]='" + CStr(Me.Kode_Rekening) + "'" + _

" WHERE [No Nota Sub] = " & CStr(Me.No_Nota_Sub) + vbNewLine + _

" UPDATE [trans arisan] SET optr = '" + GetUserID$ + "', [last update] = getdate() WHERE [No Nota] = " + CStr(Me.[No Nota])

Buat teman teman yang bisa menggunakan inline SQL statement, di codenya tentunya pernah mengalami masalah ini dimana untuk format tanggal dan decimal akan sangat bergantung dengan format data di berdasarkan regional setting di PC Client.  jika regional setting kita dengan server berbeda maka data datetime atau decimal akan berbeda pula formatnya khususnya ketika kita melakukan conversi ke string seperti pada statement query diatas CStr(Me.Kode_Rekening)

Untuk mengatasi masalah ini bisa dilakukan dengan cara melakukan passing parameter terhadap inline query yang dimaksud. Dengan menggunakan SQL parameter object.

Syntax

Set parameter = command.CreateParameter (Name, Type, Direction, Size, Value)

Kita bisa masukkan type yang kita inginkan untuk parameternya sehingga tidak tergantung pada regional setting. Ini berlaku juga untuk tipe data numeric decimal.

Contoh penggunaan SQL parameter dengan VBA:

' Open command object with one parameter

Set cmdByRoyalty = New ADODB.Command

' Parameter yang akan dipasing di tulis sebagai @Namavaliable di query yang kita buat

cmdByRoyalty.CommandText = "UPDATE [Trans Arisan Sub Table] SET StatusBayar = 'Lunas', [Tgl Terima]=@TglTerima"

cmdByRoyalty.CommandType = adCmdText

' Get parameter value and append parameter

Set paramtglterima = cmdByRoyalty.CreateParameter("@TglTerima", adDatetime, adParamInput)

cmdByRoyalty.Parameters.Append paramtglterima

prmByRoyalty.Value = Me.Tgl_Terima

' Create recordset by executing the command

Set cmdByRoyalty.ActiveConnection = Cnxn

Set rstByRoyalty = cmdByRoyalty.Execute

Lebih jelasnya tentang sql parameter bisa dilihat disini:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ado270/htm/mdmthappendx.asp

Sebagai masukan dan best pratice lebih baik gunakan store procedure dan passing value menggunakan sql parameter object. Selain akan mudah dimaintain akan lebih baik juga dari sis performance yang dihasilkan.

Untuk membandingkan pentingnya kita menggunakan Store procedure, bisa di lihat juga di artikel yang pernah saya tulis beberapa waktu yang lalu di sini :

 http://blogs.netindonesia.net/kiki/articles/6299.aspx

Share this post: | | | |
SQL-Indo User group Meeting

Hari ini  saya ikut menghadiri SQL user group meeting, pembicaranya adalah mas mca, sama mas basir.

acaranya dihadiri oleh kurang lebih 20 peserta anggota millis SQL indo. materinya tentang BI dan Service broker

acara ini akan diadakan tiap bulan di sekretariat SQL-indo di Ms Indonesia.

 

Share this post: | | | |
EAi Patern Biztalk
Buat yang ingin tahu apa yang dimaksud dengan EAI dan bagaimana
menggunakan Biztalk untuk menyelesaikan masalah EAI, saya sudah upload
ebook tentang EAI dengan biztalk. buat yang minat bisa baca di link
ini http://groups.yahoo.com/group/xml-indonesia/files/integrationpatterns_biztalk.pdf 
Share this post: | | | |
Ternyata ada juga Milis XML

Wah saya sedang ketemu excitment baru nih, pas tadi pagi mas hermawan telp saya kasih tau ada milis yang bicara masalah XML, Biztalk, Web Logic dst yang mungkin lebih banyak bicara masalah integrasi dan midle tier teknoligi membuat saya sangat tertarik. saya coba gabung ternyata membernya juga lumayan ada sekita 400 orang. hanya saja dari penjelasan moderatornya milis ini tidak seramai dulu ketika di canangkan (didirikan sejak tahun 2001)

Menurut mas kukuh sang moderator milis ini, terakhir agak kurang ramai karena sering dapat junk mail sehingga mode emailnya jadi moderated. dan ini tidak terkontrol sehingga membernya banyak yang unsubscibe. mudah mudahan milis ini bisa lebih aktif lagi apalagi dari segi teknology banyak sekali yang bisa didiskusikan seperti biztalk yang sampai hari ini sudah banyak sekali enhancement khususnya Biztalk 2006

Milisnya adalah http://groups.yahoo.com/group/xml-indonesia/

 

Share this post: | | | |
SQL XML : RAW, AUTO & EXPLISIT mode dalam menggunakan Select ... For XML Statement

Mungkin ada yang pernah mengenerate XML dari SQL, di SQL 2000 ada fasilitas untuk mengasilkan query dalam format XML.

Statement Sama dengan perintah select biasa. Statementnya  lebih dikenal dengan SELECT ... FOR XML

 

Contoh :

 

SELECT c.CustomerID, o.OrderID, o.OrderDate
FROM Customers c INNER JOIN Orders o ON c.CustomerID = o.CustomerID
ORDER BY c.CustomerID
FOR XML Auto

 

Perintah SELECT … For XML ini terdiri dari beberapa mode yaitu ROW, AUTO dan Explicit

Berikut perbedaaan masing masing mode:

 

1.Raw Mode

RAW Mode melakukan transformasi setiap row data dari query dan menyimpan hasilnya dalam sebuah XML element dengan nama element merupakan nama dari setiap Row. Setiap column yang memiliki nilai Not Null akan di mapping kedalam attribute yang memiliki nama yang sama dengan nama columnnya.

SELECT c.CustomerID, o.OrderID, o.OrderDate
FROM Customers c INNER JOIN Orders o ON c.CustomerID = o.CustomerID
ORDER BY c.CustomerID
FOR XML RAW

Out put dari query diatas adalah :

<row CustomerID="ALFKI" OrderID="10643" OrderDate="1997-08-25T00:00:00"/>
<row CustomerID="ANATR" OrderID="10308" OrderDate="1996-09-18T00:00:00"/>
<row CustomerID="ANATR" OrderID="10625" OrderDate="1997-08-08T00:00:00"/>

 

2. AUTO mode

AUTO mode akan mengembalikan hasil query berupa nested XML elements. Sama seperti RAW mode, setiap column yang memiliki nilai  not NULL akan di map sebagai sebuah attribute yang diberi nama sama dengan column name ataupun aliasnya. XML yang dihasilkan akan merupakan representasi dari hubungan Header and detail dari relasi join yang dilakukan oleh Query

SELECT Employees.EmployeeID, Employees.LastName, Employees.FirstName,
       Orders.OrderID, Orders.OrderDate, Orders.EmployeeID
FROM Orders INNER JOIN Employees ON Orders.EmployeeID = Employees.EmployeeID
ORDER BY Employees.EmployeeID ASC
FOR XML AUTO

Hasil XMLnya:

<Employees EmployeeID="1" LastName="Davolio" FirstName="Nancy">
  <Orders OrderID="10258" OrderDate="1996-07-17T00:00:00" EmployeeID="1"/>
  <Orders OrderID="10270" OrderDate="1996-08-01T00:00:00" EmployeeID="1"/>
</Employees>
<Employees EmployeeID="2" LastName="Fuller" FirstName="Andrew">
  <Orders OrderID="10248" OrderDate="1996-07-04T00:00:00" EmployeeID="5"/>
  <Orders OrderID="10249" OrderDate="1996-07-05T00:00:00" EmployeeID="6"/>
</Employees>

Salah satu kekurangan dari mode AUTO dan RAW adalah pada kalanya kita akan memerlukan root dari XML document yang kita miliki, hal ini tidak menjadi masalah di VB6. untuk itu mengatasi kebutuhan ini maka kita bisa menggunakan mode EXPLISIT

3. EXPLISIT Mode

Pada EXPLICIT mode, hasil XML document yang dihasilkan oleh query dapat diatur sesuai dengan querynya. Perintah Select yang terpisah yang menggunakan UNION All stament dapat menghasilkan striktur Nasted XML Document yang sesuai dengan levelnya.

SELECT 1 as Tag, NULL as Parent,
       c.CustomerID as [Customer!1!CustomerID],
       NULL as [Order!2!OrderID]
FROM Customers c

UNION ALL

SELECT 2 as Tag, 1 as Parent,
       c.CustomerID as [Customer!1!CustomerID],
       o.OrderID as [Order!2!OrderID]
FROM Customers c INNER JOIN Orders o ON c.CustomerID = o.CustomerID

ORDER BY [Customer!1!CustomerID], [Order!2!OrderID]
FOR XML EXPLICIT

Hasil XMLnya adalah :

<Customer CustomerID="ALFKI">
  <Order OrderID="10643">
  <Order OrderID="10692">
  ...
</Customer>
<Customer CustomerID="ANATR">
  <Order OrderID="10308">
  <Order OrderID="10625">
  ...
</Customer>

Untuk dapat lebih jelas mengenai contoh-contohnya dapat dilihat di SQL Book Online

Demikian sedikit sharing dari saya semoga bermanfaat, kalo ada tanggapan atau hal yang menarik untuk didiskusikan saya tunggu ya.

Share this post: | | | |