close
プログラミング クラウド Microsoft Azure 情報処理資格 基本情報技術者 IT基礎 応用情報技術者 開発・設計方法 オブジェクト指向 内定者・新人研修 プログラミング基礎 アルゴリズム コンピュータ数学 内定者研修 新人研修 ヒューマンスキル プロジェクトマネジメント プレゼンテーション リーダーシップ 組織マネジメント ネゴシエーション ロジカルシンキング Java UI/UX HTTP JavaScript基礎 情報処理資格 ネットワークスペシャリスト ネットワーク インターネットルーティング応用 IPアドレス データベース応用 SQL応用 パフォーマンスチューニング データベース設計 ER図 概念設計(データベース) 論理設計(データベース) IT資格 Linux基礎 OS・システム基盤 セキュリティ TCP/IP OSI参照モデル データベースセキュリティ ファイアウォール 標的型攻撃 SQLインジェクション ネットワーク基本設計 CCNA Cisco プロジェクトマネジメント資格 情報処理資格プロジェクトマネージャ 情報処理安全確保支援士 人事給与 財務会計 管理会計 簿記 生産管理 在庫管理 ERP バランススコアカード 情報処理資格 ITアーキテクト 情報処理資格 ITストラテジスト 情報処理資格 ITサービスマネジメント 情報処理資格 システム監査 PMBOK® PMP® プロジェクト計画 WBS リスクコントロール ITIL ITサービスマネジメント 要求定義 要件定義 見積手法 ビジネスインダストリ 業種・業界知識 業務知識 提案力 ソフトウェアテスト基礎 情報処理資格 データベーススペシャリスト ハードウェア基礎 外部設計(基本設計) 内部設計(詳細設計) データベース基礎 SQL基礎 RDBMS 物理設計(データベース) C++ Ruby MVC基礎 Webアプリケーション開発 JavaEE Javaプログラミング応用 フレームワーク MVC応用 Spring フレームワーク ソフトウェアテスト応用 テスト手法 Junit スマートフォンアプリ開発 Androidアプリ開発 C# 基礎 C# 応用 負荷テスト Javaプログラミング基礎 ソフトウェアテスト コーチング メンタリング HTML/CSS サーバー構築 仮想化技術 KVS (NoSQL) アジャイル スクラム ファシリテーション C言語 ITパスポート JSTQB データサイエンス 単体テスト ユニットテスト キャリアアップ インターネットルーティング基礎 パケット解析 LAN構築 データベース データサイエンティスト トレンド 障害対応 インフラ監視 HTTP/2.0 コンピュータサイエンス VPN ネットワーク物理設計 データベース障害 JavaScript モダンJS (Modern JavaScript) 応用 MVS応用 バックアップ/リカバリ 分散処理 Hadoop Hive Python AI 深層学習(DeepLearning) CentOS Linux応用 Zabbix シェルスクリプト Infrastructure as Code Windowsサーバー基礎 内部設計 Docker DevOps Windowsサーバー応用 NginX chef Ainsible ロジカルライティング R テスト自動化 Jenkins Git 継続的インテグレーション (CI) バージョン管理 Vagrant 要求分析 Redmine 継続的インテグレーション(CI) 継続的デリバリー (CD) ヒューマンリソース管理 Web API マイクロサービス コミュニケーション 業務知識/業界知識 マーケティング 語学 AWS 法務 IoT ビジネスマナー OJT 業務効率化 表計算ソフト オフィスソフト コンプライアンス フロントエンド Subversion PHP 関数型プログラミング Laravel モダンJS (Modern JavaScript) 基礎 Android Studio 機械学習 iOSアプリ開発 ぷプログラミング React 次世代高度IT人材 共創 IPA Raspberry Pi Xamarin スクリプト言語 GoF CUI VBA 資格 ビジネス文書 jQuery 研修参加レポート マネジメント OSPF テーブル設計 アンガーマネジメント クリティカル・シンキング PDU 経営改善 Pマーク 問題解決技法 サイバー攻撃 エンジニア 参加してみた エンゲージメントマネジメント 労働関連法 新人育成 ネットワーク構築 情報セキュリティマネジメント デザインパターン リファクタリング マルチスレッドプログラミング ベンダーコントロール Modern JavaScript 冗長化 VLAN インフラエンジニア チームビルディング テストケース リーダブルコード セキュリティ入門 ネットワーク入門 Node.js npm gulp ビルドツール Python入門 冗長化入門 インフラ実機演習 プロジェクト管理 Active Directory ネットワーク管理 コンテナ 正規化理論 Haskell 品質管理 OpenStack シンギュラリティ DBA中級 プロトコル UX 基本設計 FinTech トラブルシューティング 並列処理 見える化 PMO ロジカルコミュニケーション Deep Learning 実機演習 インデックス設計 超上流工程 BGP Excel C-CENT Selenide プライベートクラウド アセンブラ コンピュータ基礎 工数見積 CCENT 法律知識 失敗から学ぶ プロジェクト失敗事例 PDCA プログラミング入門 非エンジニア向け 4Biz DNS セルフマネジメント 片付け術 サーバーダウン サーバー タイムマネジメント GO言語 プロダクトマネジメント プロダクトマネージャ LVS ロードバランサー 負荷分散 仮想通過 犯罪心理学 情報漏えい SEカレッジ導入事例 IT研修を聞いてみた 会社規模 (100~300名) IT研修制度を聞いてみた CentOS7 開発環境構築 数学力 数字力 財務 IT人材 UI Machine Learning Go言語 (golang) データマイニング 統計学 新人教育 やり直し数学 RDB つながる工場 モチベーション WebSocket WebWorker HTML5 CSS3 Bootstrap 微分・積分 システム設計 決断力 LAMP環境 トレ担 教育研修担当者向け ルーティング Linux入門 図解術 目標設定 試験対策 インタビュー技法 Vue.js ブロックチェーン 会社規模 (~50名) DHCP 仕掛け学 BSC 財務諸表 自己分析

