2015年11月19日木曜日

DB設計 PKは複合キーかサロゲートキーか?自分なりの判断基準。

PKを複合キーにするか、サロゲートキーにするか。
今後迷った時のために、現時点での自分なりの判断基準を残しておこう。

複合キーを許可するのは以下を全てのいずれかを満たす場合のみ。
1. PKが(将来的にも)変更されないこと。
2. 最終テーブルであること。
3. トランケートされるテーブルであること。 // 2016/01/29追加

根拠
1. PKが(将来的にも)変更されないこと。
F/Wが推奨していない場合もある。
規約としてPKの変更は不可としているプロジェクトがある。
その場合、更新処理なのにdelete/insert処理することになる。
関連する全テーブルの更新も発生する。

(将来的にも)と書いたのは、開発時点では変更されない予定だが、バージョンアップにより変更される可能性を考える必要があるから。

例えばグループ内の項目を一覧表示する場合で、テーブルにグループIDと項目表示順を持っている。
開発時点で「表示順の変更はないと聞いていたから、PKをグループIDと表示順にしました。」
みたいな。
バージョンアッップで「やっぱり表示順変更したいよね。」となったら辛い。

この場合はPKをグループIDと項目ID(ただの連番)とし、表示順はただの項目にすることで防げる。
将来を見据えて、PKの変更が発生しそうな所は事前に潰すこと。


2. 最終テーブルであること。
PKを他のテーブルで参照している場合、テーブルの項目が増えるので。
1テーブルのPKだけならまだいいけれど、大抵は複数テーブルへのキーを持っているし。
結合キーが増えるだけ間違いは起きやすい。

PKでの他テーブルへの結合がない、ぼぼ単独で存在するテーブルならOK。
例えば帳票出力のためのワークテーブルとかかな。

3. トランケート後にデータを再投入する際、サロゲートキーが振りなおされるため。
自然キーに対するPKが変更されてしまう。

ex)
事前データ
サロゲートキー, 親キー, 子キー, 名称
1, A, a, 名称A-a
2, B, b, 名称B-b

トランケート後にデータ再投入
サロゲートキー, 親キー, 子キー, 名称
1, A, a, 名称A-a
2, A, b, 名称A-b
3, B, b, 名称B-b

サロゲートキー=2のデータが変わってしまうため、関連するテーブルに影響がでる。

2015年8月1日土曜日

MySQL FEDERATEDエンジンの使い道を考える

http://thinkit.co.jp/free/article/0608/1/5/

FEDERATEDエンジンはトランザクションがサポートされていない以上、更新系には使えないと考えてよいと思う。
即時反映によりミラーみたいな感じで使えるかもと思ったけど、それだってトランザクション管理できないと何かあったときに不整合が起こるし。

負荷分散とかに使うとか書いてあるところもあったけど、リモートテーブルとFEDERATEDテーブルが1対1でしか作成できないから、それで負荷分散になるの?

検索に使用するなら、複数のDBを検索する場合にそれぞれのDBに接続→検索を繰り返す必要があるけれど、FEDERATEDを使用すれば表面上はDBへの接続は1回ですむから便利。
対象DBが1つなら、そもそもFEDERATEDを使う意味はないと思う。直接対象DBに接続すればよいだけだから。

検索に使用するなら、リモートテーブルをあたかも自身のテーブルとして扱うことができるので、join等が発生するケースなら便利。

更新がなく複数DBを使用した検索系のみのシステムとなると、情報の分析システムとかなら使えるのかも。
分析システム用DBを作ってFEDERATEDエンジンを使用して、複数の登録更新系システムのDBの情報を取得する。
DWHのようなシステムでなら使えるのかも。

・余談1
FEDERATEDエンジンがトランザクションをサポートしてないと知って茫然としていたとき、Sipderエンジンなるものを発見。
トランザクションもサポートされているようだし、パーティションという考えでこれぞ負荷分散という感じ。
こっちのほうが便利な気がする。
ただし、ドキュメントがあまりないし、MySQLが標準ではサポートしてないから導入するにはハードル高い。
MariaDBならSpiderエンジンがバンドルされるみたい。いいなぁ。

・余談2
Windows7にインストーラを使用してMySQLをインストールすると、FEDERATEDエンジンが使用できなかった。
試しにバイナリを配置すると使用できた。
原因不明。

2015年6月22日月曜日

ClosedXMLってスタイルのコピーはできないの?

