タグ

ブックマーク / nippondanji.blogspot.com (114)

  • ナチュラルキーとサロゲートキーについての議論

    とあるブログエントリで「ナチュラルキーを主キーにしてはいけない」という主張を見かけたのでこれに反論しておく。これはリレーショナルモデル的には明らかに間違った考えだからだ。 リレーショナルモデルにあるのはナチュラルキーだけリレーショナルモデルには「サロゲートキー(代理キー)」という概念はない。まずこの点に注意して頂きたい。サロゲートキーとは、データベースアプリケーション開発において実用上必要とされる機能であって、質的には不要のものである。リレーショナルモデルでは、いわゆるナチュラルキーというものがあれば機能的には十分だからだ。 そのためにはまず「キー」という概念が何を指し示すかということについて正しく理解しなければならない。リレーショナルモデルではキーと呼ばれるものは候補キーとスーパーキーという2つの概念だけである。「タプル(≒行)の値を一意に決定することができる属性(≒カラム)の集合」の

    ナチュラルキーとサロゲートキーについての議論
  • ヒゲモジャのギークが提案する技術習得戦略

    先月、Dbtech Showcaseで松信さんがデータベース技術の羅針盤という講演をされた。残念ながらプレゼンそのものを観に行くことはできなかったが、その前の日に松信さんと一緒に昼飯をべたとき、講演のあらすじについては伺っていた。その際にも同じようなことを松信さんには言ったのだが、スライドを見直した上で改めて自分の意見をまとめておこうと思ったので筆をとることにする。 なお、このエントリではスライドに書かれているトピックについて語るので、まだ松信さんのスライドを見てない人は先にスライドに目を通してからエントリを読んで欲しいと思う。結論は全く違った方向に進んで行くが、その点は了承して頂きたい。 あなたに選択肢はあるか?ひと握りの天才なら自分の興味のある分野を開拓することができるだろう。あるいはすでに成功を収めた人であれば転職に困ることはないので、成功しそうな会社に乗り換えることもできるだろ

    ヒゲモジャのギークが提案する技術習得戦略
  • その選択、ちょっと待った!NoSQLデータベースへ乗り換える前に検討すべき3つのポイント

    最近、どうも安易に「NoSQLにすれば厄介なDB設計から開放される」と考えている人が多いように思えて仕方がない。だが待って欲しい。当にNoSQLと呼ばれるデータベースを使えばアプリケーションの開発・運用の苦しみから逃れられるのだろうか。もちろん「そんなことは無い!!絶対にだ!!」と私は考える。今日はその理由について語ろうと思う。 トランザクション先日、リレーショナルデータベースにおけるDB設計についてセミナーで解説したばかりだが、リレーショナルデータベースにおけるデータの整合性は何もDB設計だけが担保しているわけではない。リレーショナルモデルと同じかそれ以上に欠かせないのがトランザクションだ。 トランザクションがあるおかげで、トランザクション終了後のステータスは「成功」か「失敗」の2つしかないということが保証される。すなわちオール・オア・ナッシングだ。もしトランザクションの途中で何らかの

    その選択、ちょっと待った!NoSQLデータベースへ乗り換える前に検討すべき3つのポイント
  • DBエンジニアのための技術勉強会で発表したスライドを公開しました。

    DBエンジニアのための技術勉強会というイベントで、リレーショナルモデルにおけるDB設計について話す機会を頂いた。リレーショナルモデルは非常に重要であるにも関わらず、現場ではないがしろにされてしまっている。その結果、アプリケーションのロジックを上手くクエリで表現できず、開発現場では非効率な開発が行われ、多くの人がデスマ的な状況に追い込まれている。そういう危機意識について、これまで何度かブログでも書いてきたし、WEB+DB Pressで連載している動機もその点にある。リレーショナルデータベースはやはりリレーショナルデータベースとして使うべきだ。そのための鍵となるのが、DB設計である。 今回はなんと約2時間の持ち時間を頂いた。リレーショナルモデルについてはこれまで何度か話す機会を頂いたが、2時間というのは最長記録である。それに合わせてスライドもボリュームたっぷりのものになった。過去のスライドと

    DBエンジニアのための技術勉強会で発表したスライドを公開しました。
  • データベースアプリケーション開発を炎上させる負のスパイラル

    毎度おなじみ、はてブのホットエントリに「SIをダメにする負のスパイラル」というタイトルのまとめが掲載された。きしだ氏とはかなり視点は違うものの、開発現場の問題点については少し思うところがあるので意見を書いてみようと思う。と言っても、以下の話の内容はデータベースアプリケーションに限定した話であり、またSIerだけに限った話ではないのでその点はご容赦頂きたい。もちろんSIer各位の案件はデータベースは必須なので、エントリで触れる問題点には該当するだろう。 Q.なぜ炎上するのか? A.正しいデータベース設計ができていないから結論から言おう。データベースアプリケーションの開発が炎上するのは正しいデータベース設計ができていないからだ。ここでいう「正しい」とは、論理的に証明できる正しさという意味ではない。「来こうするべき」といった意味で捉えて欲しい。 「炎上」というのは、例えばテストが通らない、バ

    データベースアプリケーション開発を炎上させる負のスパイラル
  • たった30秒でMySQLをコンパイルする方法 rev.2

    もう2年以上前になるが、以前「MySQL 5.5をわずか30秒足らずでコンパイルするためのテクニック」というエントリを書いた。 エントリに書いた内容はそれなりにコンパイルの高速化に寄与はするが、実は測定方法は正しくなかった。このことについて、いつも冷静さを失わない奥一穂氏から、いつもの冷静さで指摘を頂いた。 奥さんの言う通りである。指摘をもらってから気がついた。反省した。それからからずっと「まっとうにコンパイルして30秒を切る方法」を模索してきた。そしてついに、ccacheを使わずにまっとうにMySQL 5.5のコンパイルを30秒未満で実行することが出来たので、その方法を紹介しようと思う。 速いマシンを買う いきなり身も蓋もない解決法だが、ぶっちゃけこれが一番効果的である。実行するべき処理が決まっていれば、最終的にCPUの実行速度によって処理時間が決まってしまう。 実は最近PCを新調したの

    たった30秒でMySQLをコンパイルする方法 rev.2
  • GNUプロジェクト30周年おめでとう!

    我らがリチャード・ストールマン氏(以下、敬称略)がGNUプロジェクトを孤軍奮闘ながら発起してから30年を迎えた。30年前と言えばWindowsすら無かった頃であり、コンピュータの世界は今とは全く異なっていただろう。「だろう」というのは筆者が当時まだ子供であり、その頃の業界について伝聞でしか知らないからである。 GNUプロジェクトは言うまでもなく、自由なソフトウェアによるオペレーティングシステムを作ろうという一大プロジェクトである。今のようにインターネットもなく、容易に支援も得られそうにない中で、独りでOSを創りあげようなどと起ち上がるのは如何に無謀なことであったか。しかし、その無謀のおかげで今日のソフトウェア業界の姿があるのは間違いない。 今日はGNUプロジェクトの重要さについて、改めて語ろうと思う。 GNUなくして今のインターネットは無かった これまで、GNUプロジェクトが果たしてきた役

    GNUプロジェクト30周年おめでとう!
  • 書評:「統計学が最強の学問である」→ はい。

    このを手に取ったのは単に売れているという理由からではない。むしろ話題になっても「なんかミーハーなタイトルだなー」ぐらいにしか思わず、あまり興味がわかなかった。 ところが、先日同僚の木村氏に誘われて参加した飲み会で、なんと著者の西内氏と話すという幸運な機会に恵まれた。西内氏は話が非常に上手で、ユーモアのセンスや頭の回転の速さ、そして匂い立つリア充臭を醸し出していた。著者に興味がわけば、著書にも興味がわくのが人情である。そして読んだ結果、とても面白いだったので皆さんに紹介しようと思う。 統計学のいろはが分かる書はミーハーなタイトルとは裏腹に、ストーリーに沿ってとても上手に「統計学のエッセンス」を伝えてくれる。専門書ではないので統計学のディテールには踏み込まないものの、要点を的確にピックアップしており「統計学ってどんなもの?どんなふうに使うの?」というクエスチョンに見事に答えている。一般向

    書評:「統計学が最強の学問である」→ はい。
  • MySQLでVisual Explain

    MySQL Workbenchの次期バージョンである6.0のベータ版が公開された。例によってMySQLのダウンロードサイトで公開されているので、新機能が気になる人はゲットして試してみて頂きたい。見た目が若干今流行りのフラットデザインっぽくなってシャレオツ(笑)な感じに仕上がってる。 ベータ版が公開されたのを記念して、Workbenchに搭載されているナイスな機能について紹介したい。そう、Visual Explainだ。Visual Explainとは読んで字のごとく、SQLの実行計画を視覚的に表現したものだ。SQLが複雑になると、その実行計画は理解し辛いものとなる。 今日はVisual Explain基的な使い方と、それがどのように見えるかを紹介しようと思う。 Visual Explainを使用するには、対象のMySQLのバージョンが5.6以上であり、なおかつWorkbenchのバージョ

    MySQLでVisual Explain
  • MySQLのmanページのライセンスについて

    MySQLのmanページのライセンスがGPLからプロプライエタリライセンスに変更されたというようなことが騒ぎになっている。既にご存知の方はいらっしゃるだろうが、これはバグであり意図して行ったものではない。何故このようなバグが起きたかということも含め、今日はmanページにまつわる話をしたい。 バグが起きた仕組み結構な人が「バグでそんなことが起きるの?」と考えたようだ。「manページのマニュアルを差し替えるなんて人為的にやらなきゃ起こり得ない」という思考だろう。そう考える前にひとつ事実を知ってほしい。そもそもMySQLのソースコードとmanページはもともと別個に管理されているということを。 どれでもいいので以下のページに記載されてあるリポジトリをコピーしてみてほしい。 MySQL Server in Launchpad 5.6なら例えば次のコマンドを実行すれば良い。 shelL> bzr br

    MySQLのmanページのライセンスについて
  • 隙がなくなったMySQL Cluster 7.3登場!!これで勝つる。

    MySQL Cluster 7.3の正式版がリリースされた。このバージョンで追加された新機能は少ない。だが、これまでにリリースされたMySQL Clusterのバージョンの中で、この7.3こそが最も重要なバージョンである!と私は考えている。新機能は少ないが非常に重要なものが詰まっているからだ。今日はMySQL Cluster 7.3の新機能について見てみよう。 外部キー制約、来たる!何を差し置いてもまず重要なのが、外部キー制約である。長年InnoDBでは使えるが、MySQL Cluster(NDBストレージエンジン)には実装されていなかった。外部キー制約が使えないという理由でMySQL Clusterを採用しなかったという人も多いだろう。 だが、それはこれまでの話だ。MySQL Cluster 7.3なら外部キー制約が使える!! メジャーどころのRDBMSなら当たり前のように搭載されている

    隙がなくなったMySQL Cluster 7.3登場!!これで勝つる。
  • プログラミングを教育する前に必要なこと

    Rubyの作者、我らがMatzが政府がプログラミングを義務教育にしようとしていることに対して苦言を呈している。Matzが指摘している問題点は3つ。 誰が教えるか。あるいは教えることが出来る教師は揃っているのか。 どのように評価するか。プログラミングは芸術に近いのにどうやって点をつけるのか。 何を教えるか。 詳しいことは元記事を見て頂きたい。もちろん私はMatzの苦言には大いに賛同している。正直政府は無計画にキャッチーなネタをぶちあげているだけにしか見えない。だが、コンピュータについての教育は一切役に立たないのかというと、そうでもないように思う。dankogai氏がMatz氏の記事を受けて、コンピュータを遊び道具として置いとけみたいなことを書いてるけど、それもどうかなと思う。遊び道具として置いといたところで、自発的にプログラミングをしようと思う子供などほとんど居ないだろう。せいぜいゲームで遊

    プログラミングを教育する前に必要なこと
  • MySQLは立ち止まらない・・・MySQL 5.7開発版登場!

    まだMySQL 5.6が登場して興奮冷めやらぬところだが、MySQLの開発チームはその手綱を緩めることはない。次期バージョンの開発版であるMySQL 5.7.1がすでに登場している。MySQLの開発リリースモデルではマイルストーンリリースと呼ばれるマイナーバージョンごとに新しい機能が盛り込まれる。(参照:MySQL 5.5登場)MySQL 5.6系での最後のマイルストーンリリース、つまり新しいバージョンが盛り込まれたバージョンがマイルストーン9、そして5.7.1がマイルストーン11となる。(マイルストーン10、つまり5.7.0はリリースされていないバージョンとなっている。)MySQL 5.7が正式版になるまでに、いくつのマイルストーンリリースを経るか、つまりどれだけ新機能が搭載されるかについては今のところ未定だが、新しいバージョンのリリースが待てない!という人はぜひMySQL 5.7.1を

    MySQLは立ち止まらない・・・MySQL 5.7開発版登場!
  • DRMがウェブに持ち込まれようとしている未だかつてない危機

    我らがフリーソフトウェア財団が、最近W3Cに提案されたEMEという規格について警告を発している。EME(Encrypted Media Extensions)はウェブ上のメディアに対してDRMを持ち込む規格である。オー・マイ・ガッ!!なんということだろう。 なぜDRMがダメなのか。ウェブの良い点はHTMLという共通の規格によって、ブラウザーが違えど誰もが同じページを参照することができるということだ。どのようなOS、どのようなデバイス、どのようなブラウザでも関係ない。現在でもFlashが組み込まれたページという問題はあるものの、HTMLによる表現の共通化は割とうまくいっている。標準化が進むHTML5はさらにそのFlashも不要になる可能性を秘めている。DRMはウェブの良さを台無しにするからである。 EMEはそのような自由なウェブを真っ向から否定するかのような存在なのだ。 もし、HTMLにDR

    DRMがウェブに持ち込まれようとしている未だかつてない危機
  • オトコのぷちトリビア - WAL

    データベースには、WAL = Write Ahead Log(ログ先行書き込み)というテクニックが利用されていることが多い。WALとは、テーブルスペースなどに存在する実際のテーブルデータに対して更新を反映するまえに、ログに更新の内容を書き込もうというものである。 事前にロギングを行う仕組みは全てWALと呼ばれる。MySQLで言えばInnoDBにおいてRedoログとして利用されるログもWALであるし、MySQL Clusterのディスクテーブル利用時のUndoログだってWALの一種である。現在開発中のストレージエンジンであるFalconやMaria(MyISAMにクラッシュリカバリやトランザクション機能をつけたもの)もWALを搭載する予定である。もちろんOracleやPostgreSQLなど他のRDBMSでもWALが搭載されている。 用途、つまりRedoなのかUndoなのかということに因らず

    オトコのぷちトリビア - WAL
  • フリーソフトウェア運動は方向性を間違えてはいない

    TechCrunchの翻訳記事でフリーソフトウェア運動はどこで方向性を間違えたのか(そしてその修正方法)というものが掲載された。この記事を読んだとき、そもそもそのタイトルに違和感を覚えてしまった。疑問が「どこで」というものになっているので、何だかフリーソフトウェア運動が方向性をすでに間違えているような印象を与えるわけだが、そもそもフリーソフトウェア運動は方向性を間違えているのだろうか?すでにタイトルで結論を書いてしまっているが、興味のある方はぜひ少しだけお付き合い頂きたい。 何をもって方向性が正しいとするのか「方向性を間違えた」というからには、この記事を書いた記者は「正しい方向性はどのようなものか」という想定があったに違いない。それは次のような部分だ。 Morozovは両者の違いについて、フリーソフトウェアはユーザの側面を強調し、オープンソースはデベロッパを強調する、と書いている。でも、フ

    フリーソフトウェア運動は方向性を間違えてはいない
  • 書評:「7つのデータベース 7つの世界」

    訳者、角 征典氏より献御礼。「7つのデータベース 7つの世界」はそのタイトルの通り、7種類のデータベースソフトウェアについて解説したNoSQLの道標とも言うべき書籍である。7種類のデータベースとして紹介されているのは、PostgreSQL、Riak、HBase、MongoDB、CouchDBNeo4j、Redisである。書は非常にそそるタイトルであり、わくわくしながらページをめくった。だが、第2章「PostgreSQL」で期待感は打ち砕かれることになる。 正直なところ、この書籍について書評を書くのはどうしようか迷ってしまった。なぜならば、第2章の説明がかなり間違っているからである。そのため、書評を書こうとするとどうしても辛口にならざるを得なかった。献して頂いた角氏にその旨を伝えたところ、それでも良いと快く了承して頂いた。当に辛口になるのでその点は容赦して頂きたい。 何が問題なのか

    書評:「7つのデータベース 7つの世界」
  • MySQL 5.6正式リリース!! #mysql56

    待望のMySQL 5.6が正式にリリースされた。正式版の最初のバージョンは5.6.10である。コミュニティ版(MySQL Community Server)は下記のページからダウンロードできるので、ぜひ今すぐダウンロードして頂きたい。 MySQL Downloads MySQL 5.6のリリースにあわせて、GUIツールであるMySQL Workbenchやドライバも新しいバージョンがリリースされており、MySQL 5.6対応となっている。それらの周辺ソフトウェアもチェックして頂けると幸いである。 新機能について正式版の機能はリリース候補版の頃から特に変更はない。(リリース候補版まで到達したということは、正式版の機能セットは固まったということであり、大きな機能の変更はないことを意味するからだ。)なので新機能については、リリース候補版が出たときに書いたエントリを参照して頂きたい。 漢(オトコ)

    MySQL 5.6正式リリース!! #mysql56
  • なぜMySQLのサブクエリは遅いのか。

    よくMySQLはサブクエリが弱いと言われるが、これは当だろうか?半分は当で半分は嘘である。MySQLのサブクエリだってなんでもかんでも遅いわけではない。落とし穴をしっかり避け、使いどころを間違えなければサブクエリも高速に実行できるのである。今日はMySQLがどんな風にサブクエリを実行し、どのような場合に遅いのかということについて説明しよう。 EXPLAINで実行計画を調べた際に、select_typeにはクエリの種類が表示されるのだが、代表的なサブクエリには次の3つのパターンがある。 SUBQUERY DEPENDENT SUBQUERY DERIVED 結論から言おう。遅いのは2番目、DEPENDENT SUBQUERYである。DEPENDENT SUBQUERYとはいわゆる相関サブクエリに相当するもので、サブクエリにおいて外部クエリのカラムを参照しているサブクエリのことである。そし

    なぜMySQLのサブクエリは遅いのか。
  • 「優れたMySQL DBAを見分ける27+3の質問」に対する回答例

    随分と更新が空いてしまったが、「優れたMySQL DBAを見分ける27+3の質問」に対する回答例(漢バージョン)を紹介しよう。実は質問を掲載した際「難しい!」というコメントが非常に多く、もう少し易しい質問にするべきだったかと思って次のように呟いてみたのだが・・・ 非常に心強くて安心した。さすがに日を代表するMySQLのエキスパートである。出題のレベルは間違ってはいなかった!! そんなわけで、回答の方に移ろう。 MySQLのサーバープロセスはいくつある?ひとつ。mysqldはシングルプロセス・マルチスレッドモデルを採用しているので、"サーバー"プロセスはひとつである。多くの場合、Linuxなどでmysqldを動かす場合には、お供にmysqld_safeも常に動いていることが多いが、mysqld_safeはサーバーではなく、mysqldのためのラッパーであるので数には含めない。 rootユー

    「優れたMySQL DBAを見分ける27+3の質問」に対する回答例