'Database'에 해당되는 글 2건

  1. 2010.10.10 SQL Server 튜닝 원리와 해법 [2010. 정재우]
  2. 2008.09.25 [MSSQL]SYNONYM in SQL Server 2005

SQL Server 튜닝 원리와 해법 [2010. 정재우]

책이야기 2010. 10. 10. 00:24
사용자 삽입 이미지
비투엔컨설팅의 프로마스터(ProMaster) 시리즈 3번째 이고,
우연히 "괜찮은 책 나온게 있나?"하고 서점 웹사이트를 보다 발견한 책이다.

Oracle관련 괜찮은 책은 국내에 많이 있지만 MicroSoft사의 SQLServer관련
좋은 서적은(특히 번역본이 아닌 순수 국내서로는) 찾아보기 힘들다.
가뭄속 단비라 할 정도로 이 책은 보기드문 수작이다.
거의 모든 설명이 실습예제와 함께있기에 좋다는 생각이 든다.
단순한 예제가 아닌 저자의 고민이 담긴 훌륭한 예제라 더욱...

근 1년 사이에 비투엔에서 나온 3권의 책은 꽤 오랜기간 이 분야의 필독서가
될 듯 하다. 내 주관심 분야인 모델링 책도 출간할 예정이라 들었는데,
많이 기대가 된다. 반면에 데이터베이스 분야의 베스트 셀러를 줄줄이 출간했던
엔코아는 가장 최근에 출간한 책이 2005년에 나온 '새로쓴 대용량 데이터베이스 솔루션'이다.
이화식 대표님이 많이 바쁜건 아는데, 그래도 독자들과의 약속을 너무 쉽게 생각하시는건 아니신지? ^^;

비투엔컨설팅 서적과 엔코아의 책의 가장 큰 차이중 하나는 설명하는 방법에 있다.
이화식 대표님이 쓰신 책들은 설명에 비유가 상당히 많은 편이다. 혹자는 이 부분을 아주 마음에 들지 않는다고
하기도 하고...하지만 비투엔 컨설팅의 서적들은 설명이 간결하고, 군더더기가 없기에 앞으로 나올 서적이
더욱 기대된다.

★★★★★

'책이야기' 카테고리의 다른 글

하악하악 [이외수]  (0) 2009.01.28
사랑하기 때문에 [기욤뮈소]  (0) 2009.01.25
데이터베이스 설계와 구축[이춘식]  (0) 2008.03.28
비용기반의 오라클 원리  (0) 2008.03.04
데이터 아키텍처 솔루션1  (0) 2007.12.28
: Comments 0

Write a comment


[MSSQL]SYNONYM in SQL Server 2005

카테고리 없음 2008. 9. 25. 11:48

이번 강좌의 목표는 Production.ProductModelProductDescriptionCulture 와 같은 대땅 긴 테이블을 참조할 때 매번 입력하기가 귀찮으니 이를 별칭으로 아주 간단하게 불러보자는 것입니다. SYNONYM은 우리말로 별칭, 동의어 쯤으로 해석될 수 있습니다. 영어 선생님 발음을 들어보니 첫 음절에 강쇠를 줘서 "씨~누님" 라고 하더라구요. 아무튼 SQL Server 2005에서는 SYNONYM을 통해 앞의 경우처럼 아주 긴 테이블 이름에 다른 별칭을 줘서 참조할 수 있게 해준답니다. 다음은 별칭을 붙일 수 있는 객체들의 목록입니다.

  • Table
  • View
  • Assembly (CLR) Stored Procedure
  • Assembly (CLR) Table-valued Function
  • Assembly (CLR) Scalar Function
  • Assembly Aggregate (CLR) Aggregate Functions
  • Replication-filter-procedure
  • Extended Stored Procedure
  • SQL Scalar Function
  • SQL Table-valued Function
  • SQL Inline-table-valued Function
  • SQL Stored Procedure

생각보다 별칭을 줄 수 있는 객체가 많죠? 왠만한건 다 된다고 보면 될 것 같으네요. 일단 해보고 안 되면, 안 되는구나~~ 하고 포기하면 되는거죠^^; 이제 본격적인 테스트입니다. 아래 쿼리를 실행하여 RainbowResearch, RiverResearch 2개의 데이터베이스를 생성합니다.

USE [master]
GO
/****** Object:  Database [RainbowResearch]     ******/
IF  EXISTS (SELECT name FROM sys.databases WHERE name = N'RainbowResearch'
)
DROP DATABASE
[RainbowResearch]
GO
CREATE DATABASE
RainbowResearch
GO
USE
RainbowResearch
GO 
USE
[master]
GO
/****** Object:  Database [RainbowResearch]     ******/
IF  EXISTS (SELECT name FROM sys.databases WHERE name = N'RiverResearch'
)
DROP DATABASE
[RiverResearch]
GO
CREATE DATABASE
RiverResearch
GO
USE
RiverResearch
GO

이제 각각의 데이터베이스에 스키마와 테이블, 저장 프로시저를 생성합니다. 그리고 테이블에는 소량의 데이터를 함께 추가합니다.

