t_wの輪郭

Feedlyでフォローするボタン
文輪文輪の開発記録PlantUML文輪の概念データモデルsql.jsで文輪のデータを保存論理データモデル
@startuml

entity outline as "outline\nアウトライン" {
    ulid
    text
    created_at_timestamp_ms
    edited_at_timestamp_ms
}

entity outline_relation as "relation\n関係" {
    ulid
    parent_outline_ulid
    child_outline_ulid
}

entity home_outline as "home outline\nホームアウトライン" {
    outline_ulid
}

outline }-- outline_relation
outline ||--home_outline


@enduml

文輪の論理データモデル v2あれあれ
@startuml

entity outline {
    ulid
    text
    created_at_timestamp_ms
    edited_at_timestamp_ms
    first_outline_relation
}

entity outline_relation {
    ulid
    parent_outline_ulid
    child_outline_ulid
    next_outline_relation
}

entity home_outline {
    outline_ulid
}

outline }-- outline_relation
outline ||--home_outline

@enduml

あれ

2022/3/26 20:06:00

あかん、このデータ構造じゃ、アウトラインの順序を設定することができない。デライトみたいに編集順とかなら問題ないが。やはりoutlineにArrayを持たせるしか?

対策

  • outlineにArrayを持たせる
    • 無理。sql.js(SQLite)にはArrayがないらしい。
  • outlineにtextでulidをリスト化して持たせる
    • Splitの処理重そう
  • outline_relationにindexを持たせる
    • 子のoutline挿入時にO(N)回indexの修正が発生する
  • outline_relationにデカイindexを持たせる
    • んーindexが重複した時の処理が複雑になりそう。
  • outline_relationにnextを追加して、次のやつを指定する
    • はーーーーーデータの整合性を保つのがめんどくせぇぞ。線形リストじゃねぇか。
    • 表示する際にすべてのoutline_relationを取得する必要がある。欠点に思えたけどほかのやつもそうじゃね?
      • outlineに先頭のoutline_relationを持たせれば良さそう。
      • さらに先頭のoutline_relationのparent_outline_ulidとchild_outline_ulidは空文字にして、番兵として扱ってやればよさそう。

あれ

2022/3/26 19:00:00

文輪のデータモデルが単純すぎてこれで大丈夫か不安になってくるな。
まあ単純すぎて不足がある分には追加すればいいから大丈夫か。「複雑かつ問題がある」よりも対処しやすい。