(作成中)Udacity, Intro to Relational Databasesの受講メモ.5部構成の無料講座.

1. Data and Tables

  • Databaseは,同時に複数の人が編集可能.これが,普通のファイルと異なる点.
  • Tableは,headerとbodyからなる.headerは,table nameと,column nameと,column typeからなる.bodyは,rowsとcolumnsからなる.
  • 複数の行に跨る演算をaggregationと呼ぶ.SQLで使えるaggregationの代表的なものとして,count,avg,max,min,sumなどがある.
  • codeからdatabaseにqueryを出すと,resultを返される.resultは,原則的にTable形式.
  • Database中でデータの唯一性を担保するために,idを与えることがある.このように識別に用いられるcolumnをprimary keyと呼ぶ.
  • 複数の情報を持つオブジェクトを定義するよりは,複数のTableで管理したほうが効率的.

2. Elements of SQL

  • SQLのtypeとして,textintegerdateなどがある.textおよびdateは,'2017-08-10'のようにシングルクォートで囲む.主なSQLのtypeは以下.
  • Text and string types
    • text:長さに制限のない文字列.Pythonのstrに相当.
    • char(n):長さがnの文字列.
    • varchar(n):長さが最大nの文字列.
  • Numeric types
    • integer:整数型.Pythonのintに相当.
    • real:浮動小数点型.Pythonのfloatに相当.精度は小数第6位.
    • double precision:倍精度小数点.精度は小数第15位.
    • decimal:正確な小数型(?).
  • Date and time types
    • date:日付型.年,月,日.
    • time:時刻型.
    • timestampdateおよびtime
  • 基本構文:select columns from tables where condition;
  • 出力数に制限を設けるとき:limit count [offset skip]
  • 並び替えるとき:order by columns [desc]
  • 結果をまとめるとき:group by columns
    • 例えば,同じ名前の動物の数を数えるとき:select name, count(*) as num from animals group by name;
  • Pythonでも同様のことはできる.違いはスピードとメモリ.Databaseは格段に高速に,かつメモリ消費を抑えて実行できる.
  • 新たに要素を追加するとき:insert into table values ( val1, val2, … );
  • ただし,特定の列を指定して追加するときは:insert into table(column1, column2, …) values ( val1, val2, … );
  • Databaseを結合するとき:T join S on T.color = S.paint
    • 例えば,fishを食べる動物の名前を抽出したとき:select name from animals join diet on animals.species=diet.species where food='fish';
  • wheregroup byの前に適用されるが,havinggroup byの後に適用される.
  • Lesson 3に向けて,VirtualBoxVagrantで環境を構築.Vagrantってこんな便利だったのか.
    • 仮想環境構築:$ vagrant up
    • ログイン:$ vagrant ssh
    • ファイル共有は/vagrantディレクトリ.
    • PostgreSQLの起動:$ psql
    • ログアウト:$ exitあるいはCtrl-D
  • VagrantとDockerの違いについては,以下が参考になった.

3. Python DB-API

  • PythonからDatabaseを叩く際,DB-APIを用いる.DB-APIはPythonの組み込みモジュール.Databaseに応じて,DB-APIモジュールは異なる:SQLiteはsqlite3,PostgreSQLはpsycopg2,ODBCはpyodbc,MySQLはmysql.connectorなど.
  • 例えば,次のようなPythonコードを書く.
  • Databaseにおける追加や削除を行った後は,必ずConnection.commit()する.
  • PostgreSQLを使って,簡易なForumサイトを作成する.実験環境を確認.
    • $ vagrant upで仮想環境を立ち上げ.
    • $ vagrant sshで仮想環境にログイン.
    • $ cd /vagrant/forumで当該ディレクトリに移動.
    • $ python form.pyでForumサーバを起動.ブラウザでhttp://localhost:8000にアクセス.適当にMessageを投稿してみる.
    • Ctrl+C$ python form.pyで再起動すると,先ほど投稿したMessageが消えていることがわかる.以降では,Messageを保存する機能をPostgreSQLで実装する.

4. Deeper into SQL

5. Tournament Database