|
kabe さん、s_kobayashi さん、こん**は。Hidemi Oya です。
>[#343] kabe さん
>どこまでテーブルを正規化するのか、悩ましいところですが、単純な使い勝手を考えると、現状の方法でもいいのかなと思います。
私もそう思います。
>ただ本来のデータベースということからすると、どういうテーブル構成にするのが理想的なのか、興味のあるところではあります。
ひとつの ID に対して複数の行が存在する場合は、テーブルを分けるってのが原則なんでしょうね。とすると、[#343] が素直なテーブル構成だといえますね。あとは、作物名、病害虫名はテーブルを別に持ち、適用表には ID のみを保存するってところでしょうか…。
実際にここまでする必要はありませんが、作物名については、上位分類や詳細作物名まで一気に検索するには、作物コードで検索できた方が便利かもしれませんね。
>あと、適用部分はけっこう空値のあるフィールドが多いので、どこまで別テーブルにするべきか。
VARCHAR ならデータ領域がそれほど無駄になるわけでもないので、これは1テーブルで良いかな…。
>ACFider でこれをやるとデータ更新の時間は今より確実に増えますね。
今でも結構かかるので、こいつが一番ネックですね。ただ、本題の通称に関しては、tekiyo テーブルでひとつずつ作ると膨大な数を処理しなければならないので、s_kobayashi さんの提案通り kihon テーブルのみとした方が更新時間は短縮できそうですね。
>[#344] s_kobayashi さん
>今回のデータの場合、元データの形式を崩すとexcelデータとの見比べが出来なくなるなど却って使い勝手が低下する側面もあるので、やみくもに正規化する必要はないと思います。
おっしゃるとおりだと思います(ま、kabe さんも実際にやるつもりは毛頭なさそうですけど)。が、[#342] で書いたように kihon テーブルと重複している「用途」「農薬の種類」「農薬の名称」「略称」「混合数」を tekiyo テーブルから削除するくらいであれば、下記のようなビューで簡単に元の Excel の表に戻せます。
といっても、実際にこれをやるかどうかは、
(1) EXCEL 入出力コンポーネントから、重複部分を削除した INSERT 文を生成するのに要する時間
(2) SQLite でフルデータを書き込むのと短縮データを書き込むのに要する時間の差
を調べて判断する必要があります。
CREATE VIEW tekiyo AS
SELECT
a.bango AS bango,
kihon.yoto AS yoto,
kihon.shurui AS shurui,
kihon.meisho AS meisho,
kihon.tsusho AS tsusho,
kihon.ryakusho AS ryakusho,
a.sakumotsu AS sakumotsu,
a.basho AS basho,
:
a.kaisu5 AS kaisu
FROM compact_tekiyo AS a
LEFT JOIN kihon ON a.bango = kihon.bango
|
|