Starbug1のテーブル定義
2007/11/14
http://d.hatena.ne.jp/smeghead/20071105/backtostart で、パフォーマンス的に破綻したStarbug1の再構築を進めていきます。
「良いデザインは再デザインだ。」
結構仕事も忙しいので、いつもどおりボチボチ進めます。id:rayfillさんの助言とか、影舞のソースを参考にして作りなおすことにしたので、今考えているテーブルレイアウトを書いてみました。
プロジェクト情報(project)
プロジェクトの情報を格納する。環境設定も含まれる。
カラム名 | 型 | 属性 |
---|---|---|
名前(name) | text | |
説明(description) | text | |
home_url | text | |
host_name | text | |
smtp_server | text | |
smtp_port | integer | |
ml_address | text | |
admin_address | text |
項目種別(element_type)
チケットの項目(件名、投稿者、概要、状態。。。)を格納する。カスタマイズ項目も全て同等で扱うため、項目種別テーブルのレコードとなる。
カラム名 | 型 | 属性 |
---|---|---|
id | integer | not null primary key |
type | integer | |
チケット属性(ticket_property) | integer | |
返信属性(reply_property) | integer | not null |
必須項目(required) | integer | not null |
項目名(element_name) | text | |
説明(description) | text | |
デフォルト値(default) | text | |
一覧表示(display_in_list) | integer | not null |
並び順(sort) | integer | not null |
選択肢(list_item)
コンボボックスなどの項目の選択肢を格納する。
カラム名 | 型 | 属性 |
---|---|---|
id | integer | not null primary key |
項目種別ID(element_type_id) | integer | |
名前(name) | text | |
クローズ(close) | integer | not null |
並び順(sort) | integer | not null |
チケット(ticket)
チケット1つにつき、1レコードとなる。
カラム名 | 型 | 属性 |
---|---|---|
id | integer | not null primary key |
最初の投稿(original_message_id) | integer | not null |
最新の投稿(last_message_id) | integer | not null |
登録日(registerdate) | text | |
クローズ(closed) | integer | not null |
削除(deleted) | integer | not null |
メッセージ(massage)
1つの投稿および返信が、1レコードとなる。
カラム名 | 型 | 属性 |
---|---|---|
id | integer | not null primary key |
チケットID(ticket_id) | integer | not null |
field1 | text | |
field2 | text | |
field3 | text | |
field4 | text | |
field5 | text | |
登録日(registerdate) | text |
field\d というカラムを動的に増やすようにする。
添付ファイル(element_file)
カラム名 | 型 | 属性 |
---|---|---|
id | integer | not null primary key |
メッセージID(message_id) | integer | not null |
カラム名(column_name) | text | not null |
ファイル名(filename) | text | |
サイズ(size) | integer | |
コンテントタイプ(content_type) | text | |
添付ファイル本体(content) | blob |
次は、トリガが有効な場面があるか、viewが有効な場面があるかを考えてみます。