VisioのER図からDDLを生成

0.前置き

データベースの物理設計をする際に、Visio 2010 Professionalを用いてER図を描いています。
途中で気づいたんですが、最新のVisioでは、そのER図からDDLを生成してくれないんです。
(Visio 2005では、Enterprise Architect?という追加ツールでDDLの自動生成ができたみたいです。)

1.ツールを探す

ER図を描く他のツールを検証してみたりしました。例えば、以下の。

SQL Server専用のデータ型を定義できないのがいけてません…。
DDLを生成したあとにちょっと編集しないといけない。
これではメンテナンス性が低くなってしまいます。

2.Visio Forward Engineer Addin

やはり、VisioでER図を描いて、Visioで出力したいと思いました。
そこで見つけたのが、「Visio Forward Engineer Addin」というアドオン。
リンクを載せます。
CodePlex ~Visio Forward Engineer Addin~
インストール方法は特に難しくないので省略します。

3.試してみる

1. VisioでER図を描く。

2.Visio Forward Engineer AddinでDDLを出力する。
メニューのここにインストールされるので、開いて、

ForwardEngineerをクリック。

出力するDDLの簡単な設定。

3.DDL発行した結果
べた張りしてみます。

USE Master
GO
CREATE DATABASE [StoreDatabase]
GO
USE [StoreDatabase]
GO

IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Product]') AND type in (N'U'))
    DROP TABLE [dbo].[Product]
GO
CREATE TABLE [dbo].[Product] (
[Id] int identity  NOT NULL  
, [Name] nvarchar(100)  NOT NULL  
, [Description] nvarchar(4000)  NULL  
, [CategoryId] int  NOT NULL  
, [ModifiedDate] datetime  NOT NULL  
)
GO

ALTER TABLE [dbo].[Product] ADD CONSTRAINT [Product_PK] PRIMARY KEY CLUSTERED (
[Id]
)
GO
GO

IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Category]') AND type in (N'U'))
    DROP TABLE [dbo].[Category]
GO
CREATE TABLE [dbo].[Category] (
[Id] int identity  NOT NULL  
, [Name] char(10)  NOT NULL  
, [ModifiedDate] datetime  NOT NULL  
)
GO

ALTER TABLE [dbo].[Category] ADD CONSTRAINT [Category_PK] PRIMARY KEY CLUSTERED (
[Id]
)
GO
GO

ALTER TABLE [dbo].[Product] WITH CHECK ADD CONSTRAINT [Category_Product_FK1] FOREIGN KEY (
[CategoryId]
)
REFERENCES [dbo].[Category] (
[Id]
)
GO

GO

出力結果はこのような感じです。
型や制約も問題なさそうです。
これをT-SQLとして流せば、DBは完成します。

4.おわりに

簡単にDDLを自動生成できました。
すばらしい。

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。