はじめに
hkob の雑記録の第2012回目は、昨日に引き続きデータベースを追加していきます。今回は、曲データベースを検討していきます。
曲データベース
昨日は関係者は他に依存しないデータベースでした。曲データベースもリレーションが多いですが、Lyrics と Musics だけが昨日作成した People へのリレーションとして必要なものです。それ以外は、has_many で参照されるものでした。

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

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 は残念ながらリレーションではなく、ユーザープロパティになっていました。

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

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

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

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

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

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

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

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

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

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

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

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