UoPeopleでDatabases(DB設計・SQL)のコースを修了した。
オンライン大学 University of the People でDatabases (CS2203) を修了したのでその感想を書きます。
これまでのUoPeople関連の記事はこちら:
UoPeople カテゴリーの記事一覧 - えんぴつぶろぐ
はじめに
このコースはDatabasesについて、DBMSの種類や基本的な用語の定義から始まり、情報モデルについての概念をおさえつつRDBMSの設計プロセスを実践を通して学ぶコースです。
SQLについてもANSI/ISOの規格に基づいて、基礎的な部分は網羅的に触れます。
今期は3コース同時受講(統計学、Java、Databases)していましたが、このコースが一番楽しかった気がするし実務ですぐ役立ちそうです。
ちなみにコースを始める前の自分のレベルは
- ORMなら使ったことある
- 簡単なSQLなら覚えてる
- 正規化はなんとなく知ってる
みたいな感じです。
今期のDatabases1のコース、課題は多めだけど、基本的な用語の定義や抽象的な概念、論理モデルの設計プロセスまで演習を通しながら丁寧に学べてかなり楽しい。
— えんぴつ (@empitsu88) 2021年4月19日
おめーよく今までこのへんゆるふわのままアプリケーション開発してたな?って思い知ってます😇#CS2203
学習内容
- DBMSの種類
- DBにまつわる様々な職種
- 3層のデータモデル
- 概念モデル/論理モデル/物理モデル
- 各種用語の定義と使いわけ
- Entity set/Relation/Table
- Entity/Tuple/Row
- Attribute/Column
- Relationship set/Primary key/Foreign key
- Relation degree
- Relationship cardinality
- 各種制約
- Entity integrity constraint
- Referential integrity constraint
- Semantic integrity constraint
- Domain constraint
- Null constraint
- Unique constraint
- ER図
- 正規化
- 関数従属
- Closure Set
- SQL
- DCL
- DML
- DCL
- 各種データ型
- Aggregate function
- Nested Selects
- Sub Queries
- Unions
- アプリケーション・DB設計プロセス
- トランザクション
- アプリケーションとの結合
概念モデルと、論理モデル、具体的に何がどう違うのかふわっとしか知らなかったけどようやく理解した#CS2203
— えんぴつ (@empitsu88) 2021年4月24日
DB正規化で出てくる関数従属性のアームストロングの規則とかいうやつ、完全に数学の集合の話じゃん…😇
— えんぴつ (@empitsu88) 2021年4月24日
これって数学の二項関係で出てくる反射律とか推移律とかと似た話…?(何もわかってない)#CS2203
Databaseのコースの動画でSequelって単語が頻繁に自動生成の字幕に出てくるので
— えんぴつ (@empitsu88) 2021年4月8日
「なにこれ??続編…??」
って思ってたが、「SQL」だった…#CS2203
課題について
Programming Assignmentがほぼ毎週(Graded Quizある週以外)出るので課題の量は結構多いと思います。
Learning JournalでもUnitの振り返りに加えて演習やSQL課題が出ます。
内容としては
概念モデルの作成、
要件定義、
ER図の作成、
正規化の実施、
実際のDatabaseの構築、
SQL演習
などです。
序盤の設計では、Attributeの名前や型をどうするかなど迷うかもしれませんが、 事前にある程度の採点基準が提示されるのでそれに従っていれば細かい所まで気にしなくても大丈夫でした。
環境構築について
ご覧の通り、後半のUnitから実際にSQLを書く課題が出てくるので、なにかしらのDBの環境構築が必要です。
ただコースからはあんまり親切な案内は提示されないです。(MySQL Workbenchなどへのリンクが貼られているのみ)
また、最終週はSQL ServerまたはOpenOffice Baseの構築が必要だったので、Macの自分はDocker for Macを使ってSQL Serverを使えようにしました。
このあたりの記事が参考になります。
How to Install SQL Server on a Mac | Database.Guide
が、自分のMacbook Air M1では上記で紹介されているMicrosoft SQL Server が起動せず、
M1対応のDocker for Mac + Rosetta + --platform
optionを使ってもだめだったので
以下で紹介されているAzure SQL Edge というimageを使ったらうまくいきました。
今週の課題、SQL Serverを使わなきゃいけないっぽいのだがMacだとDockerを入れるところから始めないといけないのかぁ…😇#UoPeople #CS2203
— えんぴつ (@empitsu88) 2021年5月29日
Databasesのコース、今週からSQLの実践に入るのだが使うのがMySQLでもPostgreSQLでもOracleでもなく、HyperSQLとかいうやつでなにそれってなってる#CS2203 #UoPeople
— えんぴつ (@empitsu88) 2021年5月1日
Discussion Assignment
Discussion課題は
このDatabaseの設計にはどういう問題がありますか、
この設計プロセスで気をつけることはなんですか、
正規化のProps/Consはなんですか、
このSQLはどうやって使い分けますか、
みたいな感じでした。
Unit1から例として実際のDatabaseを構築してER図を提示したりする猛者がいました…が、そんなことをしなくても普通に高得点はもらえるかと思います。
今週のdatabasesの課題、殆どの学生がSQLのスクショだけ貼って提出してる中、設計の問題点やsemantic整合性制約の実装の難しさにも言及し1000wordsも書いてるワイどう見てもやりすぎじゃん。
— えんぴつ (@empitsu88) 2021年5月12日
10点と言わず200点くらいください。#CS2203 #UoPeople
役立ったもの
IntelliJ IDEA
UoPeopleをやっている人はJetBrains Student Pack(学生向け無料ライセンス)が使えます!!
この学生向けライセンスを申請すると、IntelliJ IDEA UltimateやWebStrom、PyCharmなどがダウンロードできます。
ただし、教育・学習目的にしか使えないライセンスになっており仕事などには使えないので注意してください。
JetBrains Student Pack(学生・教職員向け無料ライセンス)と申し込み方法 | JetBrains Blog
私はIntelliJ IDEAでUoPeopleのJavaやDatabasesのコースを進めていました。
IntelliJ IDEA UltimateならDatabaseの閲覧・操作に便利なプラグインがビルトインされています。
Database tools and SQL | IntelliJ IDEA
ER図作成に便利なデータベーススキーマ機能があるCacoo
IntelliJ IDEAのDatabase Toolでも Diagrams > Show Visualization...
でDatabaseからER図が自動生成できるのですが、鳥の足記法ではありません。
「鳥の足記法でER図を作成しろ」という課題があったので、その際はIntelliJからスキーマをCSVでエクスポートし Cacooにインポートして生成していました。
データベース設計図 | テンプレート | オンライン作図ツール Cacoo(カクー)
ただ、なぜかインポート時にエラーが発生しrelationshipの部分が期待通りにインポートできなかったため欠けた部分はCacoo上で書き足していました…。
オンライン作図ツールdraw.io
また、https://draw.io というオンラインツールでもER図が作成できました。
こちらはインストラクターも紹介していました。
Flowchart Maker & Online Diagram Software
達人に学ぶDB設計 徹底指南書
参考書としては「達人に学ぶDB設計 徹底指南書」が役立ちました。 DB設計の基礎や正規化について例を出しながら丁寧に解説しており、今回のコースではUnit1〜3くらいまでの内容にベストマッチしています。
書籍の後半はパフォーマンスについてやバッドノウハウ・グレーノウハウの具体例が主ですが、このあたりの内容もDiscussion Assignmentで自分の考えを補強する時に役立ちました。
Graded QuizとFinal exam
Graded QuizはSelf Quizの内容 + アルファって感じでした。
Final ExamもSelf Quiz / Review Quizにない問題が多く、ふわっとした問が多くて答えに迷うことが多かったような…。
成績
インストラクターがめっちゃ厳しい人でLJでなかなか満点をとれなかったり、 ピアからつけられた微妙な点数(全問正解しているのに85/90点みたいな)に対してGrade Appealしても受け付けてくれなかったりでちょっとモヤりましたがA-で着地しそうです。
学習時間
学習時間は8〜15時間/週くらいでした。
Discussion Assignmentで例を提示すべくDatabaseを作成したりと割と頑張ってしまったので、もう少し効率よく進められた気がします。
これまでに受講したコース
ということで以下のコースが修了できました!
- ENGL0101 English Composition 1
- UNIV1001 Online Education Strategies
- CS1101 Programming Fundamentals
- CS1102 Programming1
- MATH1201 College Algebra
- MATH1302 Discrete Mathematics
- MATH1280 Introduction to Statistics ←今期取れたやつ
- CS1103 Programming2 ←今期取れたやつ
- CS2203 Databases ←今期取れたやつ
+前の大学から単位移行したコース