いちから復習したい方のための「物理設計」概論 研修コースに参加してみた

今回参加した研修コースは いちから復習したい方のための「物理設計」概論 です。

実はデータベースを含め、設計を研修で扱おうとすると、とっても難しいんです。なぜなら、各社、各プロジェクトによって設計書のフォーマットが異なるからです。なので、受講者1人1人でフォーマットが異なると、期待することが変わってしまいます。

林さんはその問題に対して工夫して、はじめに受講者にその違うことを体験してもらい、そこから共通化するところにフォーカスして、構築仕様書にどんな項目が必要なのか、解説いただきました。

担当プロジェクトが変わっても抑えるべき要点は理解している、ということに繋がるので、構築作業だけから構築仕様書などを書くフェーズにステップアップしようとするデータベースエンジニアにはとてもオススメです !!

では、どんな内容だったのかレポートします!

 

想定している受講者

  • リレーショナルデータベースとはどんなものか理解している

 

受講目標

  • データベース構築仕様書、物理設計書の作成ができる

 

今日の事前アンケートと講師紹介

SEカレッジではコース開始前に事前アンケートを入力いただき、できるだけ期待内容にできるよう講師も準備しています。

このコースでは、

いちから復習したい

とタイトルに記載していたのですが、パフォーマンス改善に関するご希望も割とあったので、その点を配慮しながら進めます。もし違っていたら、表情で示してください、という配慮されたコメントでスタートしました。

そんな柔らかなスタイルでスタートされる 林 優子さん が登壇されました。

 

データベース設計

実は人によって設計の解釈が違うので、まずは認識合わせです。

また、サンプルとして 給与テーブルの設計 を例に話を進めます。

 

  • 概念設計
    • 業務要件を把握 -> 管理する項目を洗い出す -> 紐付ける
    • 例えば、日給制、月給制なのか、基本給があって、残業は何時からなど
    • 正規化されたER図がアウトプットされる
  • 論理設計
    • ER図をもとに性能要件もここでやります
      • 性能要件をここでやるのが林さんのオススメ
    • 例えば、5000人が1年間働いて7年間データを保管する、という要件なら?
      • 「出勤/退勤だけでなく工数管理にも使うとなると?」
      • 「primary keyだけでなく索引検索も必要だなぁ」
      • 「テーブル分割しておいたほうがよいなぁ」
    • ここで非正規化したER図がアウトプットされる
  • 物理設計 // 性能要件をここでやる人もいる
    • 非正規化したER図をもとにハードウェア/ソフトウェアの性能を加味して設計する
    • 例えば、ストライピングディスクを使って、マルチCPUを使えるなら?
      • テーブル分割はパーティショニングでよいなぁ
      • 設計の方針をもとに実装方法が変わる
    • オブジェクト定義書と構築仕様書がアウトプットされる
    • SQL文 CREATE TABLECREATE INDEX も含まれる

 

このコースでは、この構築仕様書を作る、ことが主題になります。

というわけで、この2つのドキュメントにどんな項目が含まれていると良いのか、アプリケーションとインフラ、受講者が双方の立場になって考えてみます。

 