USE RainbowResearch
GO
CREATE SCHEMA
Rain
GO
CREATE SCHEMA
Snow
GO
CREATE TABLE Rainbowresearch.Rain.Cities (id INT, City VARCHAR(200
))
GO
INSERT INTO Rainbowresearch.Rain.Cities  SELECT 1,
'Hongkong'
INSERT INTO Rainbowresearch.Rain.Cities  SELECT 2,
'Tokyo'
INSERT INTO Rainbowresearch.Rain.Cities  SELECT 3,
'Beijing'
INSERT INTO Rainbowresearch.Rain.Cities  SELECT 4,
'Taipei'
INSERT INTO Rainbowresearch.Rain.Cities  SELECT 5,
'Seoul'
INSERT INTO Rainbowresearch.Rain.Cities  SELECT 6,
'Mumbai'
GO
CREATE PROCEDURE Rain.DisplayCities @id
INT
AS
SELECT
City FROM Rainbowresearch.Rain.Cities WHERE id=
@id
GO
CREATE TABLE Rainbowresearch.Snow.Cities (id INT, City VARCHAR(200
))
GO
INSERT INTO Rainbowresearch.Snow.Cities  SELECT 1,
'Tokyo'
INSERT INTO Rainbowresearch.Snow.Cities  SELECT 2,
'Seoul'
INSERT INTO Rainbowresearch.Snow.Cities  SELECT 3,
'Moscow'
INSERT INTO Rainbowresearch.Snow.Cities  SELECT 4,
'NewYork'
GO
CREATE PROCEDURE Snow.DisplayCities @id
INT
AS
SELECT
City FROM Rainbowresearch.Snow.Cities WHERE id=
@id
GO

USE
RiverResearch
GO
CREATE SCHEMA
River
GO
GO
CREATE TABLE RiverResearch.River.Cities (id INT, City VARCHAR(200
))
GO
INSERT INTO RiverResearch.River.Cities  SELECT 1,
'Hongkong'
INSERT INTO RiverResearch.River.Cities  SELECT 2,
'Tokyo'
INSERT INTO RiverResearch.River.Cities  SELECT 3,
'Beijing'
INSERT INTO RiverResearch.River.Cities  SELECT 4,
'Taipei'
INSERT INTO RiverResearch.River.Cities  SELECT 5,
'Seoul'
GO
CREATE PROCEDURE River.DisplayCities @id INT
AS
SELECT
City FROM RiverResearch.River.Cities WHERE id=@id

GO

이제 각각의 테이블을 통해 직접 SELECT 쿼리를 해 보도록 하겠습니다.

SELECT * FROM RiverResearch.River.Cities

GO
SELECT * FROM Rainbowresearch.Rain.Cities
GO
SELECT * FROM Rainbowresearch.Snow.Cities

GO
결과는 아래 [Fig 1.0] 과 같습니다. 우리가 적어야할 문장이 길로 긴것을 알 수 있죠?
 
Fig 1.0
이제 SYNONYM 을 이용하여 우리가 길게 적었던 데이터베이스, 스키마, 테이블 이름을 짧게 줄여 불러보도록 하겠습니다. 
USE RainbowResearch 
GO
CREATE SYNONYM  RiverCities FOR
RiverResearch.River.Cities
GO
CREATE SYNONYM  RainCities FOR
Rainbowresearch.Rain.Cities 
GO
CREATE SYNONYM  SnowCities FOR
Rainbowresearch.Snow.Cities 
GO
USE
RiverResearch
GO
CREATE SYNONYM  RiverCities FOR
RiverResearch.River.Cities
GO
CREATE SYNONYM  RainCities FOR
Rainbowresearch.Rain.Cities 
GO
CREATE SYNONYM  SnowCities FOR
Rainbowresearch.Snow.Cities 

GO

다음 쿼리를 실행하여 SYNONYM을 통해 데이터를 SELECT 합니다.
USE RiverResearch 
GO
SELECT * FROM
RiverCities
SELECT * FROM
RainCities
SELECT * FROM
SnowCities
GO
USE
RainbowResearch
GO
SELECT * FROM
RiverCities
GO
SELECT * FROM
RainCities
GO
SELECT * FROM
SnowCities
GO
위 쿼리의 결과는 아래 [Fig 1.1]과 같습니다.
 
Fig 1.1
SYNONYM을 통해 이번에는 저장 프로시저에 별칭을 주어 보겠습니다.
USE RainbowResearch 
GO
CREATE SYNONYM  ShowRiverCities FOR
RiverResearch.River.DisplayCities
GO
CREATE SYNONYM  ShowRainCities FOR
Rainbowresearch.Rain.DisplayCities 
GO
CREATE SYNONYM  ShowSnowCities FOR
Rainbowresearch.Snow.DisplayCities 
GO
USE
RiverResearch
GO
CREATE SYNONYM  ShowRiverCities FOR
RiverResearch.River.DisplayCities
GO
CREATE SYNONYM  ShowRainCities FOR
Rainbowresearch.Rain.DisplayCities 
GO
CREATE SYNONYM  ShowSnowCities FOR
Rainbowresearch.Snow.DisplayCities 

GO

이제 SYNONYM을 통해 저장 프로시저까지 실행할 수 있습니다.
USE RainbowResearch 
GO
EXEC
ShowRainCities 1
GO
EXEC
ShowRiverCities 3
GO
EXEC
ShowSnowCities 4
GO
USE
RiverResearch
GO
EXEC
ShowRainCities 1
GO
EXEC
ShowRiverCities 3
GO
EXEC
ShowSnowCities 4
GO
결과는 아래 [Fig 1.2]와 같습니다.
: Comments 0

Write a comment