2025年5月
 123
45678910
11121314151617
18192021222324
25262728293031

検索・リンク

データベースの設計

データベースの設計方法として、正規形の説明を行う。 テスト範囲としては、前週のSQLまでとし、テストはA4用紙1枚の資料持込可とする。

適切でないデータベースを例にしながら、更新不整合が発生することを説明する。 (不整合には、修正不整合・挿入不整合・削除不整合がある。) この不整合が発生しないデータベース(表)を作るためには、どうすべきかを解説。

ERモデル

不整合が起こらないようなデータベースとするには、実体関連にモデル化を行う。 実体・関連には、属性(attribute)が付随し、実体を長方形、関連をひし形、属性を楕円で表現する ER図を描く。

学生や教員といった実体は、人という汎化した視点であれば、識別番号と名前の属性で 表現できると意味で、共通である。人を学生という視点で特化した先に、学科名や学年といった 属性を持つと考えられる。こういった汎化階層は、オブジェクト指向と同じ。

実体の中には、他の実体と関連を持って初めて意味を持つ実体もある。 関連先の実体が消えれば、存在自体が無意味になってしまう実体は、弱実体と呼ぶ。

正規形

不整合が起こらないデータベースを構築するためには、様々な条件が存在する。 その条件を満たすデータ形式になっていることを、××正規形と呼ぶ。

第一正規形は、全属性が単一の値である原子値であるもの。

データを1つに絞り込めるデータ項目は超キーと呼ぶ。 必要最小限に厳選された超キーは、候補キーと呼ぶ。 候補キーで、管理上都合のいいものは主キーと呼ぶ。 属性の1つが決まると、他の属性も1つに自動的に絞り込まれる場合、 従属関係があるという。 候補キーに、非キー項目が従属する場合、完全従属と呼ぶ。 候補キーの一部が、非キー項目が従属するものは部分従属と呼ぶ。 部分従属がなく、非キー項目が候補キーに完全従属する場合第二正規形と呼ぶ。

非キーデータ項目A,Bの間に従属性があり、候補キーからAに従属性がある場合、 推移従属性があるという。 非キー・データ項目が、候補キーに完全従属し かつ 推移従属性がない場合第三正規形と呼ぶ。

不整合の発生しないデータベースにしたければ、第一正規形となるように、第二、第三と それぞれの正規形の条件を満たすように、ER図を書き換えていく。

B木の説明

2分木の応用ということで、式の表現などの説明を行ったが、 3項演算子などがでてくると、2本の木という枠からはずれてくる。 この延長として、B木の解説を行う。

B木の基本は、N-1個のデータd[]と、N個のポインタp[]から成り、 di-1と、diの間の値は、i番目の枝piの先に保存する方法。(以下の図はWikipediaより引用)

// BTreeの宣言の例
#define SIZE 5
struct BTree {
int  size ;                  // 1つのノード内のデータ数
int  data[ SIZE - 1 ] ;      // ノード内のデータ
struct BTree* next[ SIZE ] ; // 次のBTreeへのポインタ
} ;

実際のプログラムの概念を説明し、実コードは示さなかったが、 ノード内の検索などを説明する。

B木は、広く利用されており、データベースエンジンでは、B木を拡張した、 B+ などを利用している。

データベースの説明の延長として、最近普及しているOracle,MySQL,PostgreSQLなどの 事例を紹介したり、Linux+Apache+MySQL+PHP(LAMP)などの用語を簡単に紹介する。

携帯向けメールを速く確実に…

ニュースサイトを見ていたら、広告記事にて 『「携帯向けメールを速く・確実に送る7か条」2010年度版、無料配布開始』 というものを見つける。 緊急連絡システムでも、SPAM発信元と疑われないようにと、 配信メール数を制限しながら、送ったりと、色々と工夫が必要だったりする。 無料と書いてあるし、申し込みフォームより登録した。 さて、記載されたテクニック、簡単に使えるといいのだが… 『有料サイト××を経由してメール出せ…』といった記事ばっかりだったりしないよな…

追記:この会社KLab様より、先ほど資料を送付したとの連絡を受ける。 簡単な状況も聞かれたけど、自分の知らないテクニックを勉強したかったと伝え、 資料を待つことにする。 電話を切った直後に、違うおねぇさんから、間髪をおかずに電話がかかったのが笑える…

ブラック会社に勤めてるんだがもう俺は限界かもしれない

担任をしていて、就職にむけた意識づくりということで、OB講話だったりを企画したりしている。 先日も履歴書をテーマにHRを行った。 この不景気の就職難からすれば、「就職は甘くない」としつこく説明したい状態。 さて、この『ブラック会社に勤めてるんだがもう俺は限界かもしれない』という映画を 紹介しておこう。

ストーリーは、元ニートが就職したけど、 有名企業のはずだけどサービス残業あたりまえ、 仕事の量はハンパない(通称『デスーマーチ』)。 こういうネタを、2chの記事の実話を元に映画化したもの。 就職を控えた人には、アクが強すぎる作品の可能性が高い。 でも、情報系ではデジタル土方・5K職場という言葉もささやかれたりと、変な夢を持たれても困るしなぁ…

3EIインフルエンザで11/24~27学級閉鎖

この3連休の間に、ボチボチと新型インフル感染の連絡が担任学生より届いていた。今日は、昨日から発熱で今日診察という学生さんより、「新型でした」との連絡が入り、 一度に5名の発症者数となってしまった。クラスあたり1割の4名の時点で、学級閉鎖の 方針より、早々にクラス学生に学級閉鎖の説明を行う。

通常の時期であれば、学生も気軽に休みと、体調不良の学生をよそに喜ぶ所かもしれないが、 来週月曜より後期中間試験であるため、「困る」との意見が多発。 かといって、授業を続けることもできない。

