データモデルとスキーマ。
# ※本記事は、筆者の経験に基づき構成・記載されています。
# ※本記事の内容に不備や誤記があっても、筆者は責任を負いません。
# ※本記事の内容は、予告無く変更される可能性があります。
1.用語解説
▼データモデル
データの表現方法、構造をモデル化したもの。主として、DBMSで構築されるような一般的なデータベース構成方法を指す。[1][2]
▼スキーマ
データベースの構造、若しくはデータベースの構造を表したものを指す。[3]
インスタンスの定義という考え方もできる。
2.データモデル
データモデルに関し、概念データモデル、論理データモデル、物理データモデルの3つに区分し記述する。(便宜上ではあるが)
2-1.概念データモデル
現実世界を対象とし、データの意味の集合を表す。データにはどのような意味があるのか、という視点でのモデルである。[4]
論理データモデルと同義で取扱われることもある。
2-2.論理データモデル
データの構成を表す。データの意味を表現するためにどのように記録するのか、という視点でのモデルである。[2]
以下に、主な論理データモデルの種類を記す。
・階層型データモデル
・ネットワーク型データモデル
・リレーショナル型データモデル(関係モデル)
これらデータモデルの種類に応じ、データベースが実装される。
2-3.物理データモデル
データの電子的情報がどこにどのように格納されるのかを表す。物理記憶装置にどのように割り当てられ管理されるのか、という視点でのモデルである。[2]
3.スキーマ
ANSI/SPARC 3層スキーマを記述する。(便宜上ではあるが)
3-1.外部スキーマ
利用者(アプリケーションやユーザなど)からの視点でのデータベース構造を指す。サブスキーマとも呼ぶ。[2][5]
RDBMSでのビューオブジェクトに相当する。
3-2.概念スキーマ
データを構成する関係や属性を指す。論理スキーマ、または単にスキーマとも呼ぶ。[5]
RDBMSでのテーブルオブジェクトやりレーションに相当する。
3-3.内部スキーマ
データベースを物理記憶装置にどのように格納するかを表したものを指す。物理スキーマ、または記憶スキーマとも呼ぶ。[5]
4.データモデルとスキーマの関係
一般的、若しくは慣用的に、以下のような関係であると言われている。
・外部スキーマは、概念データモデルの一部である。
・概念スキーマは、概念データモデルの一部である。
・概念スキーマは、論理データモデルの一部とされることもある。
・内部スキーマは、物理データモデルの一部である。
データモデルとスキーマの考え方は、非常に混同しやすいので注意が必要である。以下のように理解することを推奨する。
データモデルとは、あくまでデータベースの構成方法と捉える。
スキーマとは、データベース構造そのものと捉える。
さらに、インスタンスとはスキーマの実体と捉える。
(スキーマはインスタンスの定義と言い換えることができる)
つまり、データベース構造であるスキーマの表現方法としてデータモデルがあり、スキーマの実体がインスタンスである、と考えることができる。
# ※参考文献
# [1]http://ja.wikipedia.org/wiki/%E3%83%87%E3%83%BC%E3%82%BF%E3%83%A2%E3%83%87%E3%83%AB
# [2]http://www16.ocn.ne.jp/~ichiman/db050.html
# [3]http://e-words.jp/w/E382B9E382ADE383BCE3839E.html
# [4]http://www.atmarkit.co.jp/fdb/rensai/db_enginer01/db_enginer01_2.html
# [5]http://ssinzo-web.hp.infoseek.co.jp/joho/kodogozen/05db/point01_01.htm
とりあえずITSツールとしたい。
「(仕事-その他)チケットドリブン開発をやってみますた。」で少々触れますたが、チケットドリブン開発のようなITS[1]を実装したいと思っています。とは言え、このSmallAdminは「気軽」に「使いやすい」をモットーにしたいのです。
チケットという形式でも良いし、ストーリーカードという形式でもいいので、ITSをうまく実装したいですね。
単純に、プロジェクトみたいなのを登録して、その下にチケットかストーリーカードがぶら下がってるイメージだけでもいいかなぁ。あとは、プロジェクトにメンバ登録して、担当者とかになる、みたいな。マイルストーン的なものも登録できるといいけど、ガントチャートを実装する気はないです。あとは他ソフトとの連携ですが、例えば構成管理ツールと連携できると良いでしょうけど、これも未だ実装しません。
まぁ、とりあえず、現時点での構想はここまでです。できれば2009/7くらいから本格稼動したいですけど、その時の仕事の状況とかもあるんで、気長に考えている次第です。
っちうか、今後もこうやって企画をやってくなら、SmallAdminで管理していきたいかも。MyPortal[2]やってる場合か?!w
# [1] ITS:Issue Tracking System (課題追跡システム)
# [2] MyPortal:企画第1弾
そろそろ本格始動してみようかな。
勉強目的で作るWebアプリ、MyPortal。前々から興味津々なRuby on Railsでやってみようと決意してみますた。仕事のことを考えるとJavaにしといた方がいいでしょうけど、まぁ、冒険心ってやつです。というか、たまたまRubyできるエンジニアが近くにいるってのがでかいです。もしかしたらJavaでも作ってみて比較とかするかも。いや、でもそれはまだ考えないどこう。あと、DBMSはとりあえずMySQLにします。こっちもいずれPostgreSQLと比較とかできるといいな。
てことで、本格始動してみようかなと思い。でも僕は残念ながら初心者に限りなく近いので、スモールスタートでじっくり勉強しながら開発を進めます。
以下、現時点の構想。
▼バージョン管理
3つのセグメントで管理する。
X.X.X
第一セグメント:メジャーバージョンとして使用
第二セグメント:マイナーバージョンとして使用
第三セグメント:ちっさい改修として使用
▼バージョン0.1.0
ユーザ登録、ログイン、ログアウトだけ。
▼バージョン0.2.0
リンク集みたいなのにしようかな。
リンク先のサイトのログイン情報とかもメモ可能。
▼マイルストーン
2009/05/31(Sun):S/W構成の概要決定
2009/06/14(Sun):開発環境構築
2009/06/21(Sun):Ver.0.1.0の資料作る
2009/06/28(Sun):Ver.0.1.0試作品作る
2009/07/05(Sun):Ver.0.2.0の構想固める
2009/07/12(Sun):Ver.0.2.0の資料作る
2009/07/26(Sun):Ver.0.2.0試作品作る
サーバ側の作業は未だぜんぜん考えていません。まずは開発環境でVer.0.1.0がある程度できてから考えます。
小さいノートPCを買いたい。
もういやです。
もういやなので、OS変えます。Linuxにします。
それはさておき。
何はともあれ、Windowsじゃないと何かと不便な世の中であることは認めたくない事実。ゆえ、小さいノートPCでも買おうかな、と思います。4万円くらいの。WinXPのSP3プリインストール版でも。悪くないでしょ?
てことで、軍資金を集めないとっっ!!どっかのネットオークションサイトでギターでも売ろうかな・・・
SmallAdmin構築プロジェクト。
MyPortal(*1)の構想が固まってないくせに、第2弾の企画です。
SmallAdmin。
ソフトウェア開発の場を想定し、マネージャでもリーダでもサブリーダでもないエンジニアのための管理ツール的な位置付けです。
(*1)MyPortal ・・・ 第1弾の企画。
リーダクラスの人が作ったWBSという名のセンピョウ、あなたは本当に信頼していますか?僕は信頼していません。いや、信頼しないようにしています。だって、随分昔に誰かが見積もった情報を元に作成されていたり、顧客やらプロジェクト管理者やらにとっての資料だったりするわけですから。作業担当者からすると、本当の本当の実際の事実上の作業はどんなことなのよ?っていうのがその資料からは読み取れなかったりするんです。
じゃ、せめて自分の作業を手軽に管理できるようなツールがあればいいじゃん。それがSmallAdminというわけでございます。
もちろん、既に世の中に同じようなものがあるでしょうけど、それはそれで良いんです。MyPortalと同じく、僕の勉強の一環として企画していますので。
レベルを上げて、カンダタを倒すんだ!
ちなみに僕はまだルイーダで酒飲んでるレベルです。
勇者こないかな~。
えと、自分の作業が管理できるような、そしてお手軽に使えるような、そんなツールにしたいです。プロジェクト管理とかっていう大袈裟なものじゃないです。あとは、スタンドアローンで使えるのがいいかな。とにかくお手軽、そしてreadmeやヘルプに頼ることなく直感的に操作できるようなものがいいですね。
とりあえず、同じようなツールの調査を当面の目標にします。え?パクるつもりかって?それはノーコメントです。w
一番のネックが解決しますた。
MyPortal構築プロジェクトの一番のネックと言えば、環境構築です。僕んちにサーバ機をたてるなど不可能に近いためです。金銭的な問題も無視できませんが、そもそもそんな知識や技術を持ち合わせていないという問題もあり。もちろんやってみたいんですが、そこから始めちゃうと企画倒れになること必至のため。。
てことで、僕の尊敬する、崇拝する、イケメンの、あとは、えーと、凄腕の、博学の、スーパーエンジニアである某氏の協力を得て、サーバを間借りすることになりました!某氏、ありがとうございます!!こんだけ誉めたので許してください!
さて。
秘匿性を加味しつつ、現段階での構想を記しておきます。
まずOS。Linuxです。Distributionは伏せておきます。
で、HTTPサーバ。既にApacheがデーモンしてます。ただ、既存Apacheをそのまま使わせてもらうのはどうかな、と思うところあり。MyPortalが自前でたてても良いかな、と。その場合、既存Apacheと通信させようかな、と。まぁここらへんは追々決めます。
そしてMiddleWare。
DBMSは取り合えずMySQLを予定しています。
アプリは・・・、プログラム言語を何にするかに依存しますね。今のところRubyかJavaにしようと考えています。RubyならRailsにします。Javaならスクラッチか、若しくはwicketに少し興味あり。でもまぁ、とりあえずRuby on Railsをやってみたい感が強いです。
あまり知識がないだけに、めちゃくちゃなこと書いている可能性があります。。もし変な個所があったらご指摘下さい。。
ちなみに、現時点でのざっくり課題。
・MyPortalで何を実装するか決めてない
・知識・技術不足による進捗滞り
さーがんばるぞー。
楽しく勉強できればいーぜー。
MySQLの行方を考えていまつ。
MySQLとは、オープンソース界のDBMS製品のデファスタです。他にはPostgeSQLとかFireBirdとかもあります。MySQLと言えば、サンが買収した後、つい最近、オラクルがサンを買収したことで注目が集まっています。
さて、どうやら現在コミュニティベースで開発を進めている「MariaDB」の動きが、MySQLの行方を左右しそうです。というのも、MySQL開発者が開発していて、もちろんMySQL互換で、MySQLに関する買収劇の最中に成長している製品だからです。とゆーか、その開発者はMariaDBに注力するでしょうし。だって、サンを退社してるもん。
てことで、MySQLと同じくMariaDBも要注目です。
というか、もっというと、その開発者、ODAの存在を発表しましたし。ODAとは「The Open Database Alliance」のことだそうです。むしろODAも要注目ですね。
MyPortal構築プロ ジェクト。
急に。
さて、何作ろうかな。とりあえず、僕はあんまり技術力とか無いから、簡単なWebサイトを作ってみようかな。自分で作ってみたら、きっと良い経験になるはずさ。
てことで、BtoCなポータルサイトでも作ろうと思います。
題して、MyPortal。
正式なサイト名は今後考えますが、とりあえずはMyPortalと呼びます。だから、プロジェクト名も本記事のタイトルの通り、MyPortal構築プロジェクトです。
以下、思い立った時点でのちょー簡単なユースケース記述をば。
<UC1>
▼ユースケース名
MyPortalへのアクセス
▼概要
アクターがシステムへアクセスする。
▼アクター
ネットサーファー(一般のPC(インターネット)利用者)
▼システム
Webサイト(=MyPortal)
▼前提条件
アクターは、インターネットに接続できるPCを使う。
アクターは、Webブラウザを用いてネットサーフィンを行うことができる。
アクターは、PC上で利用可能なEメールアドレスを持っている。
システムは、サービスをオープンしている。
▼基本系列
1.アクターは、MyPortalへアクセスする。
2.システムは、MyPortalのログイン画面を表示する。
3.アクターは、Eメールアドレスとパスワードをシステムに入力する。
4.アクターは、ログイン機能を実行する。
5.システムは、MyPortalのトップ画面を表示する。
6.アクターは、ログアウト機能を実行する。
7.システムは、MyPortalのログイン画面を表示する。
▼代替系列
3a-1.アクターは、新規登録機能を実行する。
3a-2.システムは、新規登録画面を表示する。
3a-3.アクターは、Eメールアドレスとパスワードを入力する。
3a-4.アクターは、登録機能を実行する。
3a-5.システムは、MyPortalのログイン画面を表示する。
そして、ユースケース<UC1>の機能一覧。これもちょー簡単に。
<UC1-機能一覧>
▼ログイン機能
入力されたEメールアドレスとパスワードを引数とし、ユーザの認証をする。
ユーザの認証後、トップ画面を表示する。
▼ログアウト機能
セッションを破棄し、ログイン画面を表示する。
▼新規登録機能
新規登録画面を表示する。
▼登録機能
入力されたEメールアドレスとパスワードを、システムに登録する。
システムに登録後、ログイン画面を表示する。
さてさて、今月中には、おーまかなS/W構成くらいは決めたいところです。H/WとN/Wに関しては、どっかのレンタルサーバってことで簡便して下さい。無料、もしくはお安いところ。というか、よう考えたら、レンタルサーバによって使える言語とか決まってきますね。
さー、楽しくなってきたぞー。
チケットドリブン開発をやってみますた。
ソフトウェア開発において、様々な開発手法なるものが提唱されまくっています。一言で開発手法と言っても、プロジェクト全体を俯瞰した手法やプログラミングに焦点をあてた手法など、その種類も様々です。
僕が経験したことのある開発手法の中で、チケットドリブン開発というお勧めの一品があります。このお勧めの一品について書いてみます。
チケットドリブン開発とは、ソフトウェア開発において発生する作業をチケットと呼び、チケット単位で作業を進めていく開発手法です。
イメージとしては、、、
・必要な作業をチケットとして発行する
・チケットには作業内容や担当者やマイルストーンなどが記される
・チケット担当者は作業内容に沿って作業を進める
・作業が完了したらチケットをクローズする
こんな流れの開発です。
これだけを見ると、とても開発手法と呼べる代物では無いと感じちゃいそうですね。作業をチケットと呼んでるだけじゃん、て思っちゃいますね。あまりに説明が悪すぎますね。w
えと、チケットドリブン開発を経験して、非常に良いと感じた点を書きます。
(1)リーダのみでなくメンバもチケット発行が可能
(2)メンバ間で作業を依頼し合える、言わば対話型の作業形態
(3)自分の作業が把握しやすい
(4)他メンバの作業が把握しやすい
(5)作業内容や進捗などの情報がチケット単位で整理される
(6)どの作業でどの成果物が作成されるかが把握しやすい
これらのうち最も恩恵を受けたのは、ズバリ(2)です。従来のタスクリストなどと呼ばれる無機質な資料を元に作業を進めるより、対話型の作業形態とすることで、
・作業と作業の兼ね合いが把握しやすくなる
・メンバ間のコミュニケーションの一助になる
・作業に対するモチベーションが維持できる
などという効果が得られます。でっかく言うと、ソフトウェア開発を円滑に進めることができるようになります。
但し、欠点というか、工夫しなければならない点もあります。それは、誰でもチケット発行ができてしまう運用にすると、作業の粒度が揃わなくなることです。また、作業工数の見積を発行者が行う場合は、見積の精度も揃わなくなります。これらは無視できる問題ではありません。
さて、そういえばソフトウェア開発の現場で、よくセンピョウばかりを気にしてセンピョウばかりに時間を費やしている人、いませんか?しかも、リーダやサブリーダとか呼ばれてたりしませんか?
そのような人は、そんなことやりたくてやっているわけではないと思います。でも、やらなきゃいけないんです、きっと。なんでそんなことしてるかというと、そういうプロジェクト管理をしているからなんです。やってる人に非はないんです。たぶん。
だって、センピョウなんて日々更新されるものじゃないですか。そんなのに張り付いててどうすんのさ。そんな時間あるなら、一つでもタスクを消化して下さいよ。
そんな現場にお勧めしたい、そんな開発手法がチケットドリブン開発です。
因みに、redmineを使用してチケットドリブン開発を行いました。他にも幾つかソフトがあるようです。別に何かソフトを使わないとできないわけじゃないですけど、チケット情報の管理とか、チケット発行時にメールでお知らせとか、SVNなどとの連携ができた方が便利です。
えー、柄にも無く色々書いちゃいましたが、アジャイル開発との親和性も抜群だぜ的な話も書こうかな。いやでもアジャイル開発への理解が乏しいため、辞退します。w
Microsoft Windows 7。その2。
どうやら今年の年末商戦の目玉商品になるらしいですね、Win7。
色々なブログやらなんやらを見ていると、以下のような意見が多いようです。
・複雑な機能は不要だ
・必要最小限の機能で十分、軽くして安定性とセキュリティを確保しろ
・XPのままでいい
・VistaはMEと同じ扱い
・MS以外のOSに乗り換えた方が賢明
・タッチパネルは画面が汚れるしマウスで十分
はい。
わたくし、以前「(その他)Microsoft Windows 7。」でこう書きました。
・結局は動けばいいのです。
そして、その理由として、以下を挙げました。
・H/Wの性能が上がってるからS/Wの性能が上がってもいい
・ストレス無く動けばいい
・使い勝手が今までと同じかそれ以上ならいい
ようは、そういうことです。
「XPでいいじゃん」なんて言っちゃう気持ちは痛いほどわかりますが、XPだって批判が多かったわけです。個人的にはWin2Kに頑張って欲しいとか思っちゃってます。そういうことなんです。
てことで、嫁と相談した結果、今使ってるPCのOSをLinuxにしようという結論に至りますた。ちなみに嫁はIT業界関係者ではありません。僕の影響でもなく、元々そういう人なんです。w
さーて、Distribution選びでもしよーかなっと~。
お勧めがありましたらご紹介頂けると嬉しいでーす。