今回は論理データモデル,概念データモデル,キーについて解説していきます。
論理データモデル
論理データモデルとは「データをどうやって管理するか」という手段の事です。
一般的にはリレーショナルデータベース(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に入れることはできない。
#01_はじめに
#02_VisualStudio2022のインストール
#03_SQLServerのインストール
#04_データベースとテーブルの作成
#05_プロジェクトの作成
#06_接続先文字列の作成
#07_データテーブルでのデータの取得
#08_Sqlアクセスクラスの作成
#09_SqlDataReaderでのデータ取得
#10_SqlDataReaderの結果をカスタムクラスに入れる方法
#11_SqlCommandでInsert文を発行する方法
#12_SqlCommandでUpdate文を発行する方法
#13_Update対象がなかったらInsertする方法
#14_SqlCommandでDelete文を発行する方法
#15_Dapperでデータを取得する方法
#16_DapperでInsert文を発行する方法
#17_EntityFrameworkをインストールしてDbContextを作成する方法
#18_EntityFrameworkでデータを取得する方法
#19_EntityFrameworkでInsert文を発行する方法
#20_EntityFrameworkでUpdate文を発行する方法
#21_EntityFrameworkでDelete文を発行する方法
#22_Helperクラスを作ってSqlCommand操作を共通化する方法
#23_パフォーマンスチェックの方法
#24_4つのデータのとり方のパフォーマンスチェック
#25_4つの結果を踏まえて講評
#26_さいごに
下記URLは、ベネッセが提供する教育用プラットフォームにて
私が公開しているプログラミング学習コースです。
無料コースもあるので、よかったらご覧になってみてください。
【無料動画】「C#を勉強する順番」