1週間前であるため、明確なテスト範囲が示されていなかったり、配布資料が不足したりと いう状態もあった。ということで、私自身はネットワークなどの取り扱いは慣れていることもあり、 授業担当の先生に配布物や連絡情報を、Wikiページに記載し、 緊急連絡網にてそのページをみてもらう対応をとる。他のクラスの先生は、連絡大変そう…

2009年11月22日(第139回)

テスト期間中につき、数学科 長水先生、電子情報工学科 奥田先生、西の3名でお送りしました!

  • にしにしの部屋 起業された呉高専岩本先生とお話
    nishi091122.mp3
  • 歯磨きロボットコンテストについて

「そんなこともあろうかと…」(by 真田@ヤマト)

明るい技術系のニュースかもしれないが、小惑星探査ロケットの「はやぶさ」が、エンジン不調で地球への帰還が危ない状況であったが、技術者の機転で帰還できるようなったとのニュース。

帰還が可能になったのは、「本来だったら無用な電子回路がエンジンにつながっていたため」 らしい。私自身も含め記事への感想の多くは、 SFの戦艦ヤマトの真田技師長「そんなこともあろうかと」の言葉を引用しながら、 帰還の可能性が残ったことを喜んでいるみたい。 ただ、知り合いの、技術者だったら、一度は『そんなこともあろうかと』と言いながら、 かっこよく難局を乗り切ってみたいものだ…との感想に、思いっきり吹いてしまった。

私はまだこういった、かっこよく難局を乗り切れた経験はありません。 結果オーライとか、偶然OKなら、あるけどね…あと、真田みたいに、緊急事態に『動作テストしてないけど…』と言いながら、実運用はするなよ!


久々にブログ更新のやる気アップ

電子情報OBの方に、 「講義のメモやまとめが掲載されている。いずれも基本的で重要なものばかり。」 とお褒めの言葉をTwitterでつぶやいていただいた。 講義録は、学生からの「みてますよ」の声も、テスト直前にならないと聞こえないので、 惰性で書いている所が無いわけでもない。だけど、こういう言葉で、やる気あっぷ。

ただし実践OBに見られていると細かい間違いも指摘されそうで、 思わずブログの説明文に、『講義録などの間違いはツッコミ下さい。修正しますので…(^_^;』 の言葉を追記した…

クラス費にてマスク購入

以前より、学生がマスクありますか?と来ることがあり、 売店のマスクも花粉用の薄手のマスクだったりしたので、 クラス費にて、マスク(50枚×2箱)と、消毒用ウェットティッシュ(でかめ)を購入する。 学生さんには、ムダ使いは控えた上で、自由に使うように伝える。

SQLの応用的な使い方

SQLの応用として、比較演算子以外のin,between,like等の説明、 集約関数、副問合せ、ソートとグループ化について説明する。

比較と集約関数

where句に指定できる、2項演算子でない比較演算子

  • A in ( a,b,c… )
    メンバー比較()の中に A が含まれているか?
  • A between B and C
    値Aが、B~Cの間の値か判定
  • A like B
    正規表現っぽい"_"⇒任意の1文字、"%"⇒任意の0文字以上で、 文字列マッチング
  • A is null
    NULLかどうかをチェックする。

雑談: in,between,like といった演算子は、英語処理記述でCOBOLっぽさが全開。 ということで、COBOL等は、埋め込み型SQLによって通常のCOBOL処理の中で、SQLがそのまま使えたりすることを紹介。 教科書では、埋め込み型SQLインタフェースを持つ言語の中に、PL/I が紹介されている。 個人的に最初のプログラム言語が PL/I であっただけに、久々にみた言語名で懐かしさ全開。

select句に記載できる、集約関数

  • COUNT(),SUM(),AVG(),MAX(),MIN()
    関数の処理は名前どおりだし、特に説明はいらんだろう。

副問合せとソートとグループ化

where句の()の中に、別途SQLを実行するように、SQL命令を書くことができる。 副問合せを先に実行してから主問合せをするもの、

select S.業者名, S.所在
from S
where S.業者名 in
( select SG.業者番号 from SG
where SG.商品番号 = 'G2' and SG.在庫量 >= 200 ) ;

()の中の副問合せは、from句の S と無関係なので 先に副問合せを実行し、その結果の中に S.業者名 が 含まれるのかを判定される。

主問合せの中から何度も副問合せを実行する2つの方法がある。

select G.商品名, G.色, G.価格
from G
where 'S4' in
( select SG.業者番号 from SG
where SG.商品番号 = G.商品番号 ) ;

G.商品番号は、主問合せの中の from 句の G でレコードを変化させながら、副問合せを呼び出す。

並び替え:データベースのデータは、2分探索木やらハッシュやらの手法で保存されており、 検索結果は、登録順序毎に出力される訳ではない。だからこそ、表示順序などが 問題になるのであれば、"order by カラム {ASC|DESC}"で、ソートができる。

グループ化:指定されたカラムについて、同じ値を持つレコードをグループ化することができる。 having 句は、特定のグループを選択するための条件。 指定されたカラム別に、テーブルを一旦作ってから、having句内部の評価を行う。 この中に集約関数を使えるところがキモ。

集合計算:2つのSQL問合せ結果を集合とみなして、集合和(union)/集合差(except)/集合積(intersection)をとることができる。SQL_A union SQL_B みたいな使い方。

昨年度の非常勤講師の方の進行とずれが出てきたため、シラバスを書き換える。 JABEE的にも次回講義の時に説明が必要。

システム

最新の投稿(電子情報)

アーカイブ

カテゴリー