一般的なテーブルの論理設計(データモデリング)のことクラウドでDBのPaaSを使うと「これでDB作れたのか?」「勝手にスケールできちゃう!」「勝手にインデックス張ってくれる?!」になってます。今のところテーブルの論理設計はエンジニアがやらないとできないので、まとめておきたい。(mBaaSやら、自然言語からSQLを作るサービスもあるので、そのうちテーブル設計もエンジニアがやらなくなりそうですが...)テーブル設計について一通り盛り込まれていて、簡潔にまとまってる記事を見つけたので拝借。Qiitaこの記事の内容で気になる点がいくつかあったのでメモしておきます。自然キーを使うべき?業務が変わるとキーが変わる可能性もある(殆どないですが...)ので代理キーを使うべき。考え方もあり、私は代理キー派です。Djangoを普通に使うと代理キーです。正規化は第三正規形まででOK?非正規化すると検索し易くなり(その検索処理だけコードが簡単になったり、レスポンスが良くなったりし)ます。逆に、正規化するほど業務の実態に近づきます。業務の実態に近いということは、仕様が変わってもテーブルの変更も対応し易い(正しくテーブル設計できていれば、テーブルには手が入らない。変更はなくテーブルの追加だけで対応できる。非正規化した項目は、画面の仕様が変わると、全く役に立たないゴミデータになる可能性があります。後々のことを考えると、できるだけ正規化しておきたいです。物理設計の内容クラウドサービスを使うとあまり意識しなくて良くなってきてます。理解しておいた方が良いですが、優先度を下げて考えても良いのかと思います。先述の記事でテーブル設計について一通りまとまっていますが、難しい単語があって頭に入りにくい部分もあります。Qiitaこの記事も気になる点をメモ。主キーをidにするとSQLでjoinした際に混乱するからentity名_idとするべき?Djangoでは主キーを定義しないと、自動的にidという主キーを作ってくれます。DjangoのORMだけ使用する場合、この記事の指摘は気にしなくて大丈夫ですが、Djangoでも生SQLを書くことができます。しておいた方が無難でしょう。中間テーブルについて中間テーブルが「多:多の関係を解消するために、業務要件にないけど人工的につくるテーブル」として説明されています。確かに多:多を解消しますが、業務分析が不充分であるとも言えます。この記事の例で言うと、学生は新学期が始まる際に新しい講義を選択し、受講期間を申し込むイベントがあるはずです。例にある中間テーブルに日付(受講期間)を追加したものが、このイベントのテーブルとして定義されるべきです。上記の中間テーブルをイベントのエンティティに落とし込む点に重点をおき、分かり易く業務分析/データモデリング(≒論理設計)する手順を説明したスライドを見つけました。イミュータブルデータモデル(入門編)このスライドを作成した方のベースにはT字型ERがあるようです。私も以前この本を読みました。言葉が難しいですが、テーブル設計が楽に出来るようになります。余裕があれば読んでみてはいかがでしょうか。複合ユニークキーにする。複合ユニーク制約をつける方法ORMでテーブルを結合検索したい場合、modelのFieldにForeignKeyの指定が必要ForeignKeyを張ると面倒な場面があるので、以前は物理設計時にForeignKey制約を外したこともありましたが、外さない方が良いです。あったので参考にしてみて下さい。指定することで、ForeignKey制約なしにするのは可能ではあります。10年ぐらいこれしか使ってないので、他のおすすめが分からない。無償きっと他にも良いところがあるはず。DjangoPythonで作られたフルスタック・フレームワーク。フルスタック・フレームワークを使ったことがない方は、Djangoに限らずですが一度使ってみて下さい。以下、Djangoの特徴について。MVC(MTV)いわゆるMVCフレームワークですが、Djangoでは以下のような対応になっていて紛らわしい。DBのテーブル(データじゃない)を作成・変更・削除したり、逆に既存のテーブルからmodelsを作成したりできます。(失敗してハマることはありますが...)AdminサイトDBとテーブルを作ればテーブルのデータをメンテナンスできる管理画面を、ほとんど自動的に作成でき、カスタマイズもできます。用途は、マスタメンテ画面として使用したり、プロトタイプとしても使えると思います。カスタマイズを上手くできるようになれば、簡単にプロトタイプをつくれるようになりそうです。ある通り、はじめから認証機能があります。固有アプリ用の画面(template)に変えるだけで充分使えます。Djangoでシングルサインオンできる外部PKGもあります。通常のMVCフレームワークのルーター(クライアントからのリクエストを最初に振り分けるとこ)がURLディスパッチャ(urls.py)と言う名前なのですが、リクエストURLが正規表現にマッチしたら振り分ける仕組みになってます。ここ以外は直観的に作れる感じなのですが、正規表現をスラスラかける人なんているのかしら?と思ってしまいます。説明した記事があります。聞いたことない単語が出てくるし、直訳っぽいので読みにくいですが、考えこまずにひとまず読んでみてください。読むと、自分がJavaをやっていたせいもあるかもしれませんが、とても理解し易いです。解り易いので、これでおしまい。01:30DjangoについてTweet広告を非表示にするもっと読むコメントを書く2017-07-18PythonについてPythonPythonのことは検索すれば色々あるので気が済むまで調べていただきたいですが、私が感じてる特徴をザックリ書くとこんな感じ。動的データ型ブロックをインデントで表現(カッコを使わない)ので見た目スッキリなんか書き易い(見易い?3.のおかげか?)標準ライブラリ&サードパーティーモジュール(パッケージ)が豊富しっかりお勉強しなくても、ネットで検索すればある程度動くものは作れます。真面目に勉強しようかと思い、これを読みかけてます。読むと、心なしか自分のコードがカッコ良くなった気がします。個人的には、5.が一番気に入っていて、いわゆる車輪の再発名をしなくて良いです。「Pythonはデータ分析や、機械学習に向いている。」と言われていますが、多分5.のおかげが大きいのではないでしょうか。Python(特に5.)の特徴を生かすために気を付けておいた方が良い点、その他の注意点を書きます。英語Pythonの情報は英語の記事の方が圧倒的に豊富です。日本ではRubyが人気でPythonを使う人が少なかったからだと思いますが、日本語の記事だけ見てPythonのことを調べても、結局英語の記事を読む羽目になります。Pythonだけではないですが、Pythonの場合は特に英語に慣れるべきです。相変わらず英語はダメですが、機械翻訳した日本語に慣れてきました。そのせいか、先述したオライリーの直訳っぽい日本語もスラスラ読めます。豊富なサードパーティーモジュール(パッケージ)群を管理するために、pipというものを使います。他にも色々あるみたいですが、まずはpipです。分かり易く説明してくれてます。こちらのサイトは、pipだけでなくPython全般のことを初心者(かつWindowsユーザー)にとても親切に説明してくれてます。使えるようにしましょう。参考にされると良いでしょう。仮想環境Pythonを始めた頃、勉強に使った色々なサイトに「仮想環境を作成しよう」と当然のように書いてあって「なんで?」と思いました。これも「パッケージを使い分けるのに便利だから」だと思います。仮想環境を使用すると、PythonインストールディレクトリとPythonパッケージディレクトリを簡単に作成/切り替えできます。開発するアプリ毎に使用するPython(のバージョン)とパッケージをそれぞれ管理できるのです。アプリAでは、Python2.7でDjango1.11を使用したい。アプリBでは、Python3.6でbottle0.12を使用したい。場合でも、アプリAはPython2.7の仮想環境を参照し、アプリBはPython3.6の仮想環境を参照することが簡単にできるようになります。いうことで、仮想環境を使った方が便利です。際にcondaを使ってやってます。当然ですが従わなくても動きます。新しいプログラム言語を始める際は、その言語の規約には目を通しておくべき。Javaの規約で書かれたPythonプラグラムを見たことがありますが、とても見にくかった...。規約を守ってるかをチェックしたり、自動的に修正するツールもあります。Qiita使ってなかったので参考にしよう。日本語(データ)の扱い日本語データの取り扱いでハマることが何度かありました。3系では問題ないようですが、私がちゃんと使ったのは2系なのでその際の注意点を。使われる難しい方の漢字とかは標準モジュールでは変換できません。いう拡張パッケージで変換できるのですが、これを発見するのとWindowsへのインストールに苦労しました。Center人って嫌な記憶はなかったことになる仕組みになってるらしいので記憶があやふやで...。3.x系とか、仮想環境が○○とか、Pythonコミュニティ標準かAnacondaかとか...、いきなり迷う方もいると思います。手軽に環境を作ってみて、解ってきたら後で最適な形に変更することにしましょう。Anacondaを使うことをお勧めします。Anacondaが便利か?とかは一旦置いといてインストールしましょう。Qiitaが分かり易く、OSも3パターン(win/mac/Linux)対応で親切、コメントで「なぜAnacondaが便利か?」にも触れてる方がいて至れり尽くせりです。私も参考にさせていただきました。次はDjangoをインストールとなるところですが、上のPython環境の記事を最後まで読んだ方は、既にDjangoをインストールしています。読み飛ばした人は、もう一度最後まで読みましょう。はい、Python/Djangoの環境が出来ました。エディタ結局は、使い慣れたのを使うのが一番効率が良いと思います。感じたことを書いておくと、開発PCのスペックがそれなりならIDEが良いです。Pythonの特徴の一つに豊富なライブラリ群があり、これらを積極的に使用することで生産性が上がりますが、サードパーティのライブラリには最低限の説明しかないものが多々あります。Python使ってるんだからソース読んでね。常識なのかソースを読まないと使えない場合があります。そんな時、IDEのデバック機能を使った方が効率的にソースが読めます。最近は、エディタでもデバック機能を拡張できるのがあるので、エディタの場合でも、デバックできるものをお勧めします。PyDevPCスペックまあまあで、OSがWinで、Python以外もやるし、無償だし、使い慣れてて学習コストがかからないいので、私はおもにEclipse使ってます。超ザックリ説明すると、PleiadesでUltimateかPythonを選んでEclipseをインストール。Pythonはcondaで作った仮想環境を参照するよう設定。説明してる情報はあるのでググって頂きたい。Ltd.みたいな設定です。PyCharmPythonはじめた頃にググったら、みなさんこれを勧めてました。有償だしPython以外に使えるか不明だったので使ってないです。Python拡張PCスペックがイマイチの時にこれを使ってました。動作が軽いし、機能も充分で、感心した記憶があります。環境設定の情報はたくさんあるのでググって下さい。Python簡単なWebアプリはサクッと作れるようにしておきたい。書きたいことを並べてみて、内容を書きながら後々改善する。(予定)目標記述レベル何かしらWebアプリ開発経験があって、MVCフレームワークやO/Rマッパーはなんとなく知ってます。Python/Djangoやったことありません。人に、「これ読んでみて。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。