データベース設計からDDLを作成する

2014年6月9日

システムの肝となるデータベース設計は、
システムの実装段階ではこれをもとにデータ定義言語(DDL : Data Definition Language)を作ります。

データベース設計はExcelなどで作り、
DDLはこれをもとにテキストファイルで作るわけですが、気をつけて行わないと、
資料としてのデータベース設計と、実装としてのデータベースに
違いがでてしまう、ということがあります。

このようなことを可能な限り防ぐために、どうしたらよいのか
いろいろと試行錯誤してきたのですが、
いったん解決の目処をつけましたので、まとめたいと思います。

 

DDLの例


DDLはおおむね、下記のような形でデータベースを定義します。
(以下の例はMySQLの場合)

CREATE TABLE `users` ( 
  `id` int not null,
  `user_name` varchar(64),
  `user_mailaddress` varchar(255),
  `password` varchar(128),
  PRIMARY KEY (id ASC)
);

仮に、あとから住所情報を登録するための項目が必要になった場合は
下記のようにして項目を追加できます。

ALTER TABLE `users` 
  ADD COLUMN `address` varchar(255) AFTER `user_mailaddress`;

これで住所用の項目(address)を、メールアドレス用項目(user_mailaddress)の
後ろに追加することができました。

 

資料と実装に違いがでる理由


プロジェクト管理の問題でもあるのですが、
開発者が「設計書(資料)の更新は後回しで、先にDDLを作ろう」と考えてしまった場合、
資料が更新されずにどんどんと古い情報になってしまいがちです。

開発プロジェクトが落ち着いているときは、資料をつくり、レビューして
これをもとにDDLを作っていたとしても、
忙しくなってくると「資料は後回し!」になってしまうのは
(褒められたことではありませんが)かなりよく見受けられます。

 

問題を解決するために(1)~実装から資料を作る


どうせ「資料は後回し!」なのであれば、
実装をもとにあとで資料を一挙に作ればよいのでは、というアプローチ(ツール)があります。

ツールは、本番環境のデータベースに接続し、構造を解析し、Excelなどで設計書(らしきもの)を自動作成します。
そうすれば実装と資料とに差異はでません。

しかし、それなら「なんのための設計書(資料)か?」という気がします。
設計はあくまで設計で、実装の前に行うべきものであり
実装方針に間違いがないかレビューするためのものでもあります。
実装情報を後追いで確認するためのものではないはずです。

 

問題を解決するために(2)~資料をもとにDDLを作る


一方、本来の手順どおりに、設計書をもとにDDLを作成する、
というアプローチ(ツール)も存在しています。
設計書を読み込んでDDLを自動生成したり、
直接データベースシステムにテーブルそのものを作ったりします。

これなら問題ないはずなのですが、
実際に使ってみると、問題ないのはリリース前の開発段階だけでした。

というのは、このアプローチによるツールは、調べた限り、
あくまで「作成」用のDDLしか作らず(冒頭の例でいえばCREATE文)
差分を作るためのDDL(冒頭のALTER文)は作れないのです。

一度リリースしてしまったシステムで、
たとえばあとから「ユーザーの住所を追加したいね」となったら
作成するべきDDLは、差分のみ(ALTER)です。

 

問題を解決するために(3)~資料をもとに差分DDLを作る


十数年、システム業界に携わってきて、
Oracleから日立HiRDB、MySQLなどといくつかのデータベースシステムを使ってきましたが、
根本的な問題意識はずっと変わりませんでした。

つまり、いったんリリースしたシステムの機能追加のときに必要なのは
CREATE文ではなくALTER文であるにもかかわらず、
少なくとも私が見つけたツール類でそれを実現することはできないのでした。
そして結局、データベース設計書をみながら手作業でALTER文を作る、
ということを繰り返してきました。

実は、私自身もこれまで(2)に類するツールを、何度かExcelマクロで作成してきたのです。
しかし「差分(ALTER文)を自動生成する」というところにまでたどりついていませんでした。

データベース設計にだけ目を向ければ、「新たに追加した項目の追加日」を設計書に明記しさえすれば、
この日付をもとに「新しいテーブルなのか」「新しい項目なのか」を自動判断し、
CREATE文またはALTER文を作ることができます。

* * *

そういう考えで作ったのがこれです。

Excel DB設計 DDL 自動生成ツール
DB設計ツール.zip

