約 2,583,290 件
https://w.atwiki.jp/kinobu/
このウィキの使い方 ■ページを編集しよう! このトップページを編集しよう! ページ編集の方法がわからない場合はこちらのページも参考にしてね。 左上にある「編集」にマウスを持って行くと、さらにメニューが表示されます。 表示されたメニューから「ページ編集」をクリック! 編集画面が表示されるので、自由に書き換えてみよう。 書き換え終わったら、「ページを保存」をクリックすれば、トップページの編集は完了! ■新しいページを作成しよう! 新しくページを作成するにはどうすればいいのか、下の手順にそってやってみよう! わからない場合はこちらのページも参考にしてね。 画面の左上にある「@メニュー」にマウスを持って行くと、さらにメニューが表示されます。 表示されたメニューから「新規ページ作成」をクリック! 表示されたページで、作りたいページの名前を入力して、 編集モードは 【初心者向け】ワープロモード を選択しよう。 真ん中の枠の中に、自由に書き込めるよ! 作り終わったら、「ページを保存」をクリックすれば、新しいページの作成は完了! 保存したページをリンクさせましょう。保存したページの題名にマウスカーソルを移動させます。 題名の上までカーソルが来たら指のマークに変わります。そこで右クリックし「ショートカットのコピー」を選択。 リンクさせたいページに戻り編集モードにし、リンクさせたい文字をカーソルで選択し反転表示させます。(左クリックしたままずらす) メニューにある8の字を横にしたような形のマークをクリックします。ハイパーリンクと言うウインドウが出てきます。 URLと言う部分に先ほど「ショートカットのコピー」で覚えたURLを張り付けます。(右クリックして貼り付け) OKボタンを押してウインドウを閉じ、編集しているページを保存します。リンクが出来ているか確認しましょう。 ■画像を張ってみよう! 張り方はこちら 注意事項 ・画像を張りたいページでメニューから「このページにファイルをアップロード」を選んで作業すること! ・画像は会員さん達が撮られた画像を使いましょう。勝手に他人の画像をWEB上からコピーして使うのは止めましょう。 サイズは横200程度にすると縮小された画像が表示されます。 その縮小された画像に元画像のショートカットをリンクすると、クリックした際に大きな画像が表示されます。 ◇データベースの注意点 当会はキリーデータで使われている種名を基準としています。 ただし更新が滞っていたりし、新しく分類された物や新種が発見されたりと新しい名前がWEB上で先行してしまうことも有ります。 古い種名を使っても問題は有りませんが、周りの方へ種名を伝える場合には変わっていることを補足すると良いと思われます。 参考 Simpsonichthys属とRivulus属の別名称との対応表 112近藤さん ◇KCJ 2015 offel Spring (キリル氏輸入データページ) 輸入した種類のデータを残しましょう。 ◇各属データベース 過不足有れば種名を加えて下さい↓ アダマス属 Adamas 非年魚 アナブレプソイデス属 Anablepsoides 非年魚 アファニウス属 Aphanius 非年魚 アピュオセミオン属 Aphyosemion 非年魚 アプロケイリクティス属 Aplocheilichthys 非年魚 アプロケイルス属 Aplocheilus 非年魚 アピュオレビアス属 Aphyolebias 年魚 アトランティリウルス属 Atlantirivulus 非年魚 アウストロフンドゥルス属 Austrofundulus 年魚 アウストロレビアス属 Austrolebias 年魚 カロパンカクス属 Callopanchax 年魚 カンペロレビアス属 Campellolebias 年魚 キノドニクティス属 Cynodonichthys 非年魚 キノレビアス属 Cynolebias 年魚 キノポエキルス属 Cynopoecilus 年魚 キプリノドン属 Cyprinodon 非年魚 エピプラティス属 Epiplatys 非年魚 エピセミオン属 Episemion 非年魚 フェネルバセ属 Fenerbahce 非年魚 フォエルスチクティス属 Foerschichthys 非年魚 フンドゥロソマ属 Fundulosoma 年魚 近藤さんのデータベースへ フゥンドゥロパンカクス属 Fundulopanchax 非年魚(一部年魚) グナソレビアス属 Gnatholebias 年魚 ヒプソレビアス属 Hypsolebias 年魚 ヨルダネラ属 Jordanella 非年魚 クリプトレビアス属 Kryptolebias 非年魚 ライモセミオン属 Laimosemion 非年魚 レプトレビアス属 Leptolebias 年魚 マラテコアラ属 Maratecoara 年魚 メラノリウルス属 Melanorivulus 非年魚 ミクロモエマ属 Micromoema 年魚 ミルレリクティス属 Millerichthys 非年魚 モエマ属 Moema 年魚 ネマトレビアス属 Nematolebias 年魚 ネオフンドゥルス属 Neofundulus 年魚 ノソブランキウス属 Nothobranchius 年魚 近藤さんのデータベースへ ノトレビアス属 Notholebias 年魚 ニンバパンカクス属 Nimbapanchax 非年魚 オリジアス属 Oryzias 非年魚 パチパンカックス属 Pachypanchax 非年魚 パピリオレビアス Papiliolebias 年魚 ピトュナ属 Pituna 年魚 プレシオレビアス属 Plesiolebias 年魚 テロレビアス属 Pterolebias 年魚 プロカトプス属 Procatopus 非年魚 プロノソブランキウス属 Pronothobranchius 年魚 近藤さんのデータベースへ ラコウイア属 Rachovia 年魚 レノウア属 Renova 年魚 リウルス属 Rivulus 非年魚 スクリプタピュオセミオン属 Scriptaphyosemion 非年魚 シンプソニクティス属 Simpsonichthys 年魚 スペクトロレビアス属 Spectrolebias 年魚 ステノレビアス属 Stenolebias 年魚 テラナトス属 Terranatos 年魚 トリゴネクテス属 Trigonectes 年魚 ゼンウロレビアス属 Xenurolebias 年魚 残念ながら無料サーバーの使用なので広告が出てしまいます↓→ 無視して下さい。。。
https://w.atwiki.jp/udhimaster/pages/12.html
目次: データベースとは データベースの種類システムデータベース ユーザーデータベース 可変データベース 各部分の説明 データベースとは 「データベース」とは、「変数の固まり」です。 RPGで使う、「技能」や「アイテム」、「キャラのステータス」などのデータを管理するのに使われます。 データベースは、「タイプ」「データ」「項目」の3段階に分類をすることができます。 「タイプ」が大分類、「データ」が中分類、「項目」が小分類というようなイメージです。 ちなみに、データベースは「DB」と略して表記されることがあります。 データベースの種類 DBには、「システムデータベース」 「ユーザーデータベース」 「可変データベース」の3つの種類があります。 それぞれ特徴があり、用途が違います。 システムデータベース WOLF RPGエディター開発者(SmokingWOLF氏)側で設定されたDBです。 ゲーム中の内容の書き換えはできません。 各タイプの説明はこちら ユーザーデータベース RPGにおける「技能」や「アイテム」などの、ゲーム中に変化しないデータを入れるためのDBです。 ゲーム中の内容の書き換えはできません。 可変データベース RPgにおける「キャラのステータス」や「所持金」などの、ゲーム中に変化するデータを入れるためのDBです。 3つのDBのうち唯一、ゲーム中に内容の書き換えができるDBです。 ちなみに、 「システムデータベース」は「SDB」 「ユーザーデータベース」は「UDB」 「可変データベース」は「CDB」 と略して表記される場合があります。 各部分の説明 1.タイプ一覧 2.データ一覧 3.項目一覧 4.ページ1~5 表示する項目のページを変更します。 1ページあたり20項目表示されます。 5.タイプ数の設定 タイプ数を変更します。 最大で100個まで設定できます。 6.タイプの内容設定 タイプの項目を設定します。詳細説明はこちら 7.メモ帳 タイプごとに、説明などのメモを残すことができます。 8.検索 データ名、項目に設定した値を検索します。 「全タイプ」にチェックを入れると、全タイプを対象に検索します。 9.データ数の設定 データ数を変更します。 最大で10,000個まで設定できます。 10.ファイルの出力 タイプ設定出力 「6.タイプの内容設定」の設定をファイル (*.dbtypeset) に保存します。 タイプ&全データ 「6.タイプの内容設定」の設定と、全データをファイル (*.dbtype) に保存します。 データ[複数] データをファイル (*.dbdata) に保存します。 データ[複数・CSV形式] データをcsv形式のファイルに保存します。 保存したcsvファイルは、Excelなどのソフトで編集ができます。 11.ファイル読込 「10.ファイルの出力」で保存したファイルを読み込みます。 読み込み可能なファイルは、 dbtypeset / dbtype / dbdata / csv 形式です。 dbファイルも表示されますが、読み込むことはできません。 また、ウィンドウにファイルをドラッグ&ドロップすることでも 読み込むことができます。 12.OK 更新 キャンセル OK 変更を保存して、ウィンドウを閉じます。 更新 変更を保存します。 キャンセル 変更を保存せずに、ウィンドウを閉じます。
https://w.atwiki.jp/himaque/pages/15.html
データベース/ぶき データベース/ぼうぐ データベース/ペット データベース/スキル
https://w.atwiki.jp/hiropknot/pages/57.html
★2013/04/08追記 ◆正規化 データの冗長性を少なくし、関連性の強いデータ項目(属性)をまとめて、一事実一箇所(1 fact in 1 place)にすること。 正規化を行うと、複数の項目で構成される属性は、単一の項目を持つ属性に分解される。 第一正規化 集団項目や繰り返し項目を別表にすること。 複数の項目で構成される属性は,単一の項目をもつ属性に分解される。 第二正規化 全ての項目が完全関数従属である状態にすること。 一つのデータが決まると、従属的に決まるデータを別グループにすること。 第三正規化 非キー項目に関数従属している項目を別の表に分割し、推移的関数従属を解消した状態にすること。 ボイスコッド正規化 第三正規形の条件を満たし、かつ、全ての属性が候補キーに完全関数従属している正規形。 ※従属について 関数従属 BがAに関数従属するとは、A(例:社員番号)を決めるとB(社員名)が一意に決定するというもの。 Aを決定項、Bを従属項といいA→Bであらわす。 完全関数従属 決定項に余分なものがないときにいう。社員番号→社員名など。 部分関数従属 決定項に余分なものがあるときにいう。 {社員番号、部署番号}→社員名など(部署番号がなくても社員名を特定できる)。 推移関数従属 主キー以外に従属するものをいう。 {社員番号}→{部署番号、部署名、社員名}のとき部署名は、部署番号にも従属しているので推移従属となる。 データベース方式 【データベースの3層スキーマ構造】 データベースの基本的な構成を3つの構造により定義したもの。 外部スキーマ データベースの利用者に必要なデータの定義。ビューなど。 利用者の必要とするデータの見方を表現する。 概念スキーマ データベースで管理する対象の業務とデータの内容を論理的な構造として表現したもの。 テーブルやテーブルの正規化など。 内部スキーマ 検索速度向上のためのデータの物理的な格納方法の定義。 インデックスやデータファイル配置など。 データベース設計 【関数従属性】 レコードのある項目が決まれば、ほかのデータ項目も一意に決まる関係の事。 【キーの種類】 スーパキー 標柱の行を一意に特定できる属性、あるいは属性の組のこと。 候補キー(Candidate Key) スーパキーの中で余分な属性は含まない、行を一意に識別するための必要最小限の属性によって構成されるスーパキーのこと。 主キーの「候補」となる。 主キー(Primary Key) 複数存在する候補キーの中から任意に選んだ一つの候補キーのこと。 主キーに選ばれなかった残りの候補キーを代替キー(Alternate Key)と呼ぶ。 【データベースの整合性管理】 データベース内に格納されたデータが矛盾のない状態である(=整合性がある)ことを保つための制約。 一意性制約 レコードの一意性を保障する制約 参照制約 データベースの参照関係、すなわち複数の表における相互関連の整合性に関する制約。 RESTRICT指定:親の行を削除するとき子がいれば削除不可 CASCADE指定:親の行を削除するとき子の行も同時に削除 SET NULL指定:親の行を削除したとき子の行の外部キーにNULLを設定 SET DEFAUTL指定:親の行を削除したとき子の行の外部キーに規定値を設定 存在制約 あるデータが存在するためには他のデータの存在が必要とされるという制約。 データの追加、削除に関する制約条件といえる。 参照制約で代替出来る。 更新制約 データベース中のデータの更新に関する制約。 データ更新時に、更新後のデータがとり得る値の範囲内に収まっているかという検証を行う。 形式制約 データ項目や定義域におけるデータ型や桁数などについての制約。 データ操作 【導出表】 1つ以上の基礎となる表(実表)から関係データベース操作によって作成される仮想の表のこと。 SQLにおいては「CREATE VIEW」文で作成される。 データベース応用 【ツール】 ETL(Extract、Transorm、Load)ツール Extract、Transrom、Loadというデータウェアハウス構築における3つの工程の頭文字を合わせたもの。 データを抽出(Extract)し、変換・加工(Transorm)し、ロード・書き出し(Load)する。 OLAPツール データウェアハウスなどの多次元データベースを分析するためのソフトウェア。 データマイニングツール 統計解析手法を用いてデータウェアハウスの膨大なデータの中から隠れた関係性などを導く作業を支援するツール。 統計ツール データ群に対して様々な統計分析を行うことができるソフトウェア。 【ストアドプロシージャ】 一連のSQL命令からなるデータベース処理手続き(プログラム)を、あらかじめ実行可能な状態でデータベース内に格納しておき、クライアントからCall文により呼び出し、実行する方式。 ストアドプロシージャの利点 1つずつSQL文を送信する必要がない。 クライアントとサーバ間の通信量を軽減できる。 共通のSQL文によるデータベースアクセス手続きをクライアントに提供できる。 機密性の高いデータに対する処理をプロシージャすることで、セキュリティを向上させることが出来る。 【2相コミットプロトコル】 分散システム内の全ノードがコミットに合意するというプロトコル。 複数のトランザクションの中から調停者(Coordinator)が選ばれ、残りが参加者(Participant)となる。 <1相(Phase 1)> 調停者がコミット可否の問い合わせを実施。(Prepare) ↓ 全参加者がコミット可の応答。 ↓ 調停者からのCommitまたはAbortの実行指示待ちのブロック状態。 ↓ <2相(Phase 2)> 調停者がコミット実行指示。 ↓ 全参加者がコミット実行の応答。 ※2相で行うコミットまたはロールバックの指示の直前に調停者に障害や通信障害が発生した場合、調停者の指示が参加者に届かなくなる。 その場合、調停者の回復処理が終わるまで全参加者がコミットもロールバックも行えない状態となる。 この状態をブロック状態と呼ぶ。 【障害回復管理】 障害の種類 媒体障害:データベースが格納されている記憶媒体にディスク損傷やアクセス故障が発生してデータが使えない状態になること。 システム障害:OSのバグによりシステムがダウンする状態のこと。 トランザクション障害:アプリケーションプログラムのバグやデッドロック発生によるトランザクション強制終了のこと。 システムが媒体障害以外の原因によって停止した場合は、チェックポイントの取得以前に終了したトランザクションについての回復作業は不要である。 ※チェックポイントとは データベースでの更新処理は,主記憶で更新内容を保存している状態からディスクに書込むことで確定する。 チェックポイントとは,このディスクに書き込むタイミングのこと。 チェックポイントを設定することで,障害発生時に直近のチェックポイントの時点からリスタートできる。
https://w.atwiki.jp/satosasara/pages/47.html
ホーム 著作者データベース検索サービス チェビオP検索 §チェビオP検索 ■50音順 ワ ラ ヤ マ ハ ナ タ サ カ ア リ ミ ヒ ニ チ シ キ イ ヲ ル ユ ム フ ヌ ツ ス ク ウ レ メ ヘ ネ テ セ ケ エ ン ロ ヨ モ ホ ノ ト ソ コ オ §「チェビオP」に関する新着情報 コウ|user/21535729 茶村ニケ@w2k|user/422922 ささのあP|user/38819689 kno|user/26259101 あしたん|user/8537609 おとよいP|user/367259 NAV|user/2813161 Cosmos and Chaos|user/22520427
https://w.atwiki.jp/mathmania/pages/12.html
データベースとは? e-wordsデータベース これによると、近年主流のデータベースには リレーショナルデータベース オブジェクトデータベース の二種類がある。 オブジェクトデータベース 利点 元々がグラフを扱うために開発された オブジェクト指向言語と親和性がいい スムーズに導入することができる 問題点 アプリケーション間の互換性が低い 知名度、利用度が少ない リレーショナルデータベース 利点 知名度、利用頻度が高い。 高信頼性のあるRDBMSがある(オラクル) 問題点 SQL文を習得する必要がある オブジェクト指向との親和性が考えられていない(導入の際にモジュール開発が必要になるだろう)
https://w.atwiki.jp/poritekugame/pages/21.html
キャラクターデータベース アイテムデータベース モンスターデータベース 変数データベース
https://w.atwiki.jp/cafemilk/pages/32.html
ログデータベース CAFEMILK SHOPIING CART V5 ではカンマ区切りCSV形式のデータベースを用います。文字コードは UTF-8N となります。 エクセルの書式に対応しています。 データベース運用の方法は用途に合わせて基本データベースとログデータベースの二種類があります。 データベース関連の処理はフレームワークとなっていますので、カスタマイズ時の実装作業が楽です。レコードの各項目は SQL のようにカラム名をつけて操作することができ、効率的です。 独自仕様であるため、SQL に常態化しているようなデータベースインジェクション脆弱性の危険がありません。 ログデータベースの概要 ログデータベースは、レコードを収めた10のファイルとそのカラム名を収めたファイルの11ファイルからなるデータベースを運用する形態となります。レコードは古くなると消えます。(ログローテンションします。) Flock を用いてロックすることはしません。 ログデータベースでは書き込みは追記しかできません。 ログデータベースを扱うモジュールのファイル名は以下の通りです。 cafemilk_database_log.pl cafemilk_database_log.pl のあるディレクトリは以下の通りです。 [Apache_server] └ [cgi-bin] └ [pl] ログデータベースの扱うデータベースのファイルは例えば以下の通りです。 item_news.0.log.csv.cgi 新着商品のレコード0 item_news.1.log.csv.cgi 新着商品のレコード1 item_news.2.log.csv.cgi 新着商品のレコード2 item_news.3.log.csv.cgi 新着商品のレコード3 item_news.4.log.csv.cgi 新着商品のレコード4 item_news.5.log.csv.cgi 新着商品のレコード5 item_news.6.log.csv.cgi 新着商品のレコード6 item_news.7.log.csv.cgi 新着商品のレコード7 item_news.8.log.csv.cgi 新着商品のレコード8 item_news.9.log.csv.cgi 新着商品のレコード9 item_column_list.csv... 新着商品のカラム名 データベースは標準にてセーフモードで運用されます。パーミッションファイルのないディレクトにあるデータベースの読み書きはできません。 標準のセーフモードは以下のように指定されています。 $config- {database}{safety} = 1 ; $config- {database}{safety} を設定しているファイルは以下の通りです。 [Apache_server] └ [cgi-bin] └ [config] └ [admin] └ config_basic.pl セーフモードにて要求されるパーミッションファイルは以下の通りです。ファイルの内容は何でもかまいせん。 [permit_database_connect.txt] ログデータベースの操作のサンプル 以下は、ログを追記する場合のサンプルとなります。 まずはデータベース接続 my $log_database = Cafemilk_database_log- connect ({ config = $config, userdata = $userdata, log_error = $log_error, log_alert = $log_alert, status = $status, column_filename = log/access_log_column_list.csv , column_separator = , , database_filename = log/access_log , database_separator = , , record_stack = $config- {database}{log_stack}{common}, }); ログとして書き込む内容の作成 my $error = "@{$log_error}"; my $alert = "@{$log_alert}"; $error =~ s/\x0D\x0A|\x0D|\x0A//g; $alert =~ s/\x0D\x0A|\x0D|\x0A//g; my %records = ( id = $userdata- { time }, time = $userdata- { time }, admin_name = $userdata- {admin_registry_values}{admin_name}, user_name = $userdata- {user_registry_values}{user_name}, execute = $userdata- {request_values}{execute}[0], ip_address = $ENV{ REMOTE_ADDR }, referer = $ENV{ HTTP_REFERER }, # post = $ENV{ CONTENT_LENGTH }, # get = $ENV{ QUERY_STRING }, # cookie = $ENV{ HTTP_COOKIE }, # error = $error, # alert = $alert, ); 追記 $log_database- postscript(\%records); 終了処理 undef $log_database; 以下は、最後のレコードを取得する場合のサンプルとなります。 my $database = Cafemilk_database_log- connect ({ config = $config, userdata = $userdata, log_error = $log_error, log_alert = $log_alert, status = $status, column_filename = database/forum_thread_column_list.csv , column_separator = , , database_filename = database/admin_forum_thread , database_separator = , , record_stack = $config- {database}{session_stack}{admin_forum}{thread}, }); 条件に合う最後のレコードを取得 my $extract_database = $database- extract_last_record ({ extract_column_name = thread_id , extract_column_value = $message_values{thread_id}, }); %thread_values にレコードのカラム名と値を格納 %thread_values = $database- get_values_argument ({ database_values = $extract_database, }); undef $database; 以下は、最後のレコードを取得して内容を修正し、追記する場合のサンプルとなります。 my $database = Cafemilk_database_log- connect ({ config = $config, userdata = $userdata, log_error = $log_error, log_alert = $log_alert, status = $status, column_filename = log/sale_count_column_list.csv , column_separator = , , database_filename = log/sale_count , database_separator = , , record_stack = 10, }); my $extract_database = $database- extract_last_record ({ extract_column_name = dummy , extract_column_value = count , }); %count_values にレコードのカラム名と値を格納 my %count_values = $database- get_values_argument ({ database_values = $extract_database, }); %count_values の変更 $count_values{count} ++; $status- {sale_count} = $count_values{count}; $count_values{id} = $userdata- { time }; $count_values{time} = $userdata- { time }; $count_values{dummy} = count ; 追記 $database- postscript(\%count_values); undef $database; 以下は、データベスーから特定の条件に合うレコード(複数)を抽出して、抽出された各レコードを順次処理していく場合のサンプルとなります。 まずはデータベース接続 my $database = Cafemilk_database_log- connect ({ config = $config, userdata = $userdata, log_error = $log_error, log_alert = $log_alert, status = $status, column_filename = database/item_column_list.csv , column_separator = , , database_filename = database/item_news , database_separator = , , record_stack = $config- {database}{session_stack}{item}{news}, }); 全レコードの読み込み $database- get_record_all(); 追記により重複しているレコードを最新のものを除いて削除 $database- merge_database ({ column_name = item_id , }); 完全一致カラム抽出処理 my $target = multiprice ; $database- match_database ({ column_name = item_type , match_word = $target, }); 検索文字列の用意 文字列はスペース区切りで AND 検索となる my $words = $input_values{ search }; $words = Cafemilk_basic decode_escape ({ config = $config, userdata = $userdata, log_error = $log_error, log_alert = $log_alert, status = $status, text = $words, }); 検索の対象となるカラムの指定 my @columns = ( "item_id", "name_$userdata- {language_type}", "text_1_$userdata- {language_type}", "text_2_$userdata- {language_type}", "manufacturer_$userdata- {language_type}", "table_value_1_$userdata- {language_type}", "table_value_2_$userdata- {language_type}", "table_value_3_$userdata- {language_type}", "table_value_4_$userdata- {language_type}", "option_name_1_$userdata- {language_type}", "option_name_2_$userdata- {language_type}", "option_name_3_$userdata- {language_type}", ); 検索実行 $database- search_database ({ search_column = \@columns, search_words = $words, 英字の大文字と小文字の区別 1 でしない character_mode = 1 , }); 並び替え処理 $database- sort_database ({ column_name = "price_main_$userdata- {currency_type}", 逆順処理 1 で逆順 reverse_mode = 0 , 並び替えモード number_quick で数値モード character_quick で文字モード sort_mode = number_quick , }); 抽出・検索・並び替えされたレコードを取得 my @lines = $database- get_extract_database(); レコード処理 foreach (@lines) { my $line = $_; レコードの分割とカラム名との関連づけ my %target_values = $database- get_values_argument ({ database_values = $line, }); ここで例えばレコードの内容の表示処理を行う print $target_values{item_id}; } 終了処理 undef $database;
https://w.atwiki.jp/bururu_gis/pages/17.html
研究室のデータベースです。 データベース(未加工データ(外部から購入したり、もらったデータ)) データベース(加工データ) データベース(研究室オリジナルデータ)
https://w.atwiki.jp/cafemilk/pages/31.html
基本データベース CAFEMILK SHOPIING CART V5 ではカンマ区切りCSV形式のデータベースを用います。文字コードは UTF-8N となります。 エクセルの書式に対応しています。 データベース運用の方法は用途に合わせて基本データベースとログデータベースの二種類があります。 データベース関連の処理はフレームワークとなっていますので、カスタマイズ時の実装作業が楽です。レコードの各項目は SQL のようにカラム名をつけて操作することができ、効率的です。 独自仕様であるため、SQL に常態化しているようなデータベースインジェクション脆弱性の危険がありません。 基本データベースの概要 基本データベースは、レコードを収めた1つのファイルとそのカラム名を収めたファイルの2ファイルからなるデータベースを運用する形態となります。レコードは古くなっても消えません。(ログローテンションしません。) Flock を用いてロックすることができます。 基本データベースを扱うモジュールのファイル名は以下の通りです。 cafemilk_database_basic.pl cafemilk_database_basic.pl のあるディレクトリは以下の通りです。 [Apache_server] └ [cgi-bin] └ [pl] 基本データベースの扱うデータベースのファイルは例えば以下の通りです。 item.csv.cgi........ 商品データベースのレコード item_column_list.csv 商品データベースのカラム名 データベースは標準にてセーフモードで運用されます。パーミッションファイルのないディレクトにあるデータベースの読み書きはできません。 標準のセーフモードは以下のように指定されています。 $config- {database}{safety} = 1 ; $config- {database}{safety} を設定しているファイルは以下の通りです。 [Apache_server] └ [cgi-bin] └ [config] └ [admin] └ config_basic.pl セーフモードにて要求されるパーミッションファイルは以下の通りです。ファイルの内容は何でもかまいせん。 [permit_database_connect.txt] 基本データベースの操作のサンプル 以下は、データベスーから特定の条件に合うレコード(複数)を抽出して、抽出された各レコードを順次処理していく場合のサンプルとなります。 まずはデータベース接続 my $database = Cafemilk_database_basic- connect ({ config = $config, userdata = $userdata, log_error = $log_error, log_alert = $log_alert, status = $status, カラム名の所在の指定 column_filename = database/item_column_list.csv , カラム名の区切りコードを指定 値はカンマ固定 column_separator = , , レコードの所在の指定 database_filename = database/item.csv.cgi , レコードの区切りコードを指定 値はカンマ固定 database_separator = , , 接続モード database_mode = + , Flockの設定 ロックするときは 2 とする database_flock = 2 , }); 全レコードの読み込み $database- get_record_all(); 完全一致カラム抽出処理 my $target = multiprice ; $database- match_database ({ column_name = item_type , match_word = $target, }); 検索文字列の用意 文字列はスペース区切りで AND 検索となる my $words = $input_values{ search }; $words = Cafemilk_basic decode_escape ({ config = $config, userdata = $userdata, log_error = $log_error, log_alert = $log_alert, status = $status, text = $words, }); 検索の対象となるカラムの指定 my @columns = ( "item_id", "name_$userdata- {language_type}", "text_1_$userdata- {language_type}", "text_2_$userdata- {language_type}", "manufacturer_$userdata- {language_type}", "table_value_1_$userdata- {language_type}", "table_value_2_$userdata- {language_type}", "table_value_3_$userdata- {language_type}", "table_value_4_$userdata- {language_type}", "option_name_1_$userdata- {language_type}", "option_name_2_$userdata- {language_type}", "option_name_3_$userdata- {language_type}", ); 検索実行 $database- search_database ({ search_column = \@columns, search_words = $words, 英字の大文字と小文字の区別 1 でしない character_mode = 1 , }); 並び替え処理 $database- sort_database ({ column_name = "price_main_$userdata- {currency_type}", 逆順処理 1 で逆順 reverse_mode = 0 , 並び替えモード number_quick で数値モード character_quick で文字モード sort_mode = number_quick , }); 抽出・検索・並び替えされたレコードを取得 my @lines = $database- get_extract_database(); レコード処理 foreach (@lines) { my $line = $_; レコードの分割とカラム名との関連づけ my %target_values = $database- get_values_argument ({ database_values = $line, }); ここで例えばレコードの内容の表示処理を行う print $target_values{item_id}; } 終了処理 undef $database; 以下は、データベスーから特定の条件に合うレコード(単数)を抽出して、レコードを書き換える場合のサンプルとなります。 my $database = Cafemilk_database_basic- connect ({ config = $config, userdata = $userdata, log_error = $log_error, log_alert = $log_alert, status = $status, column_filename = database/item_column_list.csv , column_separator = , , database_filename = database/item.csv.cgi , database_separator = , , database_mode = + , database_flock = 2 , }); $database- get_record_all(); 商品コード hoge のレコード(単独)を抽出 my $extract_database = $database- extract_last_record ({ extract_column_name = item_id , extract_column_value = hoge , }); レコードの分割とカラム名との関連づけ my %record = $database- get_values_argument ({ database_values = $extract_database, }); ここで例えば商品の販売数を更新 $record{sales_quantity} ++; レコードの差し替え $database- replace_record ({ extract_column_name = item_id , extract_column_value = hoge , records = \%record, }); 上書き $database- overwrite(); undef $database; 以下は、特定の条件に合うレコードを削除する場合のサンプルとなります。 my $database = Cafemilk_database_basic- connect ({ config = $config, userdata = $userdata, log_error = $log_error, log_alert = $log_alert, status = $status, column_filename = database/item_column_list.csv , column_separator = , , database_filename = database/item.csv.cgi , database_separator = , , database_mode = + , database_flock = 2 , }); $database- get_record_all(); 商品コード hoge のレコード(単独)を削除 $database- delete_record ({ extract_column_name = item_id , extract_column_value = hoge , }); 上書き $database- overwrite(); undef $database; 以下は、レコードを追記する場合のサンプルとなります。追記を行う場合、get_record_all() や overwrite() は必要ありません。 my $database = Cafemilk_database_basic- connect ({ config = $config, userdata = $userdata, log_error = $log_error, log_alert = $log_alert, status = $status, column_filename = database/item_column_list.csv , column_separator = , , database_filename = database/item.csv.cgi , database_separator = , , database_mode = + , database_flock = 2 , }); レコードの作成 my %record; %recordにレコードのカラム名と値を格納 (省略) 追記 $database- postscript(\%record); undef $database; 以下はレコード数を確認する場合のサンプルとなります。 my $database = Cafemilk_database_basic- connect ({ config = $config, userdata = $userdata, log_error = $log_error, log_alert = $log_alert, status = $status, column_filename = database/item_column_list.csv , column_separator = , , database_filename = database/item.csv.cgi , database_separator = , , database_mode = + , database_flock = 2 , }); $database- get_record_all(); my $target = multiprice ; $database- match_database ({ column_name = item_type , match_word = $target, }); レコード数の取得 my $stack = $database- get_stack(); undef $database; 以下はダブルソートのサンプルとなります。 my $database = Cafemilk_database_basic- connect ({ config = $config, userdata = $userdata, log_error = $log_error, log_alert = $log_alert, status = $status, column_filename = database/item_column_list.csv , column_separator = , , database_filename = database/item.csv.cgi , database_separator = , , database_mode = + , database_flock = 2 , }); $database- get_record_all(); ダブルソート $database- double_sort_database ({ column_name_1 = item_type , reverse_mode_1 = 0 , sort_mode_1 = character_quick , column_name_2 = item_id , reverse_mode_2 = 0 , sort_mode_2 = character_quick , }); ここに各処理(省略) undef $database; DUMMY 接続 データベースのロックの衝突を防いだり、処理の速度を上げるために DUMMY 接続を用いることができます。 また、DUMMY 接続をうまく使うことにより、あるプラグインで抽出検索並び替え等を行ったレコードを別のプラグインで再利用できます。DUMMY 接続では書き込みはできません。 以下はDUMMY 接続のサンプルとなります。 my $database = Cafemilk_database_basic- connect ({ config = $config, userdata = $userdata, log_error = $log_error, log_alert = $log_alert, status = $status, column_filename = database/item_column_list.csv , column_separator = , , database_filename = database/item.csv.cgi , database_separator = , , database_mode = + , database_flock = 2 , }); $database- get_record_all(); my @lines = $database- get_extract_database(); $userdata- {database}{lines}{item} = \@lines; undef $database; my $database = Cafemilk_database_basic- dummy ({ config = $config, userdata = $userdata, log_error = $log_error, log_alert = $log_alert, status = $status, column_filename = database/item_column_list.csv , column_separator = , , database_separator = , , }); my @lines = @{$userdata- {database}{lines}{item}}; レコード処理 foreach (@lines) { my $line = $_; 省略 } undef $database; 詳細 データベース接続時の接続モードは以下のものの使用が禁止されています。OS の仕様により上書き時にデータが消えることがあるためです。 + データベースに上書きがある場合、接続モードは以下を用いてください。 + データベース読み込むだけの場合、接続モードは以下を用いてください。 Flock は基本的に常に 2 です。 postscript はただちに実行されるため、overwrite の必要はありません。 並び替えモード 並び替えモードは以下の通りとなります。 number_quick... 数値のソート character_quick 文字列のソート 以下のモードは使用を禁止されていますが、検索結果が確実でなくてもよい場合に、高速化を得ることができます。 number_basic... 数値のソート character_basic 文字列のソート 通常は使いませんが、ベンチマークを取りたい場合など、ほかに以下のソートが利用できます。 number_normal......... 標準的なコードで書かれた早くないソート 数値 character_normal...... 標準的なコードで書かれた早くないソート 文字列 number_schwartz....... シュワルツ変換 数値 character_schwartz .... シュワルツ変換 文字列 number_eimerbrigade... バケットソート 数値 character_eimerbrigade バケットソート 文字列 通常は使いませんが、以下は検索結果が雑になるソートです。 number_greathattery... いい加減ソート 数値 character_greathattery いい加減ソート 文字列