はじめに
hkob の雑記録の第207回目は、都道府県 (Prefectures)・コンサートホール (ConcertHalls) のデータベースを追加します。
ER図
昨日、Map については属性のみで ER 図から排除する旨を記載しました。今回の Prefectures と ConcertHalls は、これらには接続しないのでまだ独立しています。

Prefectures のエクスポートとインポート
Prefectures は Name, Region, Sort order をエクスポートします。こちらもリレーションがないので、さっさとエクスポートしてインポートしてしまいます。

無事にインポートが終わりました。

ConcertHalls のエクスポート
ConcertHalls のプロパティは Name と上の Prefectures へのリレーションのみです。こちらで書き出しを行います。

前回と同様に CSV に書き出し後、リレーションの URL 削除をしてしまいます。
sed 's/ (https:\/\/www.notion.so[^)]*)//g' ConcertHalls\ 61685d5852ab42b98bbd7c832523c62c.csv | sed 's/\([0-9][0-9]*\)\/\([0-9][0-9]*\)\/\([0-9][0-9]*\)/\1-\2-\3/g' | sed 's/ → /\//g' > ConcertHalls.csv
変換結果は以下のようになります。プロパティの名前を変更するのが面倒なので、先に Prefecture → PrefectureStr に変更しておきます。前からそうしておけばよかったです。
Name,PrefectureStr 渋谷ライブイン,東京 日本青年館,東京 徳島ベガホール,徳島 福岡ビブレ,福岡
Concerts の作成 & インポート
森高千里DBの下に作成したいので、また Cmd-Opt-9 で新規ページを作成します。この新規ページを開き、インポートを実施しました。今回はテキストだけなので、特に難しいことはありません。

インポートを実行しました。

リレーションの作成
Prefecture リレーションを追加します。コンサートホールは1つの都道府県に所属するので、1対多の関係となります。このため、1ページ制限を付加しています。都道府県からホール一覧が取得できるように双方向リレーションも追加します。

Notion API で Prefecture データを準備
これまでと同様に PrefectureStr から Prefecture を設定してみます。prefecture_id_hash まではこれまでと同様です。
prefecture_db = Database.find "https://www.notion.so/hkob/23ad8e4e98ab80ee90c9cb3b73bd4cb9?v=23ad8e4e98ab8160b8c6000c76aea95a&source=copy_link" => NotionRubyMapping::Database-23ad8e4e98ab80ee90c9cb3b73bd4cb9 prefectures = prefecture_db.query_database => NotionRubyMapping::List- prefecture_id_hash = prefectures.each_with_object({}) { |prefecture, h| t = prefecture.properties["Name"].full_text; h[t] = prefecture.id } => {"沖縄"=>"23ad8e4e98ab81cf8cacc23adc7cffc7", ...
次に、Devices データベースを読み込み、それぞれのプロパティを取得します。
concert_halls_db = Database.find "https://www.notion.so/hkob/23ad8e4e98ab800685edf986f1cb15c2?v=23ad8e4e98ab814fbfb4000c94daee09&source=copy_link" => NotionRubyMapping::Database-23ad8e4e98ab800685edf986f1cb15c2 pp = concert_halls_db.properties["Prefecture"] => #<NotionRubyMapping::RelationProperty:0x000000011fd0cbc0 ...
さらに Prefecture が空のコンサートホール一覧を取得します。途中でエラーが出た時に続きから実行できるようにするためです。
concert_halls = concert_halls_db.query_database(pp.filter_is_empty) => NotionRubyMapping::List-
あとは先ほど作成した hash を使って設定しまくるだけです。
concert_halls.each do |concert_hall| cp = concert_hall.properties prefecture_str = cp["PrefectureStr"].full_text ids = prefecture_str.split(", ").map { |k| prefecture_id_hash[k] } cp["Prefecture"].relation = ids p [cp["Name"].full_text, prefecture_str] concert_hall.save end ["赤坂 BLITZ", "東京"] ["東京国際フォーラム", "東京"] ["神戸国際会館ハーバーランドプラザ", "兵庫"] ["香川県県民ホール", "香川"] (後略)
これで無事に Prefecture リレーションが設定されたので、PrefectureStr は削除してしまいます。

おわりに
これで Prefectures と ConcertHalls についても取り込みが終わりました。次は Concerts と ConcertHalls を繋ぐ Performances について解説します。長くなりそうなので、解説は土曜日になるかもしれません。明日は Notion 座談会なので、軽いアップデート紹介くらいで済ませる予定です。