診療放射線技師がPythonをはじめました。診療放射線技師がPythonをはじめました。診療放射線技師のPython日記。解析等で使えるコードを作成、アップしていきたいと思っています。ACCESSで勤務管理1tensorflowのセットアップが終わり、いざ深層学習に入っていこうかと思っていたのですが、なかなか重い腰を上げることができずに違うことをやっていました。それが、今回の題名であるACCESS。microsoft社、officeのデータベースソフトです。私が働く放射線科では以前、電子カルテにFilemalerのサーバー版を使用して日々の日常点検や、機器管理に使用していたのですが数年前電子カルテシステムのリニューアルに伴いそのソフトも消えてしまいました。電子カルテシステムを入れてある端末にはofficeのソフトが入っていることが多いと思われます。ACCESSもインストールされていることがほとんどだと思います。ACCESSを使える事は様々なデータ管理をしていくうえで非常に有効なことだと思います。ACCESSはExcelの様に簡単には使えません。ある程度使えるようになるには時間と努力が必要です。自分が異動する事や、退職することを考えて作成するファイルはできるだけExcelを使用してきたのですが、久しぶりにACCESSを使ってみることにしました。そこで当直や、日勤の勤務管理をするデータベースを作成していました。当直、日勤は基本的に順番を決めて割り振っていく単純作業です。休日や、祭日の日勤、当直では代休が発生するので、きちんと代休発生日と、その代休の消化を管理できるデータベースを作成しました。実はこの仕事、自分の仕事ではないのですが担当の人がやっているのをみて非常に大変そうだったので、出しゃばってデータベースソフトを作成してみました。使ってもらおうとは思っていません。(ただ、使ってもらえたらうれしいですが。)ということで、今回の作成したファイルは夜勤や、休日診療をやっている病院ならば役に立つだろうということで、その作成過程を記事にしていこうと思います。テーブル私は以前(20年近く前・・・)、Filemakerを使ってデータベースを作成したのですが、ACCESSに切り替えた頃は正直苦労しました。聞いたことがない言葉がいろいろと出てきて、それを理解するのに苦労しました。そこで、まずはACCESSでデータベースを作成していく上での基本的な構造を紹介したいと思います。基礎となるところとして、テーブルというものがあります。テーブルとは、データベースを構築していく上での最小グループです。テーブルの中にはフィールドがあり、それはテーブルを構成する最小単位となります。「技師」というテーブルを作成した場合、技師IDと技師名のデータをテーブルに持たせたとします。その場合「技師ID」、「技師名」はフィールドとなります。フィールドを設定する際には、データの型を指定する必要があります。この型というものをしっかりと定義しておかないと後でデータを検索する際に型が合わずに検索できないといった問題にあたることがありますのでデータがどんな値を持つのか考えて型を設定する必要があります。クエリテーブルができたところで、単体のテーブルだけではあまり役に立ちません。そこで、テーブル同士を繋ぎ合わせてデータを表示する方法があります。それがクエリになります。クエリは、2つのテーブルで同じデータを元にデータを表示していくことになります。日当直の順番を登録したテーブルがあるとします。そのテーブルが以下です。日当直順のテーブル日当直の順番は当直IDの順番となります。1番目が技師IDが19番の人になります。同様に2番目の人は技師IDが22番目の人となります。技師IDだけでは名前が分かりませんね。技師IDは以下の技師テーブルに登録されています。これら2つのテーブルをつないで見やすくするのがクエリです。当直順のテーブルの技師IDと同じ、技師テーブルの技師IDのデータを連結して表示しています。ここで何故当直順のテーブルに名前で登録しないのかと疑問に思う方がいると思います。今回のデータベースはデータ数が少ないので問題にはなりませんが、データ数が数十万データ、数百万データといった大きなデータベースとなってくると非常にファイルサイズが大きくなってしまいます。文字コードがUTF-8の場合、半角英数は1バイト、全角日本語は3~8バイトとサイズが変わってきます、なので漢字4文字の人は最低でも12バイトのデータ量を使いますが、数字2桁で表せば2バイトでよく、約1/6のデータ量で済むことになります。このことを正規化と言います。リレーションシップ先ほどクエリを紹介しましたが、次はリレーションシップです。クエリで技師IDを介して他のデータを参照しましたが、それをリレーションシップと言います。ACCESSでは先にリレーションシップを定義しておくこともできます。私は簡単なデータベースしか組まないのですが、先にリレーションシップを組まず、クエリを作成するときにリレーションを指定する方法を用いています。リレーションシップはどっちのテーブルからどっちのテーブルを参照するかといった設定も必要になります。先ほどの例では、当直順のテーブルから技師の名前を参照することになります。これに関しては、慣れていくしかありません。実際にクエリやリレーションシップを組んで試していった方が勉強になりますので是非ともチャレンジしてみてください。最後に今回は、ACCESSのさわりの部分を説明しました。初めのうちは、テーブルの構造や、クエリといったものの理解ができずに困ることがいいのですが、次回から実際にファイルの作成を行っていきますおつかれさまでした。クエリ診療放射線技師がPythonをはじめました。