受講者が考えた項目

  • サーバー構成
  • 操作するためのツール
  • 許可するSQL (使い方など)
  • データ型
  • primary key や foreign key
  • カラムと桁数
  • 項目名と名称
  • テーブル間の関係
  • バックアップやリカバリの手順書
  • ミドルウェアの構成やバージョン
  • テーブルサイズや成長率
  • ログの場所
  • 削除タイミングなど初リサイクル
  • テーブルスペースやエクステントの定義
  • NULLが含まれるかどうか
  • 区分値

 

役割、各社、各PJによってぜんぜん違っていることに気付きますね。

 

データベース

エクステントなど色々な項目が出てきたので、改めて、データベースの構造を解説します。

 

  • 三本足の線は 1:多 の関係を表す
  • RDBMS によって呼称が異なるので、ここではデータファイルとログファイルをデータベースと呼ぶ
  • 表領域というのがテーブルを格納する論理的な場所
  • OSからみた物理的なディスクの割当は違うので、表領域を複数のセグメントで保存している
  • そのセグメントに CREATE TABLE するとどれぐらいのサイズを確保するのか
    • そのサイズのデフォルト値をエクステントという単位で決めている
    • 通常は連続した8ブロック (8KB/1ブロック)、64KBを指している
    • エクステントという単位を挟まず、ブロックだけでよくない?
      • 現にSQL Serverでは1ブロックしか確保しない
    • ブロックが点在すると、全件検索で使うシーケンシャルサーチで使いにくい
    • なので 1エクステント 連続した8ブロックを確保する
  • 昔はテーブルごとにエクステントの単位を決めていたが、いまは64KBでやっている
    • 索引検索中心なのか全件検索中心なのかでテーブル毎に単位を変える場合がある
    • 索引検索は1エクステント64KB、全件検索は1エクステント128KBなど
    • 一応ブロックサイズ (8KB) も変えられる

 

ER図をもとに構築仕様書を書いてみましょう

 

このER図をもとに演習してみましょう!!

  • テーブル
    • 注文、注文明細、顧客、商品番号のうち2つ
  • 演習内容
    • テーブル定義書を書く
    • (索引定義書を書く)

 

項目は先に挙がった項目を埋めていきましょう

 

林さんが考えた仕様書

 

  • ドキュメントは直感的に理解しやすいよう、テーブル名やカラム名も日本語で書くと良いです
  • 空白だと書き忘れたと思ってしまうので、例えば、有効桁数のセルは ‘デフォルト値’ など何かしら入力しておく
  • 有効値はあると、テストのときに楽です
  • 制約はFK、PKなどそれぞれ項目を作っておき、ありナシとかではなく数値で管理すると良いです
    • 索引もパフォーマンスを考えて 1, 2 で順番を付けられる
  • 例えば、削除フラグのようなカラムがあれば、入る値は0,1なのかなど有効値を書いておくとよいです
    • それに合わせてDFAULT値をDBで設定できるので、それがなにかも書いておくとよいでしょう
  • データ型もRDBMSによって変わるので、それも書いておくとよいでしょう
    • 年月日を扱うのか、日時を扱うのか、など

 

成長率は下のように日、月、年単位でテーブル、カラムごとに書いておくとよいでしょう

 

CRUDマトリックスも書いておくと良いです (下のような表)

  • 縦軸に処理名と横軸にテーブル
    • C: INSERT // Create
    • R: SELECT // Read
    • U: UPDATE
    • D: DELETE
  • 例えば、RとDが集中する処理がわかる
  • ディスクI/Oが発生するのでディスクを分けようか、というアプリ開発側とインフラ側がディスカッションができる

 

 

データファイルとログファイル

データファイルとログファイルをどのように管理するのか、これも構築仕様書に書くので、まず、どのようにログファイルを生成しているのか、RDBMSのアーキテクチャを振り返りました。

ただ、このアーキテクチャは林さんの他コースでも触れられていますので、割愛して、どのような点を仕様書に反映すべきなのか、仕様書とともに解説いただきました。

 

ハンズオンで学ぶデータベース障害のパターンと復旧 研修コースに参加してみた

 

  • データファイルとログファイルの構築仕様書

 

  • データファイルとログファイルの注意点
    • データファイルとログファイルはそれぞれリカバリで使う目的・タイミングが異なる
    • それぞれ別のディレクトリに、書き込みが速いディスクにはログファイルを保存するなど指示が必要
    • ログファイルが失われるとリカバリできないので、冗長化しましょう
    • データベースにその機能がある
    • ログファイルは循環的に更新すれば良いので、増分することはありません
    • RDBMSによってログファイルのファイル数は変わるので気をつけましょう

 

その他、受講者の方から挙がった項目を解説して、このコースは終了となりました。

 

