アフィリエイト広告を利用しています
検索
<< 2025年01月 >>
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
最新記事
タグクラウド
カテゴリーアーカイブ
ファン
最新コメント
プロフィール
ゼロから始めるシステム開発さんの画像
ゼロから始めるシステム開発
 こんにちは!ナビゲータのEVEです。各種研究室を用意し、次期EVEシステムを製造しようと日々頑張っています。現在一番力を入れているのが、資金調達です。このブログもその一環ですので、ご協力いただければ嬉しいです。

広告

この広告は30日以上更新がないブログに表示されております。
新規記事の投稿を行うことで、非表示にすることが可能です。
posted by fanblog

2023年11月16日

外部キーの導入を検討する 〜データベース研究室〜


 こんにちは!
 ナビゲータのEVEです。
デスクトップパソコン.jpg
 何やってもうまくいかない日が続いています。そこで、ちょっと、生活リズムを変えようと考えています。
 まず、このブログですが、現在、16:00ぐらいから書きはじめて、17:00ぐらいにアップロードしようとしていますが、それを午前に行います。
 それに加えて、午前中は、簿記と開発をしようかなって考えています。今、起きる時間を7時に設定しているのですが、なかなか実現できません。寝る時間が増えれば増えるほど、この2つの割り当て時間が減ります。逆に早く起きれば、時間が増えるので、早く起きるようになると思うのですが・・・?それと、ブログの公開時間を17:00ぐらいに設定していても、なかなかその時間にできません。遅い場合は、午前様になることがあります。そうなると寝る時間が減るので、悪循環になっています。この生活リズムの変更により好循環になるかなって考えていますが、どうでしょうか?明日から試してみます。

[Prototype EVEのデータベース変更]
 以上のような状況で、なかなか開発の進捗がない状態なのですが、明日からやってみたいことがあります。それは、 外部キーを設定 すること・・・。今まで、すべてのレコードに主キーは設定しているのですが、外部キーは今まで設定していませんでした。理由は、当初、私の開発環境では、利用できなかったから・・・。そのため、導入せずに開発を進めました。その後環境を手に入れたのですが、処理速度に問題を感じなかったため、今まで導入していませんでした。開発当初、 主キーが1項目しか指定できなかった り、 トランザクション が利用できなかったりいろいろと不都合があり、業務で開発するシステムと比較すると、かなりチープな印象がありました。
 ただ、ChatGPTに以上の改善がいつ行われているのか聞いてみると以下のような回答がありました。

トランザクション     → 2002年1月
主キーに複数の項目を指定 → 2005年3月

開発が2004年からなので、少なくともトランザクションのほうは利用できたはずです。実は、標準MySQLという本に開発環境が一式入っていてそれを利用していたのですが、その本に添付されていたソフトが古かったようです。


 今から考えるとトランザクションを利用できないとか、主キーが複数指定できないとか、かなり間抜けな開発をしていたものだと思います。
 なお、現在は、 最新のソフト を利用することを心がけています。

[外部キーの指定の仕方]
 具体的にはどうしたらいいのでしょうか?ChatGPTに聞いてみました。

#子テーブル名
ALTER TABLE orders
#外部キーの制約名
ADD CONSTRAINT fk_orders_customer
#/子テーブルの外部キーカラム
FOREIGN KEY ( customer_id )
#親テーブル
REFERENCES customers (
#親テーブル主キーカラム
customer_id );


以上の通りです。なお、外部キーの制約名なのですが、任意で指定できますが、データベース内で一意に命名する必要があります。利用方法は、後日外部キー制約の変更または削除する際に使用します。データベースの保守やデータベース設計の追跡のために、わかりやすくかつ一意な名前を付けることが一般的だそうです。なお、この外部キーの制約名は必ず付与しなければならないというわけではなく、管理という面から付与するのが普通です。

