【ソーシャルワークのFileMakerカスタムアプリ入門12】1画面システムを使うと分かること ~テーブルとリレーション~
はじめに
今回から、1画面システムを使いながら、次の複数画面システムに向けて準備をしていきます。
この記事では、架空ケースのレコードを作成していきますが、先にある16個のレコードは必要ないので、すべて削除します。
画面上部の[レコード]メニューから、[全レコード削除]を選択します。
「16個のレコードをすべて削除しますか?」という確認ダイアログが表示されるので、[すべてを削除]をクリックします。
レコードがすべて削除されて、レコード数が「0」になりました。
さて、空のデータベースファイルになりました。ここから始めていきます。
架空事例の入力
今朝は雲一つない気持ちのいい空です。いつもより少し早く職場に着いたあなたは、今日は会議やカンファレンスがないので、作ったばかりでの1画面システムを今日から使うぞ、と気持ちを向けます。
ケース記録をめくりながら、どれを入力していこうか考えていると、デスクの電話が鳴りました。
「Aさん、居た!ちょっと早いけどいい?今救急で、一人暮らしの男性が運ばれて来たの。訪問診療は入っていて、ケアマネさんもいるっぽい。保険証を持ってきてないって。来てくれる!?」と仲の良い看護師Yの声。
「相変わらず、声がでかいな…」と思わず笑いが出てしまう。メモ帳を手に取り、あなたは救急外来に向かいました。
看護師Yから基本情報と来院状況を確認します。
Cさん、62歳、男性、2千円の所持金あり
路上で動けなくなっているところを通行人が救急要請した
腹痛を訴えているが、名前は言えるし会話は可能
膵臓がん末期で、◯◯在宅クリニックの訪問診療を受けている
保険証は自宅にある様子
患者は画像検査に行っており、戻ってきてから面接はおそらく可能。このまま入院の方向、とのこと。
「そうだな、早速このケースから1画面システムに入れてみるか」そう思ったあなたは執務室に戻り、画面に開かれた1画面システムに入力を始めました。
実際の支援場面風にしてみました。さて、このケースの情報を入力すると、どのようになるでしょうか?
[新規レコード作成]ボタンをクリックします。
「開始日」からデータを入力していきます。
「開始日」:本日の日付
「SW」:A
「患者氏名」:C
「性別」:男
「生年月日」:1962/1/1
「年齢」:62(自動計算)
「住所」:◯◯市◯◯1-1-1(免許証より)
「連絡先」:空欄
「連絡先TEL」:空欄
「関係機関」:◯◯在宅クリニック
「関係機関TEL」:◯◯-◯◯◯◯-◯◯◯◯
「介護保険」:要介護2
「紹介経路」:看護師
「相談内容」:Cさん、62歳、男性、2千円の所持金あり。路上で動けなくなっているところを通行人が救急要請。腹痛を訴えているが、名前は言える、会話は可能。膵臓がん末期で、◯◯在宅クリニックの訪問診療を受けている。保険証は自宅にある様子。
暫くして、看護師Yから「医師から訪問診療先に連絡中」「面接可能」との連絡が入りました。あなたは救急外来に向かいます。
自己紹介をして話しができるかを伺うと、「点滴で痛みは落ち着いてきました。どうぞ。」という事で、以下の内容を伺う事ができました。
膵臓がんの診断は、◯◯大学病院
治療しても長くないって言われたから、治療はしないで家に帰った
余命は半年以内と聞いている
仕事はしておらず、健康保険は国保
ケアマネは◯◯さん、事業所名は◯◯◯◯居宅介護支援事業所
要介護2
訪問の先生は、◯◯在宅クリニック
訪問看護は、◯◯◯◯訪問看護ステーション
妻は早くに亡くして、妹と長女と長男が近くに住んでいる
キーパーソンは長女
妹は、普段の世話をいろいろしてくれる
出来るだけ自宅(持ち家)で過ごしたい
家の中に手すりを付けようとケアマネさんに相談していた
ソーシャルワーカーからキーパーソン・ケアマネに連絡して入院を伝え、家族に保険証や必要なものを持ってきてもらうよう依頼することについて、また今後の生活復帰に向けて支援させていただきたいこと、近くまた面接を持ちたい旨について了承を得ました。
面接を終えてナースステーションに行くと、担当医から「訪問診療医と連絡がつき、余命は半年以内と本人は聞いているが、訪問医はあと3ヶ月以内と見込んでいる。ホスピスの提示も考えている。」とのこと。
さて、ここまでの情報を1画面システムに入力しましょう。入力の前に、レイアウト設定を一つ修正しておく必要があります。下図の赤枠の部分ですが、現在の設定では[Return]や[Enter]キーを押すと改行せず次のフィールドにカーソルが移ってしまいます。なので、そうならないように修正します。いったん、レイアウトモードにします。
改行区切りの入力が必要となる「連絡先」「連絡先TEL」「関係機関」「関係機関TEL」フィールドを選択します。データベースアイコンのタブの下、「動作」>「次のオブジェクトへの移動に使用するキー」のところで、[Return]と[Enter]にチェックが入っているので、これを外します。
この設定は、改行するテキストを入力する可能性のあるフィールドで同様に行う必要があります。「相談内容」「病歴_経過」「家族状況_生活状況」「開始時の状況」「アセスメント_プラン」「経過記録」「終了時の状況」が該当するので、これらを選択し、同じように設定してください。
さて、入力して以下のようになりました。
「連絡先」「連絡先TEL」と「関係機関」「関係機関TEL」の部分にカーソルを入れるとこんな感じです。
実際に入力してみると、上記のように狭いフィールドや、足りないフィールドがあった事に気付かれたと思います。
連絡先:3つ以上入らない
(入れても隠れる)連絡先TEL:3つ以上入らない
(入れても隠れる)関係機関:3つ以上入らない
(入れても隠れる)関係機関連絡先:3つ以上入らない
(入れても隠れる)医療保険:限度額証の入力欄がない
他にも、記録を続けていくと次の問題が起こります。
経過記録:複数の記録が一つのフィールドに全て記録されるために、任意の記録を探しにくい(スクロースで目視が必要)
記録を電子化する意義として言われているものの中に、必要な情報を画面に集約して見られる「見やすさ」、必要な情報を容易に探し出せる「検索のしやすさ」がありますが、1画面システムではこれらが不十分な状態だと言えます。
現在のレコードをスプレッドシートで表示すると、下のようになります。
一つのフィールドに、複数の情報が入力されています。この状態では、例えばある電話番号を検索すると、複数の番号が入ったレコードが結果として表示される事になります。
「他のがあっても、ひとまず目当てのものが見えればいいでしょ」と言ってくださる心の広い方がおられると思います。嬉しいです(笑)。実生活では是非この寛容さを持っていたいものです。しかし、データを格納する仕方として、これは好ましくありません。別の電子化の意義である「処理の自動化」や「データ再利用の容易化」の部分では「目当てのものの他に余計なデータがくっついている」というのは、大変困るのです。
では、どうすれば良いでしょうか?
テーブルの作り方
フェースシートの1レコードに対して、複数のデータが対応する事があり、それが1つのレコードに収まっているのは、データを扱う世界では実は好ましくない、という話しをしました。
では、現実世界のさまざまな情報をテーブルに収めるには、どのような方法が良いのでしょうか。これは、
というやり方をします。経過記録を例に説明します。
フェースシートのレコード数と経過記録のレコード数の関係は「1対多」ですね。フェースシートの1レコードに対して、複数の経過記録のレコードが作成されます。図(※)で表すとこんな感じです。
フェースシート側の線が1本に対して、経過記録側は鳥の足のように分かれています。これで「1対多」を表現しています。
1画面システムでは経過記録も1つのテーブルに押し込めていた訳ですが、「1対多」というデータ関係が現れたときは、このように「テーブルを分ける」というのが基本となります。
分け方た上で相互をどのように関連づけるかについては、フェースシートのレコードを一意に特定するフィールド(これを「主キー(または「プライマリキー = Primary key」)」といいます)をまず作ります。そして、経過記録のテーブルにフェースシートの主キーと同じ値を格納する「外部キー(フォーリンキー = Foreign key)」フィールドを作成し、フェースシートの主キーと経過記録の外部キーをリレーションで結びます。こうする事で、ある経過記録のレコードは、外部キーの値を主キーに持つフェースシートのレコードに関連すると表す事ができます。
FileMaker上で複数のテーブルを作成
FileMaker上で、やってみましょう。
フィールド定義の時に開いたデータベースの管理ウインドウを開きます。「ファイル」メーニューから、「管理」>「データベース」を選択します。[ctrl]+[shift]+[D]のショートカットキーでも開きます。
「テーブル」タブを選択するとテーブル名が「MyFirstAppのフィールド」となっています。これを「フェースシート」に変更します。
テーブル名を選択した状態で、①下の「テーブル名」欄を「フェースシート」に上書きします。②グレーアウトしていた[変更]ボタンが押せるようになるので、これをクリックします。すると、テーブル名が変更されます。
③の[OK]をクリックする前に、「フェースシート」テーブルに「主キー」を設定しましょう。「フィールド」タブをクリックします。①「フィールド名」欄に「Pk_フェースシート」(この「Pk」は「Primary key」の略です)と入力、タイプはデフォルトの「テキスト」のままで②[作成]ボタンをクリックします。フィールドが作成されました。続けて、③の[オプション]ボタンをクリックします。
「フィールド「Pk_フェースシート」のオプション」ウインドウが表示されます。「入力値の自動化」タブ>「計算値」の[指定]ボタンをクリックします。
「「Pk_フェースシート」の計算式を指定」ウインドウで、中央の計算式入力エリアに「Get ( UUID )」と入力します。この「Get ( UUID )」は、「Universally Unique Identifier(日本語に訳すと「普遍的に重複しないID」)」を返す関数です。UUIDは、理論的には340,282,366,920,938,463,463,374,607,431,768,211,456通りのID(文字列)を返すので、「重複しない」とされています。Get ( UUID )と入力したら、[OK]ボタンをクリックします。
「フィールド「Pk_フェースシート」のオプション」ウインドウに戻ると、「フィールドに既存の値が存在する場合は置き換えない」にチェックが入っています。いったん値が入れば書き換える必要はないので、そのままにして[OK]をクリックします。
これで「Pk_フェースシート」を設定できました。このフィールドの位置を一番上に持って行きましょう。フィールドをクリックしたら、[ctrl]キーを押しながら[↑]を押すか、フィールド一番左の上下三角が重なったようなハンドルをクリックして上までドラッグ、一番上でドロップしても移動できます(このとき、カーソルは下図のような形に変わります)。
「経過記録」テーブルも作りましょう。このデータベース管理ウインドウで「テーブル名」欄に「経過記録」と入力して、[作成]をクリックします。
House keeping fieldは、フェースシートテーブルと同様にすべて削除します。
「フェースシート」テーブルのところをダブルクリックするか、「フィールド」タブに移動してプルダウンから「フェースシート」を選択します。
①5つのHouse keeping fieldを選択したら、②[削除]ボタンをクリックするか[back space]または[delete]キーを押下します。確認ダイアログが表示されるので、[削除]をクリックします。
「Pk_経過記録」「Fk_フェースシート(Pk_フェースシートの値を入れる外部キー)」「作成日」「担当SW」「経過記録」フィールドを作成します。
フィールドの作り方は入門4で解説しているので、必要であればそちらを参照してください。「フィールド名」欄にフィールド名を入力し、「タイプ」を指定、[作成]ボタンをクリックします。
リレーションの指定
フェースシートの1レコードに対して、複数の経過記録レコードが対応できるようにテーブルを作成しました。
この二つのテーブルにリレーションを設定します。リレーションの設定は、データベース管理ウインドウの「リレーション」タブ画面で行います。
テーブルを二つ作成したので、それを表す二つのテーブルオカレンス(「TO」)が表示されています。
この「テーブルオカレンス(「TO」)」は一般的なデータベースにはない概念でFileMaker特有のものですが、難しくはありません。「テーブルを表すアイコンのようなもの」くらいに覚えておけば大丈夫です。これは、さまざまな処理をどのテーブルの関連で行っていくかを示すとても良い機能です。この良さは、触っていく中で今後実感できると思います。
フェースシートTOの「Pk_フェースシート」をクリックして、経過記録TO方向にドラッグします。
経過記録TOの「Fk_フェースシート」上にドロップします。
これで、フェースシートTOと経過記録TOがリレーションで結ばれました。これによって、フェースシート側からは、フェースシートの任意のレコードに関連する経過記録レコードだけを参照することができます。経過記録側からは、この経過記録レコードがどのフェースシートのレコードのものかが分かる、ということになります。
まとめ
お疲れさまでした!今回はここまでです。
今回の記事で学んだことは次の3点です。
一つのレコードに複数のデータを入れてしまうのは、データを扱う世界では好ましくないこと
そのために、「1対多」というデータ関係が出現した場合は、テーブルを分ける必要があること
そして分けられたテーブル同士は「リレーション」で関連付けされること
次回は、「連絡先」「連絡先TEL」「関係機関」「関係機関TEL」のテーブルの扱いとリレーションについて見ていきたいと思います。
みんなで、ソーシャルワークをより良いものに。
それでは、また次回の記事でお会いしましょう!!