2016年5月16日月曜日

ClosedXML XLColorの色の一覧

ClosedXMLのXLColorおよびXLThemeColorの定義と実際の色の一覧表。
XLThemeColorはXLColor.FromTheme(XLThemeColor)を使用して出力。

無色がない。無色にしたい場合はどうすればよいのか・・・?


2016年4月1日金曜日

DB設計 連番は自動採番か手動採番か

連番を取得したい場合
・自動採番(mysqlでいうauto increment)
・手動採番(max(xxx) + 1)
どちらを選択すべきか?
というのを今の時点の判断基準を残す。

・親子関係等がない単一テーブルの場合
 自動採番

・親子関係がある場合
 手動採番。ただし、親テーブルの件数が多い場合は自動採番のほうがよいかも?


親子関係がある場合に手動採番にする根拠

 自動採番時の登録手順

  1. 親テーブルを登録(この際、自動採番される)
  2. 親テーブルを検索して連番の最大値を取得
  3. 子テーブルを連番を使用して登録


 手動採番時の登録手順


  1. 親テーブルを検索して連番の最大値を取得
  2. 親テーブルを連番をしようして登録
  3. 子テーブルを連番をしようして登録


手動採番のデメリットは連番の管理を自分でしなければいけないこと。
最大値+1や0件時のnull→1変換など。

その点、自動採番の場合はDBが処理してくれるからデメリットらしいデメリットはない。
が、登録処理中に検索処理が発生してしまう気持ち悪さがある。

と思って他の人に聞いてみた。

・やはり登録中の検索は気持ち悪い。
・その気持ち悪さは手動採番で代替可能である。
・単純に1テーブルだけに着目した場合、確かに手動採番は手間がかかる。
 しかし、同様の採番処理が他のテーブルでも発生した場合に共通化が可能。
 採番テーブルを作成するなど、既存のテーブルに変更は発生させずに採番仕様を統一できる。
・親テーブルの件数は?→今回は少ない。であれば、自動採番のコストはたかが知れている。

親テーブルの件数という観点は抜けてたな・・・

あと、自動採番の別の手法として、子テーブルのトリガーで親テーブルの連番最大値を取得設定という方法も見つけたけれど、これは回りくどいよね。