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

公開日:2014/06/09

この記事は、書かれてから 6 年以上経過しており、内容が古い可能性があります。

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

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

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

 

DDLの例


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

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

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

[sql]
ALTER TABLE `users`
ADD COLUMN `address` varchar(255) AFTER `user_mailaddress`;
[/sql]

これで住所用の項目(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ファイルを開けば
どう使うのか、すぐにおわかりになるのではないでしょうか。

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

このページの著者

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

  1. 中小企業さま向けの社内向け営業支援、顧客管理、経営数値管理システム

    経営数値をリアルタイムで見える化し、目標達成度を常に把握することができ、顧客へのフォローもスムースになります

  2. 中小企業さま向けの受発注管理、請求入金管理、在庫管理

    御社特有の受発注業務、出荷処理をシステム化することで業容拡大への大きなお手伝いとなります

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

    ※医療業界向けに、臨床研究の無作為割付自動化のための自社サービス「 ムジンワリ 」をご提供しております。

  4. IoTシステムの開発

詳しくは ご提供サービス を参照してください。

お読みいただきありがとうございました

病院内でiPad利用する際のネットワーク接続方法

どのクラウドサービスを使うべきか...

こちらもおすすめ

システム化の相談はしてみたけれど...

中小企業のシステム導入に心強い補助金

訪問効果のある近所のお客様を探す顧客管理システムとは

お客様とのつながりを点数化し分析する

お客様との接点を記録することのメリット

顧客管理システムの目的は名簿作成ではない

顧客との接点を増やし売上をあげるシステム

お客様とのやりとりの記録のススメ

遠くのシステム会社が安い金額の提案をしてきたら?

システム会社に社内システムの保守を依頼するには