[あとがき]
 以上により、まずは、Knowlegeシステムから外部キーをしていきたいと思います。以前から遅い遅いと思っていました。その主因として考えていたのは、SQL文そのものです・・・。そのSQL文を見直すという作業は時間がかかるため、安直にできる方法として、外部インデックスを付与する方法を考えつきました。現在、サーバーではなく、WindowsXPが動いていたパソコンでKnowlegeシステムを動かしているのですが、 激遅です。他にシステムでは、処理速度が遅くて困っているシステムはないことですし、Knowlegeシステムに外部キーを指定してみてどんな感じになるのか検証をしたいと思います。
 今どき、外部キーを指定していないデータベースシステムなんてないですよね?EVEシステムでは、適切に外部キーを設定していきたいと思います。

 では、また!

2023年10月05日

すべての情報をデータベースで管理をする 〜データベース研究室〜


 こんにちは!
 ナビゲータのEVEです。
データ.jpg
 まだ、動作するかどうか検証をしていないのですが、その前にやることがありました。昨日話したとおり、Prototype EVEでは、構成管理はしていないのですが、 コンロールファイル でディレクトリを管理していました。そのため、今回システムをフォルダ毎に分けるという判断をしたため、そちらの方も修正しなくてはいけません。ただ、覗いてみて拍子抜け・・・・。ほとんどが相対アドレスで管理しており、絶対アドレスで管理しているのはバッチ処理用の部分だけ・・・。ただ、そちらも、上位の階層で管理していたので、ほとんど修正する必要はありませんでした。ただ、ここで、考えさせられる問題を思い出しました。

[ディレクトリ管理はどこで?]
 Prototype EVEは、先ほど話したとおり、ファイルで管理しています。今まで複数のプロジェクトに参加しましたが、やはり、ファイルで管理しているところが多いように感じています。ただ、ほとんどの情報をデータベースで管理している有名なシステムがあります。それは、皆さんも知っていると思いますが、 Oracle ・・・。

[Oracle]
 現在、世界最高峰のデータベースです。Oracle6では問題が多々あった(私が以前聞いた話です)そうですが、私が初めて利用した、Oracle8iでは、かなり洗練されたイメージがあります。
 Oracleと他のデータベースを比較した場合の強みは、 高セキュリティ 高可用性 スケーラビリティ 、そして特に他のデータベースとの差別化ができていたのは、 行ロック でした。
 近年、多くのデーターベースが行ロックできるようになりましたが、つい最近というイメージです。 SQLServer も2005年からできたという話がありますが、不完全で完璧な製品を提供できるようになったのは、他のデータベースと同様です。
 そのため、Oracleを多くのデータベースエンジニアが選択し、導入、利用しています。

 そんな世界でNo1と思われる、Oracleなのですが、ほとんどの情報をデータベースで管理しています。本で読んだ、Oracleのエンジニアから聞いたという分けではなく、 管理テーブルをひたすら検索して得た印象 です。

[データベースですべての情報を管理するうえでの問題点]
 データベースですべての情報を管理するうえでの問題点、それは、 検索速度 です。
 多くのプロジェクトでは、複雑なSQLを利用しているケースが非常に多いのです。簡単なSQLでシステムを製造しているプロジェクトは正直おめにかかっていません。そのため、1つのSQL文を発行すると、OracleがSQL文を解析するのに時間がかかり、かなりの時間を要します。
 そのような作りをしている大きな原因が、やはり、 検索速度 です。何回もSQLを発行すると時間がかかるため、1回で済ませようとしているようです。そして、Oracleの場合1度発行したSQL文は 再利用 され、検索速度が速いというのです。
 ただ、ここで疑問なのが、「1度発行したSQL文」という部分です。私の考え方では、全く同じSQLでないと再評価の対象となります。それは、Oracleは以下の流れでSQL文を評価しています。

?SQL文を ハッシュ化 します
?同ハッシュから管理アドレスを探します
?管理アドレスにデータが格納されていた場合、その結果をユーザに返却します

という流れで、検索速度の速さを実現しているという認識です。そのため、複雑なSQL文の1箇所でも変わった場合、ハッシュ値が変わってしまい、再評価の対象になると考えています。
 というのは、私の意見なのですが、実際のところはどうなのか、ChatGPTに聞いてみました。

 OracleデータベースがSQL文を評価するプロセスは、簡単に言うと次のようなステップで進行しますが、少し詳細を加えて説明します:

