テーブル設計を後から変更 現場で使える小技のご紹介 株式会社ジーワンシステム 生島 勘富(イクシマ サダヨシ)

Slides:



Advertisements
Similar presentations
1 事業者 PR 支援ツール「 SHIFT 」のポイント  導入運用は無償提供 全国商工会連合会のサーバを利用するため、導入・運用の費用や、 面倒なサーバ保守の手間がかかりません。 ( ※ページ自体は、テンプレート提供となり、コンテンツ類の新規、修正、更新などは含みません。 )  誰にでも簡単にページの更新や新着情報登録ができます。
Advertisements

1 金属加工会社における 生産工程管理システムの開発 電子情報システム工学専攻 S0713 清水 邦宏.
実践!DB逆設計 ~レシートからER図を起こす~
(実はアイコンは単なる飾りで、この縦書きの部分のどこをクリックしても次のページに移動します。)
サイボウズ デヂエ 8 新機能ご説明資料 サイボウズ株式会社.
情報理工学部 情報システム工学科 ラシキアゼミ 3年 H 井奈波 和也
ブラウザの基本操作 前のページに戻る ブラウザの左上にある 「戻る」ボタンで、自分がたどってきた一つ前のページに戻ることができます。
eラーニング推進機構eラーニング授業設計支援室
Ruby on Rails 勉強会 11月5日「土」 崔 昌権
3-1 MySQLについて 発表者:藤村元彦 自然言語処理研究室.
MySQLに接続するデータベースプログラム
Excel による データベース入門 Ver /9.
CakePHPを業務に導入する Shin x blog 新原 雅司.
JavaによるCAI学習ソフトウェアの開発
技術トピックス 2015/03.
ACCESSによる データベースアプリケーション開発実習 日本工業大学 情報工学科 “データベースの実際” 教材
Accessによる SQLの操作 ~実際にテーブルを操作してみよう!~.
Accessによるデータベース(3) Ver /11.
続 Entity Framework 入門 SQLWorld #8 サヴロウ.
ケータイキット for Smarty のご紹介
SQL J2EE I 第3回 /
DBバックアップあーんどリカバリ HN おいろん.
DBバックアップあーんどリカバリ HN おいろん.
データモデリング トップダウンモデルと ボトムアップモデルの融合
F5 を押すか、または [スライド ショー] > [最初から] をクリックして、コースを開始してください。
     年  月  日 名前 太郎 1 班.
RDBMSについて 2年7組  小鹿 慎太郎.
3-2.データを取り出す 2004年 5月20日(木) 01T6074X 茂木啓悟.
さとりすと Satori Ghost Editor 里々ゴーストの統合開発環境を作ったよ page: 1/25
ノンプログラマのための Selenium de DDT はじめの一歩
パフォーマンスチューニング on Rails
14.テーブル定義,一対多の関係,多対多の関係, 外部キー,索引(インデックス),データベース操作
パソコン同好会のホームページは今回WordPressに変わったのですが 使いづらいとの声が多いので投稿者用の手順書を作ってみました。
標準化 ⇒ 標準化する いちいち思い出してやる、結果がバラつく 人に聞く、聞かれる 上手な人や、経験豊富な人のノウハウ
マイクロソフト Access を使ってみよう 第1回
データベース設計 データベース設計 第0回 オリエンテーション 坂口利裕.
マイクロソフト Access での SQL 演習 第1回 SQL問い合わせ(クエリ)
データベースとJavaをつなげよう! ~JDBC~
営業帳票システムに関するご提案書 (Draft)
Accessでできる 「サーバー・データベースシステム構築」のご紹介
スライド資料 C4 ICT機器を活用した授業づくり ④特別支援学校における ICT活用 兵庫教育大学の小川です。一応作者です。
迷宮師 コードレビュー チームカテキン.
Oracle APEX Forms変換の概要
第2回.リレーショナルデータベース入門 SQL を用いたテーブルへの行の挿入 SQL 問い合わせの発行と評価結果の確認.
3-10. MySQLシステムの管理  2004年6月10日  大北高広                01T6010F.
第2回.リレーショナルデータベース入門 SQL を用いたテーブルへの行の挿入 SQL 問い合わせの発行と評価結果の確認.
新たなバックアップソリューション「クローン機能」はここがスゴイ 新たなバックアップ方法「クローン機能」なら全て解決!
マイクロソフト Access での SQL 演習 第5回 副問い合わせ
第3回.テーブルの結合 結合条件 SQL を用いた結合問い合わせ.
第3回.テーブルの結合 結合条件 SQL を用いた結合問い合わせ.
新たなバックアップソリューション「クローン機能」はここがスゴイ 新たなバックアップ方法「クローン機能」なら全て解決!
3-6.インデックスについて 3-7.関数と併用されることの 多いMySQLコマンド
3-3.テーブルを更新する 2004年 4月22日(木) 01T6074X 茂木啓悟.
     年  月  日 名前 太郎 1 班.
