広告です。クリックいただけると励みになります。

人気記事(昨日)

    2026年05月22日

    Oracle用PL/SQLとは?

    engin-akyurt-3ORoQEJY9LA-unsplash.jpg

    質問

    Oracle用PL/SQLとは?


    Believe in Your Own Magic: A 45-Card Oracle Deck and Guidebook [With Book(s)] BELIEVE IN YOUR OWN MAGIC [ Amanda Lovelace ]

    価格:3960円
    (2026/5/22 20:30時点)
    感想(0件)

    オラクルマスター教科書 Silver SQL Oracle Database SQL (EXAMPRESS) [ 株式会社コーソル 企画&マーケティング部 ]

    価格:5280円
    (2026/5/22 20:29時点)
    感想(4件)


    解答

    PL/SQL は、Oracle Database 用に作られた「SQLを拡張したプログラミング言語」です。

    名前は:

    • Procedural Language / SQL
      の略です。

    何が違う?

    普通のSQLは基本的に:

    SELECT ...INSERT ...UPDATE ...

    みたいな「1回の命令」を実行するものです。

    でも実務では:

    • 条件分岐したい

    • ループしたい

    • エラー処理したい

    • 複数SQLをまとめたい

    ことが多い。

    そこでPL/SQLを使います。


    イメージ

    普通のSQL:

    SELECT * FROM users;

    PL/SQL:

    BEGIN  UPDATE users  SET point = point + 100  WHERE id = 1;  INSERT INTO logs(msg)  VALUES('point updated');END;

    みたいに、
    処理をまとめて書けます。


    できること

    PL/SQLでは:

    • IF

    • LOOP

    • 変数

    • 例外処理

    • 関数

    • ストアドプロシージャ

    などが使えます。

    つまり、
    「DBの中で動くプログラム」
    を書ける感じです。


    よく使うもの

    1. ストアドプロシージャ

    DB内に保存する処理。

    CREATE PROCEDURE ...

    で作る。

    アプリ側から呼び出せます。


    2. 関数

    値を返す処理。

    CREATE FUNCTION ...

    3. トリガー

    特定イベントで自動実行。

    例:

    • INSERTされたらログ保存


    なぜ使う?

    1. DB側で高速処理

    大量データ処理を
    DB内部で完結できる。


    2. ネットワーク往復削減

    アプリ ↔ DB の通信回数を減らせる。


    3. 業務ロジック共有

    複数アプリから同じ処理を利用可能。


    ただしデメリットもある

    保守が難しくなりがち

    ロジックが:

    • アプリ側

    • DB側

    に分散する。


    Oracle依存

    PL/SQLはOracle専用色が強い。

    他DBへ移植しづらい。


    他DBにも似たものはある?

    あります。

    • PostgreSQL → PL/pgSQL

    • SQL Server → T-SQL

    など。

    でもPL/SQLは歴史が長く、
    かなり高機能です。


    まとめ

    PL/SQLは:

    • SQLに

    • プログラミング機能を追加した

    • Oracle向け言語

    です。

    つまり、
    「DBの中で業務処理を書くための仕組み」
    と考えると分かりやすいです。




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

    価格:1848円
    (2026/5/20 20:03時点)
    感想(0件)


    ジョインテックス ファイルインデックス D027J−12Y

    価格:914円
    (2025/10/26 11:33時点)
    感想(0件)


     



    ブログランキング・にほんブログ村へ
    【下記、広告です。クリックいただけると励みになります。】
    posted by モニー at 20:31| Comment(0) | データベース | このブログの読者になる | 更新情報をチェックする

    2025年11月08日

    B-Treeインデックスをわかりやすい例で説明してください。

    am-BK9dKc_NfjM-unsplash.jpg

    質問

    B-Treeインデックスをわかりやすい例で説明してください。


    解答

    とても良い質問です。
    B-Tree(B木)インデックスは、データベースで最も一般的に使われているインデックス構造で、
    「本の索引」や「辞書」のように、データを並べて探すのを高速化します。

    以下で、わかりやすい例を使って説明します。


    1. たとえ:辞書で「りんご」を探すとき

    辞書で「りんご」を探すとき、最初から全部のページを1つずつ見ていく人はいません。
    普通はこうします:

    1. 「あ行」か「ら行」かを判断して、途中のページを開く

    2. そこから「り」→「りん」→「りんご」と順に範囲を絞っていく

    この“途中を飛ばして探す”のが B-Treeの考え方 です。


    2. 構造のイメージ

    例えば、次のような数値データがあるとします。

    10, 20, 30, 40, 50, 60, 70

    B-Treeでは、これを木構造(階層)に分けます。

                [40]           /    \   [20]           [60]  /   \           /   \[10][30]       [50][70]
    • ルートノード(最上段)に「40」

    • 40より小さいデータは左へ、大きいデータは右へ

    • さらにその下も同じルールで整理

    このように、中央を軸にして枝分かれするため、
    データ数が増えても探す回数は少なくて済みます。


    3. 検索の流れ(例:30を探す)

    1. まずルートの40を見る。→ 30は40より小さいので左へ。

    2. 左のノード[20]を見る。→ 30は20より大きいので右へ。

    3. [30]を見つける。

    たった2〜3回の比較で済みます。
    (もしインデックスがなければ、10→20→30…と全件スキャンが必要になります)


    4. B-Treeインデックスの特徴

    項目説明
    並び順常にキー順に並んでいる
    検索速度O(log n)(データが増えても速度低下が緩やか)
    範囲検索「20〜50の間」などの連続データ検索が得意
    挿入・削除バランスを自動で調整(木が偏らない)

    5. データベースでの使い方

    例えばテーブルがこうだとします:

    idname
    1Tanaka
    2Suzuki
    3Yamada
    4Watanabe
    5Kobayashi

    nameB-Treeインデックスを貼ると、
    WHERE name = 'Yamada'WHERE name BETWEEN 'S' AND 'T' のような検索が
    すぐに該当部分にジャンプできるようになります。


    6. まとめ

    • B-Treeインデックスは辞書の索引のようなもの

    • データを常に整然と並べて二分探索のように効率よく探せる

    • 等価検索範囲検索に特に強い

    • データが増えても木が自動でバランスを保つ





    ジョインテックス ファイルインデックス D027J−12Y

    価格:914円
    (2025/10/26 11:33時点)
    感想(0件)


    MySQL運用・管理[実践]入門 〜安全かつ高速にデータを扱う内部構造・動作原理を学ぶ【電子書籍】[ yoku0825 ]

    価格:3080円
    (2025/6/10 11:01時点)
    感想(0件)


     



    ブログランキング・にほんブログ村へ
    【下記、広告です。クリックいただけると励みになります。】
    posted by モニー at 15:00| Comment(0) | データベース | このブログの読者になる | 更新情報をチェックする

    2025年11月01日

    PostgresSQLは他のDBと何が違いますか?

    tom-parkes-Ns-BIiW_cNU-unsplash.jpg

    質問

    PostgresSQLは他のDBと何が違いますか?
    特色を教えてください。


    解答

    とても良い質問です。
    PostgreSQL(ポストグレスキューエル)は、オープンソースのリレーショナルデータベース管理システム(RDBMS)の中でも特に「拡張性」「信頼性」「標準準拠性」に優れたデータベースです。
    以下では、他の主要なDB(MySQL・SQLite・Oracle・SQL Serverなど)と比較しながら、PostgreSQLの特色を詳しく整理します。


    ■ PostgreSQLの概要

    * 開発開始:1980年代のカリフォルニア大学バークレー校(Ingresの後継)
    * ライセンス:完全オープンソース(PostgreSQL License)
    * 特徴:商用DB並みの機能を持つ「自由な高機能RDBMS」

    ■ PostgreSQLの5つの主要な特色

    ① 拡張性(Extensibility)

    PostgreSQL最大の強みです。
    特徴説明
    独自データ型の追加自作のデータ型・演算子・関数を定義可能。
    例:地理座標型、JSON型など。
    拡張モジュール(Extension)PostGIS(地理情報)、pg_partman(パーティション管理)など機能拡張が可能。
    ストアドプロシージャPL/pgSQL、Python、Perl、Cなど複数言語で記述できる。
    → つまり「ユーザーが自由に機能を追加できるDB」という柔軟さがあります。
    MySQLやSQLiteではこのレベルの拡張は難しいです。


    ② 標準SQLへの高い準拠性

    * ANSI SQL標準に最も忠実なRDBMSのひとつです。
    * 多くの商用DB(Oracle、SQL Server)は独自拡張を多く含みますが、PostgreSQLは標準SQLを尊重。
    * そのため、他DBからの移行・学習コストが低い。
    比較対象SQL準拠度備考
    PostgreSQL非常に高いほぼ完全に標準準拠
    MySQL中程度独自仕様が多い(例:GROUP BY挙動など)
    SQLite軽量化優先一部仕様が簡略化
    Oracle / SQL Server高いが独自拡張が多い独自関数や構文が豊富


    ③ 高度なトランザクション制御と整合性

    機能PostgreSQLの特性
    MVCC(Multi-Version Concurrency Control)ロックを最小限に抑え、読み取りと書き込みの競合を減らす。
    高い同時実行性能を実現。
    ACID完全準拠原子性・一貫性・独立性・永続性を完全保証。
    外部キー制約・トリガ・ビュー・シーケンスデータ整合性を厳密に管理可能。
    → データの正確性を最重視するシステム(金融、医療、政府など)で採用されやすい。


    ④ JSON・NoSQL的機能への対応

    PostgreSQLはRDBMSでありながら、NoSQL的なデータ構造もサポートします。
    機能内容
    JSON / JSONB型JSONデータをネイティブで格納・検索・インデックス化できる。
    hstore型キー・バリュー型データを扱う拡張。
    全文検索機能(Full Text Search)自然言語検索をDB内で処理可能。
    → つまり、「RDB + NoSQLのハイブリッド」として使えるのが大きな強み。
    MongoDB的な用途にも対応できます。


    ⑤ 安定性・信頼性・オープンソース文化

    * 商用DB(Oracle, SQL Server)並みの堅牢性。
    * 大規模トランザクション処理にも強い。
    * バージョンアップでデータ破損がほぼない安定設計。
    * コミュニティが非常に活発で、世界中の開発者が監査・改良。
    → 無料でありながら、ミッションクリティカルなシステムにも耐えられる。


    ■ 他の主要DBとの比較表

    特徴PostgreSQLMySQLSQLiteOracleSQL Server
    ライセンスオープンソースオープンソースパブリックドメイン商用商用
    拡張性×
    SQL準拠性○〜△
    安定性
    パフォーマンス非常に高(読み取り特化)軽量
    JSON対応
    学習コスト
    適用分野Web、業務システム、金融Webアプリ、CMS組み込み・モバイル大企業・官公庁大企業・Microsoft環境


    ■ まとめ

    観点PostgreSQLの特徴
    基本理念「自由なオープンソースの商用級DB」
    強み拡張性・信頼性・標準準拠・JSON対応
    弱み初期設定やチューニングが少し複雑
    向いている用途金融、業務システム、SaaS、Web API、地理情報システム(GIS)
    代表的な利用例Red Hat、Apple、Instagram、GitLabなどが採用



    [改訂3版]内部構造から学ぶPostgreSQL-設計・運用計画の鉄則 [ 上原 一樹 ]

    価格:3520円
    (2025/10/26 11:10時点)
    感想(0件)


    軽量・高速モバイルデータベースRealm入門 「Swift」と「Realm Mobile Database」によるiOSアプリ開発を徹底解説!/菅原祐/岸川克己【3000円以上送料無料】

    価格:3168円
    (2025/9/13 17:52時点)
    感想(1件)


     



    ブログランキング・にほんブログ村へ
    【下記、広告です。クリックいただけると励みになります。】
    posted by モニー at 19:00| Comment(0) | データベース | このブログの読者になる | 更新情報をチェックする

    2025年08月11日

    データベースの三層スキーマ構造とは

    alesia-kaz-XLm6-fPwK5Q-unsplash.jpg

    質問

    データベースの三層スキーマ構造とは何ですか


    解答

    データベースの三層スキーマ構造(Three-Schema Architecture)は、
    ANSI/SPARC(米国標準協会の委員会)が提案したデータベース設計の概念モデルで、
    データの扱いを 外部・概念・内部 の3つのレベルに分けて整理する考え方です。

    これにより、ユーザーやアプリケーションがデータを利用する方法と、
    実際にデータが物理的に保存される方法を分離し、柔軟性や保守性を高めます。


    1. 三層の概要

    役割説明主な対象
    外部スキーマ(External Schema)ユーザー視点の見方個々のユーザーやアプリケーションに見えるデータの構造。必要な部分だけを表示し、アクセス制御やフォーマット変換も含む。ユーザー、アプリケーション開発者
    概念スキーマ(Conceptual Schema)全体の論理構造データベース全体の論理的な設計。全ユーザー共通の論理モデル(ERモデルなど)を定義。データ間の関係や制約を統一的に管理。データベース設計者
    内部スキーマ(Internal Schema)物理的構造データが物理的にどのように格納されているか(ファイル構造、インデックス、圧縮、パーティション分割など)。データベース管理システム(DBMS)

    2. 関係性(データ独立性)

    三層構造の大きな目的は データ独立性 の確保です。

    1. 物理データ独立性

      • 内部スキーマを変更しても、概念スキーマや外部スキーマに影響が出ない。

      • 例:ストレージ構成やインデックス方式を変えても、アプリ側のSQLは変えなくてよい。

    2. 論理データ独立性

      • 概念スキーマを変更しても、外部スキーマに影響が出ない。

      • 例:テーブル列を追加しても、特定ユーザー用ビューはそのまま利用可能。


    3. 図解イメージ

    [ 外部スキーマ ]   ← 各ユーザーごとのビュー       ↑ マッピング[ 概念スキーマ ]   ← 全体の論理モデル(ER図)       ↑ マッピング[ 内部スキーマ ]   ← 物理的保存方法(ファイル構造・インデックス)

    4. メリット

    • アプリと物理データの依存関係を減らし、保守や拡張が容易。

    • 複数ユーザーに異なるデータビューを提供できる。

    • セキュリティ(アクセス制御)や性能チューニングを柔軟に行える。





    【中古】 490円のパソコン講座12 すぐ効くエクセル関数&データベー/情報・通信・コンピュータ

    価格:110円
    (2025/8/11 14:43時点)
    感想(0件)


    データベース速攻入門 〜モデリングからSQLの書き方まで [ 堀内 康夫 ]

    価格:2420円
    (2025/6/11 12:16時点)
    感想(0件)


     



    ブログランキング・にほんブログ村へ
    【下記、広告です。クリックいただけると励みになります。】
    posted by モニー at 15:00| Comment(0) | データベース | このブログの読者になる | 更新情報をチェックする

    2025年08月04日

    ボイスコッド正規化とは

    steve-gribble-tuRraTuflBA-unsplash.jpg

    質問

    ボイスコッド正規化とはなんですか?


    解答

    **ボイスコッド正規化(ボイス・コッド正規形、Boyce–Codd Normal Form:BCNF)**とは、データベース設計における正規化の一段階で、第3正規形(3NF)よりもさらに厳密な正規形です。


    ✅ ボイスコッド正規化(BCNF)とは?

    関係データベースにおいて、すべての関数従属性が候補キーに基づいている状態を指します。


    🔷 正式な定義:

    ある関係Rが BCNF にあるとは、

    すべての非自明な関数従属 A → B に対して、A が候補キーであること

    が満たされている場合を言います。


    ✅ 前提知識:関数従属とは?

    • 関数従属(A → B)とは、「Aが決まればBが一意に決まる」という関係。

    • 例:社員ID → 社員名(社員IDが同じなら、社員名も同じ)


    ✅ なぜBCNFが必要か?

    第3正規形(3NF)では、**「主キー以外の属性に依存する依存関係(推移的従属)」**を排除しますが、以下のようなケースは3NFでは解決できません。


    ▶ 例:3NFだがBCNFでないケース

    学生ID講義名教室
    S001数学A教室
    S001英語B教室
    • 複合主キー:学生ID + 講義名

    • 関数従属:講義名 → 教室(←これは候補キーではない)

    この状態は、3NFでは問題ないとされるが、講義名 → 教室という非候補キーによる依存があり、冗長性や不整合の原因になります。


    ✅ BCNFへの分解とは?

    上の例をBCNFに分解するには、以下のように関係を分割します:

    1. 講義名 → 教室 に基づいて:

    講義テーブル(Lecture)-----------------------講義名 | 教室数学   | A教室英語   | B教室
    1. 残りの情報は:

    受講テーブル(Enrollment)--------------------------学生ID | 講義名S001   | 数学S001   | 英語

    これにより、「教室情報の重複」や「教室変更時の更新ミス」などを防げます。


    ✅ まとめ表

    正規形内容の要点対象
    第1正規形(1NF)繰り返しのない原子値データの構造
    第2正規形(2NF)主キーの部分従属の排除関数従属
    第3正規形(3NF)推移的従属の排除関数従属
    BCNFすべての関数従属の左辺が候補キーより強い整合性

    ✅ 結論

    **ボイスコッド正規化(BCNF)**は、関係データベースの冗長性と不整合をさらに減らすための正規化段階で、3NFよりも厳しい条件です。

    • 「関数従属の左辺は候補キーでなければならない」という原則に従ってテーブルを分割します。

    • 設計段階でBCNFに従うことで、データの整合性と保守性が高まる一方で、テーブルが増えるためパフォーマンス設計とのバランスが必要です。





    世界最初のDB自動設計方法論(下) “米国・日本国特許取得の正規化方程式理論”による新 [ 白石慶和 ]

    価格:4950円
    (2025/7/17 10:29時点)
    感想(1件)


    オラクルマスター教科書 Gold DBA Oracle Database Administration2 (EXAMPRESS) [ 株式会社コーソル 企画&マーケティング部 ]

    価格:8250円
    (2025/6/6 11:42時点)
    感想(0件)


     



    ブログランキング・にほんブログ村へ
    【下記、広告です。クリックいただけると励みになります。】
    posted by モニー at 08:00| Comment(0) | データベース | このブログの読者になる | 更新情報をチェックする

    2025年06月20日

    スロークエリログとは

    logan-voss-ljRA5ETvkbA-unsplash.jpg

    質問

    スロークエリログとはなんですか


    解答

    「スロークエリログ(Slow Query Log)」とは、データベースにおいて実行に時間がかかったSQLクエリ(遅いクエリ)を記録するログです。
    主にMySQLやMariaDBで使われる機能ですが、他のRDBMS(PostgreSQLなど)にも似た機能があります。


    ◆ スロークエリログの目的

    * 遅いクエリを特定し、パフォーマンスを改善するため
    * インデックス不足、不要なJOIN、大量データのスキャンなどの原因を見つける

    ◆ ログに記録される主な情報(MySQLの例)

    * 実行時間(何秒かかったか)
    * 実行されたSQL文
    * ロック時間(テーブルをロックしていた時間)
    * 取得・スキャンした行数(Rows Examined)
    * 実行時のユーザーやホスト情報


    ◆ どうやって使うの?

    1. 有効化する(MySQLの例)

    ```sql

    SET GLOBAL slow_query_log = 1;
    SET GLOBAL long_query_time = 1; -- 1秒以上かかったクエリだけ記録

    ```

    2. ログファイルの場所を確認

    ```sql

    SHOW VARIABLES LIKE 'slow_query_log_file';

    ```

    3. ログの分析

    ログファイルはテキスト形式で読み取れますが、以下のようなツールで分析するのが一般的です:

    * `mysqldumpslow`(MySQLに付属)
    * `pt-query-digest`(Percona Toolkitの一部)


    ◆ 例(ログの内容)

    ```

    # Time: 2025-06-07T13:45:12.234567Z
    # User@Host: user[user] @ localhost []
    # Query_time: 3.456 Lock_time: 0.000 Rows_sent: 10 Rows_examined: 100000

    SELECT *
    FROM users
    WHERE email
    LIKE '%@example.com';

    ```

    この例では、`users`テーブルからメールアドレスをあいまい検索しているクエリが3.4秒かかっていることが分かります。
    インデックスが使われていない可能性があります。


    ◆ 注意点

    * 開発環境や本番環境で使い方が異なります。
    本番で有効にするとディスクI/Oが増える可能性があるので注意が必要です。

    * クエリチューニング(改善)の第一歩として非常に有効です。


    ◆ 補足:PostgreSQLの場合

    PostgreSQLではスロークエリログに相当する機能として、`log_min_duration_statement` という設定があります。

    ```sql

    SET log_min_duration_statement = 1000; -- 1秒以上かかるSQLだけログ

    ```









    これからはじめるPostgreSQL入門 [ 高塚遙 ]

    価格:3278円
    (2025/6/10 09:46時点)
    感想(0件)


    Accessのデータベースのツボとコツがゼッタイにわかる本 2021/2019/Microsoft 365対応 [ 立山秀利 ]

    価格:2420円
    (2025/5/18 14:46時点)
    感想(1件)


     



    ブログランキング・にほんブログ村へ
    【下記、広告です。クリックいただけると励みになります。】
    posted by モニー at 08:00| Comment(0) | データベース | このブログの読者になる | 更新情報をチェックする

    2025年06月17日

    DBのVACUUMとはなんですか

    buddy-photo-pd61clsCVnY-unsplash.jpg

    質問

    DBのVACUUMとはなんですか


    解答

    「VACUUM(バキューム)」とは、主にPostgreSQLなどのデータベース管理システムにおいて、不要なデータを掃除してデータベースを最適化する処理です。
    簡単に言えば、**「DBの掃除機」**のようなものです。


    ◆ なぜVACUUMが必要なのか?

    PostgreSQLなどでは、データの削除や更新をしても、物理的にすぐには消さないという特性があります。

    * UPDATE は実際には「古い行に無効フラグを立て、新しい行を追加」する仕組み。
    * DELETE も「無効フラグを立てる」だけ。
    このため、使われなくなった「不要な行(dead tuples)」が蓄積していきます。


    ◆ VACUUMの役割

    処理内容説明
    不要なデータの回収無効化された行(dead tuples)を物理的に削除する
    テーブルサイズの肥大化を防止ディスク容量を節約できる
    クエリ性能の維持無駄な行が減ることでスキャン効率が上がる
    トランザクションIDの管理トランザクションIDの周回(wraparound)による障害を防ぐ


    ◆ VACUUMの種類(PostgreSQL)

    1. `VACUUM`

    * 基本的な掃除。
    不要データを回収するが、空いたスペースはテーブルサイズには反映されない(ディスクは解放されない)。


    2. `VACUUM FULL`

    * より強力。
    不要なデータを回収しつつ、物理的にテーブルを再構築し、ディスクサイズを縮小する。
    * ただしロックを伴い、実行中は該当テーブルにアクセスできない。


    3. 自動バキューム(autovacuum)

    * PostgreSQLは自動的にVACUUMを実行してくれる機能がある(設定次第)。


    ◆ 実行例(PostgreSQL)

    ```sql

    -- 通常のバキューム

    VACUUM my_table; -- フルバキューム(テーブルロックあり・サイズ縮小)
    VACUUM FULL my_table; -- 統計情報も更新(ANALYZE付き)
    VACUUM ANALYZE my_table;

    ```

    ◆ VACUUMが必要になる例

    * 更新・削除の多いテーブル
    * 長期間運用しているDB
    * クエリが急に遅くなったとき
    * ディスク使用量が増え続けているとき


    ◆ 補足:MySQLの場合は?

    MySQL(InnoDBエンジン)ではVACUUMという名前では存在しませんが、**自動的にガベージ回収(行の再利用)**が行われます。
    ただし、`OPTIMIZE TABLE` コマンドを使うと、MySQLでも類似の処理(空き領域の再整理)が行われます。


    ◆ まとめ

    項目内容
    名前VACUUM(バキューム)
    主な目的不要な行を削除し、性能・容量を改善する
    主に使われるDBPostgreSQL、(MySQLではOPTIMIZEが近い)
    注意点`VACUUM FULL`はロックが発生するので使用タイミングに注意





    PostgreSQL徹底入門 第4版 インストールから機能・仕組み、アプリ作り、管理・運用まで [ 近藤 雄太 ]

    価格:3608円
    (2025/6/10 09:43時点)
    感想(1件)


    データベースシステム(改訂2版) [ 北川 博之 ]

    価格:3520円
    (2025/5/18 14:40時点)
    感想(0件)


     



    ブログランキング・にほんブログ村へ
    【下記、広告です。クリックいただけると励みになります。】
    posted by モニー at 11:00| Comment(0) | データベース | このブログの読者になる | 更新情報をチェックする