IXLRow.CopyToを使うと値のコピーはできるんだけど、背景色や罫線とか書式とかまではコピーしてくれないのかな。
InsertRowsBelowで追加した行に対して上記をやってみたのだけれど、背景色なし、罫線なし、書式も標準になってて困ったもんだ。
ExcelWriterだったか、他のExcel系ツールだとそのあたりも一緒にコピー出来たことあったんだけどなぁ。

行ごとにいちいちスタイルを設定しなきゃいけないんだろうか。
面倒だな。。。

2015/08/01 追記
コピー元の行を削除すると、コピー先の書式等が解除されてるみたい。

たとえば一覧形式のExcel帳票で2件のデータ行を作成する場合。
1行目:ヘッダ行
2行目:テンプレート行
こんな感じのテンプレートが存在したとして。

失敗例
1. 2行目をコピーして、3行目4行目にデータ行を作成。
2. 2行目を削除。
これだと2行目を削除した時点で3行目4行目の書式等が解除される。

成功例
1. 2行目をコピーして、3行目を作成
2. 2行目3行目にデータを設定
テンプレート行をそのままデータ行として使用する。行を削除しなければ3行目の書式も生きている。

一応成功はしたけれど、どうなんだろうこれ。

2016/06/22 追記
テンプレート行削除時に、他の行のスタイルが解除されるということは、
そういうこと(スタイルの流用)はするなということかなと結論。

セル(または行、列、範囲)毎に個別にスタイルを設定するほうがよいのであろう。

2015年6月10日水曜日

10年も間があるとさっぱりわからんなぁ

久々にLinuxやってるけど、コマンドが変わりまくってる。
パッケージ管理がrpmからyumていうのになってるし、iptablesよりfirewallになってるし。
当時はiptables万歳的な感じだったのになぁ。

CentoOSも6と7で色々コマンド違うし。。。
少しずつ覚えていかんとなぁ。

2015年6月7日日曜日

pingが通らない

Wiindows→CentOSのping結果


ping 10.0.X.X

10.0.X.X に ping を送信しています 32 バイトのデータ:
要求がタイムアウトしました。
要求がタイムアウトしました。
要求がタイムアウトしました。
要求がタイムアウトしました。

10.0.X.X の ping 統計:
    パケット数: 送信 = 4、受信 = 0、損失 = 4 (100% の損失)

CentOS→Windowsは通るのになぁ。

そういえばDHCPで変なIPが割り振られてる。。。10.0.X.X。。。こんなIP見たことないなぁ。
ゲートウェイが192.168.X.XでVAIOさんのIPも192.168.X.Xなのに。
ゲートウェイのIPとDHCPで振られるIPには関連は無いのか?

試しにCentOSを192.168.X.Xに固定→再起動してみた。
CentOSからネットワークに接続できなくなった。
ゲートウェイにすらping通らない。。。

なんだこれ。

-- 追記 --
できた。
参考にしたページ
https://blog.apar.jp/linux/402/
http://vboxmania.net/content/%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E8%A8%AD%E5%AE%9A

VirtualBoxのネットワークアダプタの設定がNATだとホストOSとの通信ができないのか。
ホストOSとは別のネットワークになるのか。

今回はホストOSと同じネットワークに別端末として配置したいので「ブリッジアダプター」を選択。


割り当てでブリッジアダプターを選択


ほいでCentoOSを見てみるとIPが192.168.X.Xになってることを確認。
いざWindows→CentOSのpingを。

192.168.X.X に ping を送信しています 32 バイトのデータ:
192.168.X.X からの応答: バイト数 =32 時間 <1ms TTL=64
192.168.X.X からの応答: バイト数 =32 時間 <1ms TTL=64
192.168.X.X からの応答: バイト数 =32 時間 <1ms TTL=64
192.168.X.X からの応答: バイト数 =32 時間 =1ms TTL=64

192.168.X.X の ping 統計:
    パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)
ラウンド トリップの概算時間 (ミリ秒):
    最小 = 0ms、最大 = 1ms、平均 = 0ms

オッケー!!

が、Windowsのエクスプローラーからは見れない。
SAMBAは入れたはずなのに。。。

2015年6月6日土曜日

仮想環境を作成するにはBIOSの設定変更が必要

VirtualBoxのインストールが終わり、いざCentOSをインストールせん!!
と意気込んでみたけど、VirtualBoxがゲストOSの64bitに対応していない??
うちのVAIOさん、64bitCPUのはずなのに。。。
ゲストOSのバージョンに64bitがでてきません





















