O'Reilly
言わずと知れた
Manning
in Action / in Practice シリーズが有名
ITS (Issue Tracking System) の trac では、チケットにコメントが書ける。 そのデータベーススキーマを調べた。
このポストで調べたいことに関連する trac の仕様は以下のとおり:
実際に操作したイメージはこんな感じ:
チケットは ticket テーブルに、コメントは ticket_change テーブルに格納されている。 ticket_change テーブルはチケットのステータス変更なども管理するテーブルで、これにコメントも相乗りしている。
# .schema ticket_change CREATE TABLE ticket_change ( ticket integer, time integer, author text, field text, oldvalue text, newvalue text, UNIQUE (ticket,time,field) ); CREATE INDEX ticket_change_ticket_idx ON ticket_change (ticket); CREATE INDEX ticket_change_time_idx ON ticket_change (time);
docker run -d -p 8123:8123 --name my_trac stephenhsu/trac
# at host $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 198a9f3be235 stephenhsu/trac "/bin/sh -c 'service…" 30 minutes ago Up 30 minutes 0.0.0.0:8123->8123/tcp my_trac $ docker exec -it 198a9f3be235 /bin/bash # at trac container root@198a9f3be235:/# apt install sqlite3 root@198a9f3be235:/# sqlite3 /var/local/trac/db/trac.db SQLite version 3.11.0 2016-02-15 17:29:24 Enter ".help" for usage hints. sqlite> .headers ON sqlite> .mode column sqlite> .width 6 16 10 9 8 16
以下の手順でコメントを追加、編集してDBのようすを観察する。
むむむ
ticket time author field oldvalue newvalue ------ ---------------- ---------- --------- -------- ---------------- 1 1658493681622019 trac_admin comment 1 c1uu 1 1658493681622019 trac_admin _comment0 c1 1658493692585483 1 1658493681622019 trac_admin _comment1 c1u 1658493697493613 1 1658493684972623 trac_admin comment 2 c2
なんじゃこりゃ
sqlite> select * from ticket_change order by time; ticket time author field oldvalue newvalue ------ ---------------- ---------- --------- -------- ---------------- 1 1658494632622823 trac_admin comment 1 c1
sqlite> select * from ticket_change order by time; ticket time author field oldvalue newvalue ------ ---------------- ---------- --------- -------- ---------------- 1 1658494632622823 trac_admin comment 1 c1 1 1658494646691429 trac_admin comment 2 c2
おなじ。
sqlite> select * from ticket_change order by time; ticket time author field oldvalue newvalue ------ ---------------- ---------- --------- -------- ---------------- 1 1658494632622823 trac_admin comment 1 c1u 1 1658494632622823 trac_admin _comment0 c1 1658494660176808 1 1658494646691429 trac_admin comment 2 c2
sqlite> select * from ticket_change order by time; ticket time author field oldvalue newvalue ------ ---------------- ---------- --------- -------- ---------------- 1 1658494632622823 trac_admin comment 1 c1uu 1 1658494632622823 trac_admin _comment0 c1 1658494660176808 1 1658494632622823 trac_admin _comment1 c1u 1658494671706741 1 1658494646691429 trac_admin comment 2 c2
ちょっと興味はあるけど、大きいシステムの開発/保守には大変そうに思う。
いつか使いたい。 Udemy のダッシュボードで使っている気がする。