eラーニング推進機構eラーニング授業設計支援室
株式会社プラチナゲームズ 技術戦略グループ 副グループ長 大寺 毅
一歩進んだ Views の使い方 スタジオ・ウミ 山中.
3.リレーショナルデータベース,主キー, SQL
Session 25: Statistical Methods (一つのみ)
再帰CTE を使って遊ぼう 大阪#9 2012/04/14.
関係データベースとSQL MZ Platform講習会(上級).
TableAdapterとSQLDependency 便利さを使い倒そう。 by えムナウ
CO-Client Opeartion 1.1 利用履歴データベースの設計 (スキーマ バージョン 対応)
09 06/23 PHP と SQL (MySQL) の連携 その3
eラーニング推進機構eラーニング授業設計支援室
データベース第3回目 意味ごとにテーブルを分ける
第2回.リレーショナルデータベース入門 SQL を用いたテーブルへの行の挿入 SQL 問い合わせの発行と評価結果の確認.
SQL J2EE I (データベース論) 第3回 /
SQL データベース論 第11回.
「図書系職員のための アプリケーション開発講習会」
Presentation transcript:

テーブル設計を後から変更 現場で使える小技のご紹介 株式会社ジーワンシステム 生島 勘富(イクシマ サダヨシ)

自己紹介 生島勘富(イクシマ サダヨシ)と申します。 実は長い間SQLServerを現場ではメンテでしか触っていません。 基本は受託開発をやっていますが、現在、オリジナルのSaaSを企画中です。 パフォチューなどの仕事があればご紹介ください(笑)。

はじめに(今回の概要) データモデリングに理想はありますが、現実は厳しい。 全く新規のシステムは非常に少なく、既存システムに引きずられることがほとんどです。 既存システムに影響を与えずに、理想に近いモデリングをするにはどうしたら良いかというお話です。

適応条件 最近多い(?)Big Dataには向きません。 「既存システムが複雑すぎてテーブル構造の変更ができない」というような場合に使います。 例えば、未だに【Filler01】などというフィールドが存在することがありますが、そういうシステムに、サブシステムなどを追加するときに利用すると良いでしょう。 ただし、インデックスなどが倍増する可能性もあります。

最初に新規のDBを用意 最初に新規のDBを用意します。 今後、開発するシステムは、新規DBにしか接続しないようにします。 Oracleの場合はスキーマを分ける形でも良いと思います。

命名法を検討し直す テーブルの命名法(お勧め) ID_具体名 IDは4桁ぐらいが良いでしょう。 例)M000_Customers   M100_Products   M110_Products_Info 大分類 中分類 小分類 M マスタ 0~Z T トランザクション W ワーク S システム

旧DBにカラムを追加 全面的にサロゲートキーを利用した形に変更します。 まずは、全テーブルに【ID】カラムを追加します。 外部キーに当たるカラムを追加します。 外部キーに当たるカラム名は【テーブルID(_識別子)】とします。 もし、*を使ってINSERTしているものがあれば……、修正しましょう……。

旧DBにカラムを追加2 例) http://d.hatena.ne.jp/Sikushima/20111220/1324338467

旧DBにトリガーを仕込む http://d.hatena.ne.jp/Sikushima/20111218/1324182140 トリガーを仕込み十分にテストを行ってください。 新ID、新外部キーにインデックスを追加してください。

カラムの命名法を検討 カラムの命名法を修正します。 例えば、ないことを祈りますが【Filler01】→ 【Memo01】とすべきかも知れません。 このようなカラム名の問題を、あるべき命名法に変換する一覧表をエクセルなどで作成します。

新DBにビューを作ります。 カラム変換表から新DBにビューを作ります。 CREATE VIEW [新テーブル名] AS  SELECT    [旧カラム名] AS [新カラム名]  ……  FROM [旧DB].[dbo].[旧テーブル名] 以降は新DBで新しい名前で開発が可能になります。 新DBで開発するときは、FROM句ではサロゲートキーで、WHERE句ではナチュラルキーか、サロゲートキーを利用します。

正規化のやり直し データを横に持っているなどの問題も、現実には多い問題です。 この場合はVIEWではなく、複数に分けた実テーブルを命名法に応じて作ります。 更に、旧システム(旧DB)でデータの更新があった際、新システム(新DB)に自動更新されるようにトリガーを作成します。 新システムでも更新が必要な場合は、連鎖・ロックに十分に配慮しながらトリガーを作成します。 ※ ディレイ更新も検討

旧DBの破棄 サブシステムを追加するにあたり、このようにDBのデータ構造を修正しておけば、次の大規模なリプレースのときに簡単にデータ移行ができます。 SELECT * INTO [新サーバ].[新新DB].[dbo].[新テーブル] FROM [新テーブル] など (ここまで横着をする必要はありませんが……) インデックスとトリガーは手作業で移行する必要があります。

まとめ 未だに【Filler01】などというカラムが残っているということは、20年近く前の設計思想を引き継いでいるシステムがあるということです。 その状態で、モデリングもヘッタクレもない。 20年近く前の遺物が残っているということは、手が付けられない状態であったのでしょうが、やりようによっては、既存システムを残したままで、サロゲートキーの適応まで可能です。 現実には、これすらもコストが許されないことが多いのですけれど、チャレンジする価値は高いです。

おまけ 弊社では昔から、漢字のテーブル(ビュー)名、カラム名に直したビューを顧客用に提供することが多いです。 更新権限を与えない場合もありますし、更新権限を与えて、マスターメンテ画面を作らない場合もあります。 また、【M000_Customers】というテーブル名に対し、【M000】というシノニムを設定することもあります。 工数を削減する効果は結構ありますので、規約が許せばご利用ください。

ご清聴ありがとうございました。 株式会社ジーワンシステム       生島 勘富       @sikushima       s.ikushima@g1sys.co.jp