?SQL文の構文解析と構造解析
 最初に、Oracleデータベースは受け取ったSQL文を解析し、その文の構文と構造を理解します。これにより、どのテーブルにアクセスし、どのデータを取得または変更するかを把握します。

 解析されたSQL文は、クエリ最適化フェーズに進みます。このフェーズでは、最適な実行計画を決定するために、異なる実行パスやインデックスの選択などの選択肢が評価されます。最適な実行計画を選択することで、クエリの性能が最大化されます。
?実行計画のキャッシュ
 SQL文の実行計画は、キャッシュに格納されることがあります。これにより、同じSQL文が再度実行される場合、実行計画を再計算する必要がなくなり、クエリの実行が高速化されます。このステップは、SQL文をハッシュ化してキャッシュ内で検索することで行われます。
?データアクセス
 実行計画が確定したら、実際のデータアクセスが行われます。これは、テーブルやインデックスからデータを読み取る、またはデータを更新するステップです。
?結果の返却
 データベースがデータアクセスを実行し、必要なデータが取得されたら、その結果がユーザに返却されます。これには、クエリの結果セットや更新の成功または失敗に関する情報が含まれます。

 要するに、SQL文のハッシュ化はクエリ最適化の一部であり、管理アドレスを特定するという簡略化された概念はOracleの内部動作を正確に反映しているわけではありません。Oracleデータベースの内部プロセスは非常に複雑で、パフォーマンスを最適化し、データを効率的に取得するために多くの最適化ステップが組み込まれています。


 ちょっと、分かりずらいので、再度、SQL文を1箇所でも変更した場合、再評価の対象となるかどうか、聞いてみました。

 SQL文が変更されると、通常、新しいSQL文が再評価の対象となります。OracleデータベースはSQL文のテキスト全体をハッシュ化し、このハッシュ値を使用してクエリキャッシュ内での検索を行います。異なるSQL文には異なるハッシュ値が生成されるため、同じSQL文であっても1か所でも異なる場合、新しいハッシュ値が生成されます。
 このため、同じクエリを再度実行する際に、データベースは新しいSQL文に対してクエリ最適化を実行し、新しい実行計画を決定します。したがって、SQL文の1か所でも異なる場合、データベースは新しいSQL文を評価し、新しい実行計画を生成します。
 ただし、一部のSQLクライアントやアプリケーションは、クエリキャッシュを無視してSQL文を実行する設定になっていることもあります。この場合、SQL文が変更されてもクエリキャッシュの再評価は行われません。したがって、SQL文の変更が正しく反映されることを確認するために、適切な設定を行う必要があります。


ということは、 プレースフォルダ で値を変更しているSQL文は常に再評価の対象となり、以前検索した結果が再利用されることは期待できないと考えたほうがいいようです。

[デバックできないSQL]
 常に再評価がありそうだという複雑なSQLですが、プログラムのように デバックができません 。但し、プログラム同様に分岐的な記述なども可能です。
 プログラムで言ったら、デバックがないプログラムを目検で確認するようなモノです。そんな行為はどのプロジェクトも許可しません。ただ、SQLは、どのプロジェクトでも認められています。
 しかも、試験をする場合、 ホワイトボックス試験 の難易度がかなり高くなります。そのため、 ブラックボックス試験 しか実施していないと思われます。

 そんなプロジェクトで、複雑なSQL文を見ながらかなり、不安を覚えた記憶があります。

[あとがき]
 本日は、システム情報をデータベースで管理するのは問題があり、その大きな問題が検索速度という話をしました。但し、冒頭にも書きましたが、Oracleは、データベースでほとんどの情報を管理しているようです。では、なぜそんなことができるのでしょうか?明日は、「システムエンジニアが目指す中小企業診断士」を書く予定でしたが、変更しこの続きを書きたいと思います。

 では、また!

2022年10月05日

「データベースの作り方を教えます」 [データベース研究室]




 こんにちは!
 ナビゲータのEVEです。

 本日は、今まで作ってきた動画の中で、「データベースの作り方を教えます」という動画について紹介したいと思います。

 この動画を作ったきっかけは、エクセルを用いて午前?Uの分析システムを作ろうとしたら、思うように動作しなかったため、Accessでデータベース分析ツールを作ろうかな?というところから検討が始まっています。


