今回は論理データモデル,概念データモデル,キーについて解説していきます。
論理データモデル
論理データモデルとは「データをどうやって管理するか」という手段の事です。
一般的にはリレーショナルデータベース(RDB)というものを使います。
RDBというのは,すべてを「表」でデータを管理します。
RDB以外にもデータの管理方法はキーバリューストアやオブジェクトデータベースなどというものが存在しますが,データベーススペシャリストでターゲットにしているのはRDBの事なので,勉強もRDBに絞って勉強を行えば問題ありません。
概念データモデル
概念データモデルとは?
概念データモデルとは,業務の中で発生するデータをモデル化したものです。世の中の構造をモデル化するためには,データに注目する必要があります。
モデルとは?
「モデル」という言葉がIT業界では時々出てきますが,「モデル」というのは,概念等を目で見える,表や図で表すことをモデルといいます。体系的,構造的に表現したものという言い方もできます。
オブジェクト指向言語を扱っている人にはなじみ深いと思いますがUMLなどはモデル化した結果という事になります。データベースのモデル化では主にER図というものを使い,データ構造を図に表すことがよくあります。だからモデル化するといったら,何かしら図にしたり表示したものだと思ってください。
例)ER図やUMLなど
DBの設計の流れ
DBの設計を行う場合は,データベース化する業務を注意深く観察し,あらゆるデータをまとめて,整理していく必要があります。日々,紙やエクセル等を使って処理している項目等を洗い出し,抽出していくことで,データベースの設計をすることができます。
関係データモデル
関係スキーマとは?
スキーマとは構造や枠組みの事です。データベースの世界で「関係」とは,「表」の事を指します。なので,関係スキーマとは,表の構造という意味になり,表にある属性(項目)や主キー,外部キーなどを示したもののことを指します。
例
商品という表がある場合に関係スキーマは
商品(商品番号,商品名,単価)
などと表す事ができます。商品番号のアンダーラインは主キーを表しています。主キーとは後述しますが,表の中で重複しない1行を特定するための項目です。これで表の名前,項目の名前,キーなどを表しているため,関係スキーマであるといえます。
属性とは?
データベーススペシャリストの世界では「属性」とは項目の事のを指しています。関係「商品」の属性「商品番号」「商品名」「単価」という表現になります。
商品(商品番号,商品名,単価)
属性などといわずに「項目」と表現すればいいのにと思いますが,そのような文化になっているようです。
ドメインとは?
データベーススペシャリストの世界で「ドメイン」とは取りうる値の事を指しています。
性別なら「男性」「女性」などになるし,氏名の場合は「小野信一」などあらゆる名前がとりうる名前となります。整数,文字列,日付などいろいろあります。
キー
キーには候補キー,主キー,外部キーの次の3つの種類があります。
候補キー
candidate key
- ・候補キーとは行を一意に特定できる属性の候補
- ・主キーとなりうる要素(主キーの候補)
社員表に「社員No,氏名,住所,メールアドレス」と合った場合,社員Noとメールアドレスが社員を一意に識別できるため候補キーとなる。メールアドレスは変更されたり,未取得の社員がいる場合があるのであれば主キーには適さない。基本的にはこの場合社員Noが主キーとなる
主キー
primary key
候補キーの中から1つ選んで主キーとする。
主キー制約
主キー制約には一意性制約と非ナル値制約がある。
一意性誠制約(UNIQUE制約)
- ・同じ値を持たない
- ・同じ値を登録できない
非ナル値制約(NOT NULL制約)
- ・空値にできない
- ・必ず値を登録する
外部キー
foreign key
外部キーとは他の表でキーとなっている属性の事。下記のように部門表と社員表があった場合は社員表の部門Noが外部キーとなる。
部門(部門No,部門名)
社員(社員No,社員名,部門No)
外部キーの制約
外部キーには削除制約と追加制約がある。
削除制約
削除制約とは外部キーに課す制約で主キー側の表からどこかで参照されているデータを削除できなくする。例でいえば社員表で使用されている部門Noは部門表から削除することができない。※削除できなくなるかどうかは実際にはRDBの設定による
- ・RESTRICT(リストリクト)の場合は削除できない
- ・CASCADE(カスケード)の場合は関連する
行をすべて削除する。例の場合,部門の行を削除すると部門Noの紐づく社員もすべて削除される。
- ・SETNULL(セットヌル)の場合はNULLが設定される。
追加制約
手記側の表に存在しない値を外部キー側の表に登録できない。例の場合は,部門表にない部門Noを社員表の部門Noに入れることはできない。
A01_はじめに
A02_バージョンの確認
A03_プロジェクトの作成
A04_アプリの実行
A05_サンプルプログラムの構成
A06_Razorコンポーネント
A07_Razor構文
A08_@pageでURLを指定する
A09_@rendermode
A10_PageTitle
A11_HTMLの見出し
A12_pタグ
A13_単方向データバインド
A14_単方向データバインドの詳細
A15_Bootstrap
A16_ボタンクリックイベント
A17_イベント引数の受け取り方
A18_ここまでのまとめ
B01_新しいWebページを追加する方法
B02_サイドバーから画面を表示する
B03_サイドバーのアイコンを変更する方法
B04_計測値を表示する
B05_変数に置き換える
B06_最新の値でデータを更新する
B07_@usingで通常のC#コードを呼び出す
B08_画面遷移_aタグ
B09_画面遷移_aタグの見た目をボタンにする
B10_画面遷移_NavigationManagerでの遷移
B11_画面間のパラメータの受け渡し方法
B12_EscapeDataStringでエスケープする
B13_複数のパラメータを渡す
B14_任意のパラメータにする
B15_string以外の型をパラメータで使う方法
B16_DateTime型をパラメータで渡す方法
B17_引数2個のURLも型指定に変更する
B18_パラメータ属性をつけるときの注意点
B19_OnParametersSet
B20_OnInitialized
B21_OnInitializedが2回通る問題の対応
B22_ブラウザが開いている間の値を記憶する方法
B23_値の受け渡しとしてのProtectedSessionStorage
B24_非同期を想定したUIの制御
C01_一覧表示
C02_非同期での一覧表示
C03_table-striped
D01_入力エリア
D02_双方向データバインド
D03_入力データをリアルタイムで通知する方法
D04_placeholder
D05_入力エリアの横幅の調整
D06_テキストチェンジイベントを拾う方法
D07_プルダウン
D08_プルダウンのbootstrap
D09_プルダウンの選択している値をデータバインドで操作する
D10_プルダウンにリストの値を表示する
D11_プルダウンに未選択行を入れる
D12_プルダウンの入力を禁止する
D13_プルダウンのチェンジイベントを取得する
D14_チェックボックス
D15_チェックボックスにラベルを付ける
D16_複数のチェックボックスを並べる
D17_ラジオボタン
D18_ラジオボタンのデータバインド
D19_ラジオボタンのチェンジイベント
D20_ラジオボタンにbootstrapを適応する