前回と前々回のエントリーには、思ったより多くのアクセスをいただき、ありがとうございました。どうも「はてなブックマーク」の特集の「技術ブログ」というところに載ったのが理由のようです。
いつもの悪い癖で長々と書いてしまいましたが、三行で要約を試みます。
1. データベース設計には第一~第三正規化というのを用いる
2. 第一~第三正規化とは、以下のとおりである
- 第一正規化…表を必ず一行一レコードになるようにする
- 第二正規化…全ての項目を決定する主キーを選定する。もし主キーが複数の項目の組み合わせとなる場合、主キーの一部によって決定される項目を、別の表に分ける
- 第三正規化…主キー以外の項目によって決定される項目がある場合、それも別の表に分ける
3. 私の疑問というのは、次のようなものである。第二正規化が完了した後、すなわち第三正規化の段階においても、複数の項目の組み合わせによって決定される項目があるのではないか? すなわち主キー以外の複数の項目の組み合わせによって決定される項目というものも、あるのではないか?
こういうのを三行とは言わないのも、いつものことです。
具体例として第一正規化の段階でユニークとなるIDを各行に付加した表を示しましたが、わざわざそんなことをしなくても該当する例が作れるかも知れません。ただしちょっと考えてみたのですが、いい例を思いつきませんでした。
スポンサーリンク
ところでこの記事に シロッコ(id:sirocco)さんから言及をいただきました。感謝です。
長らく解けなかった問題が、ふと目を通した書籍によって解決した旨が記されていました。私にもそういうことが起きるといいなと願います。
シロッコ さんのエントリー中で 述べられている問題は、以下の通りです。原文のまま引用させてもらいます。
- 論理学者が捕らわれて牢に入れられてしまいました。
- その牢にはA、B二つの出口があります。ひとつの出口からは出れば自由になり、もうひとつから出れば殺されてしまいます。
- それぞれの出口には門番が立っています。片方の門番は真実を話し、もう片方は真実とは逆の答えをします。
- 論理学者には「門番A」か「門番B」のどちらかに1回だけ質問が出来ます。
- 門番は「はい」、「いいえ」と答えます。
- 論理学者は1度だけ質問をして自由になったのだが、その質問はどんなものか?
エントリーの最後に “「論理」では有名な問題なのかも知れません” とおっしゃっていました。実はそのようです。私は野崎昭弘氏のロングセラー『詭弁論理学 (中公新書(448))』で知りました。続編の『逆説論理学 (中公新書 (593))』にも、応用編のさらにややこしくひねった問題が出題されています。さらに元ネタをたどると、米国の論理学者スマリヤンの『この本の名は?』という本のようです。
- 作者: Raymond M. Smullyan,川辺治之
- 出版社/メーカー: 日本評論社
- 発売日: 2013/02/19
- メディア: 単行本
- 購入: 12人 クリック: 465回
- この商品を含むブログ (8件) を見る
ただし知っていたとしても、それを他人にもわかりやすく説明することが何よりの難事です。私の知識の範囲では、論理学の問題を解くには「真理値表」というのを使うと、一見地味のようですが実は汎用性が高く威力抜群であると思っています。
すでにご存じの方も多いと思いますが、念のためにおさらいします。真理値表というのは、こんなものです。例えばAとBという命題があって真偽を○と×で表すと、その論理積(and)は真理値表で次のように表せます。
A | B | A and B |
× | × | × |
× | ○ | × |
○ | × | × |
○ | ○ | ○ |
論理和(or)の真理値は、次のようになります。
A | B | A or B |
× | × | × |
× | ○ | ○ |
○ | × | ○ |
○ | ○ | ○ |
Aの否定(not)は次のようになります。
A | notA |
× | ○ |
○ | × |
シロッコさんの問題で、真実を話す門番を「正直門番」、真実と逆の答えをする門番を「嘘つき門番」と書きます。また自由になる扉を○、殺されてしまう扉を×で表します。
それぞれの門番に “扉Aが○ですか?” と尋ねたときの答えは、次のようになります。
扉Aが○ですか? | ||
正直門番 | 嘘つき門番 | |
扉Aが○の場合 | はい | いいえ |
扉Aが×の場合 | いいえ | はい |
従って、それぞれの門番に “他の門番に「扉Aが○か?」と尋ねたら「はい」と答えますか?” と尋ねたときの答えは、次のようになります。
扉Aが○ですか? | 他の門番に「扉Aが○か?」と 尋ねたら「はい」と答えますか? |
|||
正直門番 | 嘘つき門番 | 正直門番 | 嘘つき門番 | |
扉Aが○の場合 | はい | いいえ | いいえ | いいえ |
扉Aが×の場合 | いいえ | はい | はい | はい |
ここでキモは、尋ねた相手が正直門番であろうが嘘つき門番であろうが、扉Aが○の場合には「いいえ」と、扉Aが×の場合には「はい」と答えることです。
実はこの問題は、シロッコ さんの元記事にある通り、肯定の論理回路(○と×を素通しする論理回路)と否定の論理回路(○と×をそれぞれ反転させる論理回路)を直列に接続すると、どちらの順番でつないでも否定になる、ということを言い換えているだけなのです。
次の表が、一つ上の表と同じであることをご確認ください。
Aそのまま | Aの否定 | (Aの否定)そのまま | (Aそのまま)の否定 | |
A=○ | ○ | × | × | × |
A=× | × | ○ | ○ | ○ |
少しはわかりやすく説明できているでしょうか? 忌憚なきご批判をお待ちします。