[AccessDBと業務]
 業務で何回か作るかもしれないという事があったことを紹介しています。ただ、そのたびに途中で無くなり、手っ取り早く言うと Accessは素人で一緒に作っていきましょう といった話をしています。 
 動画の中でも話していますが、玄人の方が知っている話を事細かに話されても、素人的にはちんぷんかんぷんな所があります。それと比較して素人の方がいろいろ調べいろいろな挫折を乗り越えて製造するというその過程は、初心者の方が見ていて分かり安い内容となるはずです。 分かりやすいということは、その動画を見れば、AccessDBが使用できるようになるということであり、それにより、より多く視聴者が増えるのではという期待がありました

図解まるわかり データベースのしくみ [ 坂上 幸大 ]

価格: 1,848円
(2022/10/5 17:22時点)
感想(0件)



[AccessDBとリレーショナルデータベース]
 AccessDBはリレーショナルデータベースだという話をしています。その中で、リレーショナルデータベースは 完全性が重要 で、その 完全性を保証する第一歩が正規化 という作業だという話をしています。
 ただ、この正規化、現場に行くとしていないところを多々見かけます。動画の中では話していないのですが、 感覚的には90%以上の職場で守られていない 感じがします。そのような印象を確信した時のことなども動画で紹介しています。


[正規化できていない理由]
 なぜ、現場の多くで正規化をしていないのかという話をしています。
 動画の中では、スピード重視で正規化という作業をしていないのでは?という話をしていますが、そうでない業者も複数います。その理由について動画では話していませんが、私の予想では、以下の2点では?と思っています。

?@それ相応の費用をもらえていない
?A技術者でない人が設計している

 ?@は、 費用をもらっていない腹いせ でしょうか?SIで請け負ったんだけれど、叩かれるだけ叩かれて、不満を持って開発を始めたベンダーがこんな感じなのでは?っと予想しています。そうなら引受けなければいいのにと思うのですが、受注しないと業績的にまずいといった話が、当時はあったのでしょう?現在は、岸田さんのおかげでたくさん仕事があるから、このような事は無くなったのかもしれませんが・・・?
 ?Aは、現場の偉そうな人が大声でもっともらしい内容を話しているんだけれど、分からないなら黙っていればいいのに・・・って思うケースです。このケースは、大手SIベンダーに多いような気がします。
 業界のコンセンサスだと思っていますが、大手SIベンダーには技術者はいません。やっている仕事の内容が、企画、プロデュース、コーディネータ、品質管理、プロジェクトマネジメントっといった役割が多く、多分システムは作った事がないと思います。にもかかわらず口を出しているケースです。仕事の内容ををしっかり認識しその認識の範囲で仕事をした上で、 開発ベンダーを信じる というということでしょうか?信じる事が愛ってアニメであった気がしますが、まず信じる所から始めた方がいいようです。


[今後のシステム開発]
 最後に、「 システム開発の手法や技術は、日進月歩、改革されて毎日違うといっていいぐらいです。だから、何が正しいのかという判断は、動画を見た方の判断にお任せします。
っと締めくくっています。確かにそうです。以上の話は私の勝手な思い込みで、もっと素晴らしい開発手法があり、もしかしたら、私が否定的に話しているその内容が正しいという場合もあるかもしれません。
 今後、現場に出ることはないと思うので、どんな感じで変わっていくのか見ることができないのは残念ですが、よかったら、現場の様子をコメント等で教えてください。

 なお、この動画全10回を予定していましたが、他の動画同様反響が全くなく、製造するという熱意が失われてしまいました。加えて、午前?Uの動画製造がIPv6の勉強のため止まっているという状況もあるので、しばらくはお休み、下手すればお蔵入りになるかもしれません。続きを見たいと思った方、早めにチャンネル登録よろしくお願いします(笑)。

 では、また!

■データベースの作り方を教えます

×

この広告は30日以上新しい記事の更新がないブログに表示されております。

Mobilize your Site
スマートフォン版を閲覧 | PC版を閲覧
Share by: