森高千里データベースの再構築(3) : hkob の雑記録 (202)

はじめに

hkob の雑記録の第2012回目は、昨日に引き続きデータベースを追加していきます。今回は、曲データベースを検討していきます。

曲データベース

昨日は関係者は他に依存しないデータベースでした。曲データベースもリレーションが多いですが、Lyrics と Musics だけが昨日作成した People へのリレーションとして必要なものです。それ以外は、has_many で参照されるものでした。

移行元のプロパティ

このことを踏まえて ER 図を整理すると以下のようになります。作詞・作曲は複数人が並ぶことがあるので、1対多ではなく、多対多の接続になります。

People と Songs のER図

CSV エクスポート

昨日と同じように書き出したい部分だけの CSV ビューを作成し、CSV エクスポートしました。

CSV ビュー

データベースのフルページでエクスポートを実行します。出力された CSV は以下のような形になっていました。

Name,Yomi,Head,First appearance,Lyrics,Musics
I LOVE YOU,あいらぶゆー,あ,1993/05/07,森高千里 (https://www.notion.so/614f5474fc404b8693fa30203c0d6217?pvs=21),伊秩弘将 (https://www.notion.so/86b6139fd14042aaa079d7dc32eccaee?pvs=21)
青い海,あおいうみ,あ,1992/11/18,森高千里 (https://www.notion.so/614f5474fc404b8693fa30203c0d6217?pvs=21),松尾弘良 (https://www.notion.so/c8612a4c3cc4421f9670e974f76df45a?pvs=21)
秋の空,あきのそら,あ,1996/07/15,森高千里 (https://www.notion.so/614f5474fc404b8693fa30203c0d6217?pvs=21),高橋諭一 (https://www.notion.so/76fa49332f8a4242bd65769402b27ff2?pvs=21)
明日があるさ,あしたがあるさ,あ,2001/04/01,青島幸男 (https://www.notion.so/b03b4abc9f404a359c46449182402fb6?pvs=21),中村八大 (https://www.notion.so/b63ca25e2f304e9b82bc5f3c3f84943c?pvs=21)

リレーションは元のページへの URL も付加されるようです。元のページにリンクを貼られても困るので、この部分は以下のようにして削除することにしました。また、日付が ISO8601フォーマットになっていなかったので、こちらも / から - に変換するようにしています。

sed 's/ (https:\/\/www.notion.so[^)]*)//g' Songs\ cba2d44172c440b4b2dfc300681a236d.csv | sed 's/\([0-9][0-9]*\)\/\([0-9][0-9]*\)\/\([0-9][0-9]*\)/\1-\2-\3/g' > Songs.csv

これにより URL 部分が綺麗になくなりました。また、日付も ISO8601フォーマットになっています。

Name,Yomi,Head,First appearance,Lyrics,Musics
I LOVE YOU,あいらぶゆー,あ,1993-05-07,森高千里,伊秩弘将
青い海,あおいうみ,あ,1992-11-18,森高千里,松尾弘良
秋の空,あきのそら,あ,1996-07-15,森高千里,高橋諭一
明日があるさ,あしたがあるさ,あ,2001-04-01,青島幸男,中村八大

なお、作詞が二人いるような場合には、正しく "" で括られています。

さあ冒険だ,さあぼうけんだ,さ,1995-09-01,"森高千里, S.Itoi",Carl Smoky Ishii

データベースの作成

今回は、リレーションがあるので CSV のインポートからデータベースを作成することができません。そこで、以下のようなプロンプトを用意してみました。

森高千里DBのWiki内に Songs データベースを作成してください。Name というタイトルプロパティ、Yomi というテキストプロパティ、Head というセレクタ、First appearance という日付プロパティ、Lyrics という People への相互リレーション、Musics という People への相互リレーションを設定してください。

このプロンプトはホームに以下のように記載します。

ホーム画面の構築

Songs は以下のように生成されました。Album, Genre, Length などは必要ないので消しました。

プロパティ候補

続けるをクリックするとビューの選択になります。ビューは後で細かく設定するので、All Songs だけ残して消しておきます。

ビュー候補

作成されたデータベースは以下のようになりました。残念ながら場所はプライベートに作成されてしまっていました。さらに、Head は我々の想定したデータとは異なるので後で消しておきます。また、サンプルで三つのデータが入っています。この3曲を選ぶとは AI もなかなかです。

作成されたデータベース

さらに、Lyrics, Musics は残念ながらリレーションではなく、ユーザープロパティになっていました。

ユーザプロパティになった Lyrics

こちらはこのようにリレーションに修正しました。

リレーションに修正した Lyrics

プロパティは以下のようになりました。

Songs のプロパティ一覧

双方向リレーションなので、People 側のプロパティは以下のようになりました。

People のプロパティ一覧

CSV取り込み

データベースがすでにある場合には、フルページから「CSV取り込み」でデータを流し込めます。

Songs への CSV 取り込み

実行すると以下のようにインポートの場所が「Songs」となり、ファイル選択画面になります。

インポート先を指定した CSV インポート

ファイルを選択すると New table の部分が Songs に変わっていました。

ファイル選択後のダイアログ画面

ヘッダのマッピング画面では同じ名前のものがマッピングされていました。ただ、Lyrics、Musics は Text になってしまっていました。

プロパティのマッチング

実行したらやはり Lyrics 1, Musics 1 という別のテキストプロパティが作成されてしまっていました。また、Head のセレクトは自動で色がつくことなく、全てグレーになってしまっています。

CSV 取り込み後のデータベース

CSV のインポートがアップデートされる前は、型指定ができなかった代わりに、リレーションは自動で連携されるようになっていました。一般的な使い方としては使いやすくなっているのですが、今回のようなアクロバティックなことができなくなってしまっているようです。手間を考えるとデータベースを作成してから、CSV 取り込みするよりも昨日と同様に CSV インポートした方が簡単かもしれません。

CSV インポートのやり直し

リレーションが取り込めないのであれば、先にデータベースを作成するのも面倒なので、昨日と同様に CSV インポートしてしまうことにします。

CSV インポートでリベンジ

今回は、新規ページを森高 DB の下に作成してからインポートしたので、プライベートにデータベースが作成されることなく Wiki の配下に Songs が生成されました。

空ページの中でインポートした結果

取り込まれた Songs は以下のようになりました。セレクタの色が付くのはいいですね。

CSV インポートで作成されたデータベース

おわりに

以前は実行することができた CSV 取り込みでリレーションが設定されなくなってしまったのは、かなり残念です。このリレーションをどう対応するかは明日の記事にします。

hkob.notion.site