まとめ

このコースでは物理設計を受講者の方が考えた項目をもとに、どのように構築仕様書で表現するのか、自身で演習したり、講師の解説で学びました。

また、なぜその項目が必要なのか、どのように書くべきなのか、アーキテクチャから振り返って順序よく解説頂いたことで、とても理解しやすいものでした。

特定プロジェクトの仕様だけを知っているだけではない汎用的なスキルや、構築を行うだけからステップアップしようとするエンジニアにはとてもオススメの内容でした !!

 

 


SEカレッジが気になった方はこちらからお気軽にお問合わせください!!

お問い合わせフォーム

SEカレッジの詳細をご覧になりたい方はこちら!!

SEカレッジ

特集・キャンペーン

よくある質問集

タグ一覧

参加してみた研修参加レポートセキュリティJava基本情報技術者Linux基礎プロジェクトマネジメントオブジェクト指向SQL基礎Pythonコミュニケーションプログラミングプログラミング基礎AIネットワークマネジメント仮想化技術テーブル設計SQL応用データベースJavaScriptソフトウェアテストファイアウォールLinux応用RDBMSIoTトレンドネットワーク入門ビジネス文書jQueryテスト自動化C# 基礎ヒューマンスキルデータサイエンスDockerコンテナ障害対応PMBOK®コーチングデータベース設計要求定義Javaプログラミング応用ER図CCNA情報処理資格資格アルゴリズムビジネスマナープレゼンテーションシェルスクリプトマルチスレッドプログラミングパケット解析インフラ実機演習エンジニアHTML/CSSOSPF単体テストJavaプログラミング基礎問題解決技法アンガーマネジメントRaspberry Piロジカルライティングデータベース基礎LAN構築新人研修SQLインジェクション経営改善UI/UXデータサイエンティストTCP/IPデザインパターンロジカルコミュニケーションPマークVLAN物理設計(データベース)リファクタリングアジャイル簿記インフラエンジニアJavaScript基礎データベースセキュリティ新人育成ITILパフォーマンスチューニング非エンジニア向けLVSロジカルシンキングネットワーク構築クラウドJavaEECentOS機械学習見える化Modern JavaScript財務UX品質管理Active Directory次世代高度IT人材サーバー構築データベース障害冗長化要件定義セキュリティ入門ZabbixWBSデータベース応用Cisco関数型プログラミング工数見積Deep Learningプログラミング入門ソフトウェアテスト基礎IT基礎業務効率化DBA中級Webアプリケーション開発内定者研修正規化理論スクラムインデックス設計サイバー攻撃教育研修担当者向け法律知識ベンダーコントロール応用情報技術者OS・システム基盤テストケースマーケティングITパスポートロードバランサープロジェクト管理インターネットルーティング応用VPNルーティング情報セキュリティマネジメントAWSGoFBGPIPアドレス統計学PMOプロジェクト失敗事例PHPC# 応用IT人材セルフマネジメントCentOS7Excelエンゲージメントマネジメント仮想通過PDCAUIOSI参照モデル決断力片付け術IT研修制度を聞いてみたインターネットルーティング基礎MVC基礎犯罪心理学IPAプロダクトマネージャMachine LearningCCENT情報漏えいクリティカル・シンキング表計算ソフトJunitプロトコルWindowsサーバー基礎ITサービスマネジメントSEカレッジ導入事例データマイニングPDU失敗から学ぶタイムマネジメントgulpフロントエンド微分・積分アセンブラ内部設計Microsoft Azureリーダブルコード会社規模 (100~300名)WebSocketプロジェクト計画会社規模 (~50名)DNS負荷分散Linux入門継続的インテグレーション (CI)GO言語ビルドツール基本設計システム設計コンピュータ基礎フレームワークOpenStack概念設計(データベース)WebWorkerネットワーク管理共創やり直し数学図解術継続的インテグレーション(CI)プロダクトマネジメントPython入門HTTPFinTechWindowsサーバー応用ビジネスインダストリソフトウェアテスト応用シンギュラリティIT資格HTML5C-CENT労働関連法リスクコントロールコンピュータ数学RDB目標設定冗長化入門LaravelトラブルシューティングLAMP環境chefサーバーダウンNode.jsテスト手法ネゴシエーション開発環境構築CSS3SelenideInfrastructure as Code業務知識/業界知識つながる工場試験対策チームビルディングモダンJS (Modern JavaScript) 基礎Go言語 (golang)並列処理インフラ監視サーバーnpm数字力BootstrapプライベートクラウドHaskellスクリプト言語モチベーション超上流工程PMP®インタビュー技法4Biz

過去の記事