プロダクトデザイナーも知っておくと便利かもしれない【リレーショナルデータベース編】
体調を崩して勉強や仕事から遠ざかっており、まだまだ波はありますが少しずつ良くなってきたので今回は自分が学んだデータベースについての記事を書くことにしました。
大学でデータベースを学ぶようになってから、これはプロダクトデザイナーとしても知っておいて良かったなと思ったのと、自分の学んだことの記録としても残しておきたかったので、この記事を書いています。バックエンドとしての知識や経験はまだまだなのでもし間違えてたら教えてくださると嬉しいです。
データベースの重要性
データを介さないアプリは存在しないのではといわれるほど私たちの生活では毎日データのやり取りが発生しています。ログインをする、お金を振り込む、カレンダーを設定する、メールを送る、全ての作業にはデータがあって成り立っています。そんなプロダクトをデザインするにあたってデータがどうやって保持され、呼び出されているのか知っておくと今までよりも解像度がぐっと上がるかもしれません。
データベースといっても様々な構造のデータベースが存在します。リレーショナルデータベース、XMLデータベース、キー・バリュー型等です。全てを説明してしまうと長くなってしまうので今回は最も広く使用されているリレーショナルデータベースについて説明していきます。
リレーショナルデータベースとは
リレーショナルデータベース(RDBMS)とはデータがテーブルという表でできた二次元構成になっており、テーブル間の関係は共通(リレーション)の値によって確立されます。簡単に言うとエクセルやスプレッドシートのような表をイメージしてもらうと早いかもしれません。
例えば顧客のテーブルがあるとする場合、以下のような表になります。
Entity (実体)
このテーブルが顧客(Customer)と言うエンティティであることを意味します。
Attributes(属性)
このテーブルがどのようなデータを保持するのかAttributes(属性)を決めます。この顧客テーブルではid, firstname, lastnameのデータを保持します。
Record(レコード)
これは特定の顧客のデータを含む行全体を指します。上記の画像ではidが0に該当するfirstnameはSheela, lastnameはBegumを指しています。
Field(フィールド)
フィールドはレコードの各値、一つ一つの要素になります。
Column(カラム)
カラムは列に相当します。
RDBMSで重要な役目を果たす各Key
テーブルの構成がわかったところで、これが他のテーブルとどうやって関係を持つのか疑問になってくると思います。そこで重要になってくるのがPrimary Key(主キー)やForeign Key(外部キー)の存在になります。
Primary Key (主キー)
主キーとは、テーブルにおいて必ず存在する一つのユニークなキーを意味します。その主キーを指定することで該当のレコードを抽出できるため、必ずユニークでなければいけません。こうすることで同じ名前の顧客が存在してもidが違うため別の人として認識することができます。上記の顧客テーブルにもidというのが存在し、このテーブルの主キーに当たります。
Foreign Key (外部キー)
リレーショナル・データベースでテーブル間のリレーションを構築する際には、外部キーと呼ばれる別のキーも必要となってきます。テーブルの外部キーとは、別のテーブルの主キーのことで、2つのテーブル間のリレーションを確立するために使用します。
例えば以下のような二つのテーブルがあるとします。
上記画像のArticle Tableは記事のデータを管理するテーブルになります。記事のタイトル、公開日、著者の名前が属性として存在しています。
一方、Author Tableは著者の情報をまとめているテーブルになり、著者の名前、電話番号、メールアドレスが属性として存在しています。
ここで仮に記事を管理するArticleテーブルで著者名が間違っていた場合、Authorテーブルのデータには存在しない著者がいることになってしまい、データの整合性を取ることができません。
それを解決するためにAuthorテーブルで主キーを設定し、そのidを外部キーとしてArticleテーブルで管理することにより、データの整合性を取ることが可能になります。
上記の画像ではAuthor IDをAuthorテーブルのIDを取得して外部キーとして設定しています。これでもし著者の名前が更新されても外部キーを使用してAuthorテーブルを確認すればいいのでデータの整合性を取ることができます。
このように様々なテーブルを主キーと外部キーを使用して連携させることにより、リレーショナルデータベースが確立されます。
次の記事ではこのデータテーブルを呼び出してデータを取得するクエリについて書きたいと思います。
この記事が気に入ったらサポートをしてみませんか?