調べてみたら見事にヒット。
http://qiita.com/kmats@github/items/a2396aa5b6f397d447b8

BIOSの仮想化機能てのがあるのか。。。

サクッと変更。
Advanced > CPU Configuration > Intel(R) VirtualizationTechnology > [Enabled]

再度、仮想マシンの作成を試みる。
64bitが選択できる




















これでインストール作業が始められる。



BIOSの設定を変更後、なぜかネットワークに繋がらなくなった。
一旦設定を元に戻し再起動しネットワークに繋がることを確認した。
仮想化機能をEnabledにしたことが原因っぽい。。。
が、再度Enabledに変更して再起動したらネットワークに繋がった。
なんだったのか。。。原因不明。。。

Vaio Pro11のBIOS起動方法

調べてみたら「ASSISTボタンとかいうのを押して~」とかあったけど、そんなボタンついてない。。。

結果、シャットダウン状態でF3を押しながら電源ボタンONでBIOSが起動した。

へーほー。てか、BIOSの起動方法、取説に書いてないんだねー。

IIS8.5 localhostを試すがブラウザは白い件

とりあえずIISを起動してみた。
早速http://localhostで動作確認。

がダメ。

ブラウザ真っ白。








エラーページではないからIISは起動してるっぽいけれど・・・。
調べてみたらこんなの発見。
「HTTP基本機能」か。ほうほう・・・。
バージョン違うからどうかなと思いつつ、機能を探してみるが該当なし。
でも機能を眺めていくと「静的なコンテンツ」なるものを発見。
ツールチップの説明もそれっぽい。早速チェックON。
 
再度ブラウザから確認してみると・・・。
でたでた。
 
そりゃ、静的コンテンツ提供してなきゃHTMLとか何も表示されないさー。
てか、デフォルトでそういう設定なんかーとちょっとビックリ。



2015年6月5日金曜日

オーナーメイドって意外と色々インストールされているんだね

とりあえずIEから不要なお気に入りを外している真っ最中。
オーナーメイドって不要なものは入っていないと思っていたのだけれど、IEのお気に入りとかは普通に入ってるんだね。

削除!削除!汚物は消毒的に削除だー!!

明日はVirtualBoxでLinuxをインストールまで。
CentOSかFedoraか悩み中。。。

2015年6月4日木曜日

VAIO Pro11が我が家に!

オーナーメイドで注文したVAIO Pro11がついに届いた。
これを機に今までやってこなかったことを色々してみようかと。

5年以上前に買ったPCがいよいよダメになってきたので買い直しを検討中していたところ、
スタイリッシュなフォルムに一目惚れ。
他にも色々見て検討したけれど、VAIO Pro11を見た後ではどれも「うーん・・・分厚い」と思えて。

スペック
CPU:i5
メモリ:8M
SSD:256
OS:Windows8.1

当面の目標
・Visual StudioでASP.Netの開発環境構築
・VMでLAMP

所感
良い所:見た目
悪い所:キーの打ちづらさ

とりあえず、Vaioとたわむれつつ、日常的なことを記録していこうと思う。
ほんとに打ちにくいなぁ。慣れるしかないかぁ。

剣道世界選手権大会

判定が不正だとかYahooニュースで見かけたので、どんなものかなと中堅戦をyoutubeで見てみた。

韓国選手が引き面を打って、本人は入ったと思ってたのに旗は挙がらず。
で、キョロキョロ。本人としては入ってると思ったから「なんで旗挙がらないの!?」って感じなんだろうね。

動画しか見てない俺には。審判の判定には何も申せませぬ。
俺審判なら「面あり!一本!」と言ってたかも。
正直なところ、剣道の一本を判定できる範囲って、試合している本人と、せいぜい審判までだと思う。
選手との距離が離れていけばいくほど、見てる側からしたら判定しづらいと思う。
なので、動画のあの瞬間が一本だったかどうかは俺にはわかりません。

で、そんな感じで俺の言えることは・・・

仮に俺が審判としてその場にいたとして、仮に俺は一本と旗を挙げたとして。

韓国選手がキョロキョロと審判を見回した瞬間、旗を取り下げたでしょうね。

残心。剣道始めるときに最初にならうはず。
キョロキョロして周りにアピールor確認しているというのは、残心ができていないと判断されます。
たとえその直前にどんなに綺麗で一本取っている打ち込みであっても。

一本であったとしても、俺は間違いなく一本を取り消します。