設計書(例:DB論理設計20140601.xls)では、テーブルごと、項目ごとに「追加日」を記入することができます。
リリース後に新たに追加する項目やテーブルには、「追加日」にその日を指定しておきます。

DDLを作成するときには、「DDL作成ツール.xls」を起動し、
「出力のベース日付」に「最後のリリース日」を指定して実行します。
すると、「出力のベース日付」以降に追加されたテーブル・項目用のDDL(CREATE文とALTER文)を
自動生成する仕組みです。

ただし、いくつかの前提があります。

  • 作成するDDLはMySQL専用です
  • かつてはOracle、またはHiRDBに対応したものもありましたが(ただし(2)の機能のみ)、現在はどこかにいってしまいました
    →ご要望いただいても存在しません
  • 一度追加して本番リリースした項目は、削除しない運用前提です(ALTER DROP COLUMNは作成しません)
  • パーティションテーブルには対応してません
  • MITライセンスです

技術者の方であれば、このファイルを解凍し、Excelファイルを開けば
どう使うのか、すぐにおわかりになるのではないでしょうか。

もしも質問があれば、お問合せください。

 

お問い合わせ

本記事(データベース設計からDDLを作成する)にかかわること、 中小企業様さま向けの社内向け業務ウェブシステムにかかわることなど ご相談、ご質問などがありましたら何なりとお問い合わせください。




この記事の著者

イルカシステム(株) イルカシステム株式会社

イルカシステム(株)は、以下のような業務用ウェブシステムのご提案、受託開発、運用を行っております。

1.中小企業さま向けの社内向け業務ウェブシステム(営業支援、顧客管理、受注管理、請求入金管理、在庫管理、経営数値管理など)

2.医療業界向けの業務改善システム

※業務ウェブシステムの開発を効率化するための自社サービス「イルカベーカリー」をご提供しております。
※医療業界向けに、臨床研究の無作為割付自動化のための自社サービス「ムジンワリ」をご提供しております。

お問合せはお気軽に、こちらからどうぞ! → イルカシステム株式会社へ問合せ

著者:イルカシステム株式会社

イルカシステムについて

お問い合わせ




会社概要

<p>イルカシステム(株)</p>
<img src="http://www.iruka-system.co.jp/wp-content/uploads/2017/01/WS000000.png" alt="会社概要 住所" width="243" height="84" class="alignnone size-full wp-image-49" />
<div class="alert alert-warning">
2017/1/1より、住所変更いたしました。
</div>
<p><span class="label label-success">TEL</span> 03-5843-9168</p>

  • 中小企業 41個の記事

    中小企業様にご提案・開発してきた実績をもとに、システム構築について記載した様々な記事一覧です。

  • 社内システム 39個の記事

    様々な社内システムをご提案・開発してきた実績をもとに、システム構築について記載した様々な記事一覧です。

  • わかりやすさ 30個の記事

    情報システムをわかりやすく使いやすいものにするためのノウハウ、気をつけていることの記事一覧です。

  • UI設計 27個の記事

    UI(ユーザーインターフェース)は、システムの使い勝手を左右します。どんな点に気をつけているか、どんな考えでシステム開発しているかの記事一覧です。

  • 顧客管理 26個の記事

    これまで構築した様々なシステムのうち、顧客管理機能をどのような観点でご提案、開発しているかをまとめた記事一覧です。

  • 受注管理 18個の記事

    これまで構築した様々なシステムのうち、受注情報を管理する機能をどのような観点でご提案、開発しているかをまとめた記事一覧です。

  • ビジネス 18個の記事

  • 業務 16個の記事

  • 要件定義 14個の記事

    要件定義とはどのようなシステムを構築するのかを決める作業です。要件定義において注意し、考えていることをまとめた記事一覧です。

  • クラウド 13個の記事

  • 登録画面 13個の記事

  • 編集画面 12個の記事

  • システム会社 12個の記事

  • 情報共有 11個の記事

  • みえる化 11個の記事

    手作業をシステム化して効率化するだけでなく、それらの情報を集約して簡単に見えるようにし、社員が自律的に動ける組織を作ることが「みえる化」です。

  • 一覧画面 11個の記事

  • 業務用ウェブシステム 10個の記事

  • エクセル 9個の記事

  • コミュニケーション 9個の記事

  • セキュリティ 8個の記事