盆頃から自宅で音楽DBを作っている。

コレクトしているレコードと演奏ミュージシャンの名前だけでも登録しておきたいもの。

その登録処理について考える。

/* 1アルバムの登録手順 */
1) 人名の登録を確認する
PERSON 表を検索する。
# できればLIKE検索したいところ

2) 未登録人名を登録する。
PERSON 表に登録する。

3) グループの登録を確認する。
Organization表を確認する。

4) 組織種別がなければ
ORGKIND表に登録する

4) 未登録組織名を登録する。
ORGANIZATION表に登録。


>> 作品名(アルバム名)の登録
5) タイトル登録
PRODUCT 表に作品タイトル、発表年を登録する。
※年度しかわからないものは1900/01/01とする。

6) 作品の著者登録
AUTHOR 表に、
著者 or 組織名を登録
# PRODUCT_IDを覚えておかねばならない。

>> 曲名の登録
7) 曲名のみの登録。
TUNE 表に曲を登録する。
すでに同じ曲がある場合は登録しない。
# 今は、SIOBで入れているが、出きれば、
一括登録したい。

8) 作曲情報の登録
/home/oracle/MUSIC_DB/TOOLS/INSERT_TUNE_AUTHOR.sql
を実行する。

#- 年度しかわからない場合自動的に
01/01を追加したい。
#= 同じ作曲者を一括登録したい。

>> セッション情報登録
9) セッション情報への登録。 
INSERT_SESSION.sql を実行する。
-- TUNE_SESSIONに登録される。
一括登録が可能な場合INSERT_SESSION_BULK.sqlを使用する。

★ここで、セッション番号の範囲を確認しておく。

10) アルバムとセッションを結びつける
INSERT_ALBUM_CONTENTS.sqlを実行
#- A/B面も入れる。
----INSERT_ALBUM_CONTENTS_BULK.sqlは一括処理実行
# - A面の曲数のみ入力すればよい

11) 曲一覧の確認
この時点で ビュー
V_ALBUM_CONTENTSを見ると収録曲一覧が表示される。


>>個別セッションのパーソナル情報の入力
12) ミュージシャンの個々の演奏情報を
登録する。
INSERT_SESSION_PERSONAL.sql

全曲に参加している場合、以下で一括登録する。
INSERT_SESSION_PERSONAL_BULK.sql

13) 初出の役割があれば、
ROLES表に登録する。
※ROLES表は手元にプリントアウトしておこう。


14) セッションの登録記録は、
V_SESSION_PERSONALで確認できる。
いちいち登録内容を確認するとよい。


14) グループの場合、
INSERT_SESSION_GROUP.sql
で登録する。

これで一応最低レベルの情報は登録される。

※今後必要そうなもの

・歌詞の登録→著作権。とりあえずムリ。
・音源を確認、存在、不在を確認したら、
SESSION_PERSONALのSOUND_F_FLAGをオンにするアプリケーション
・あと定期的にCSVファイルに
V_SESSION_PERSONALを落とす運用もいいね。


バルク処理の例。

SET AUTOPRINT ON
DECLARE
        begin_tuneid NUMBER(8) := &begin_tune_id;
        end_tuneid NUMBER(8) := &end_tune_id;
        i NUMBER(8);
BEGIN
        i := begin_tuneid;
        for i in begin_tuneid .. end_tuneid loop
                insert into tune_session values
                (
                session_id_seq.nextval,
                NULL,
                i,
                to_date(
                '&&sessdate',
                'YYYY/MM/DD'),
                0,0,0,
                NULL,
                NULL,
                NULL,
                NULL,
                NULL
                );

                COMMIT;
        end loop;
END;
/