Aritalab:Lecture/Database/Object
From Metabolomics.JP
Contents |
オブジェクトデータベース
オブジェクト指向を用いる理由に以下の要求があります。とりわけ生物学で用いる大量データには、ユーザー定義型や参照の利用が必須です。
- データ型をユーザーが自由に定義したい
- 継承を使いたい
- データへの参照(ポインタなど)を使いたい
SQLに即した記述
オブジェクト型の関係データベースではSQL構文の中で以下のような記述ができるようになっています。
CREATE TYPE protein_type AS ROW (id INTEGER, name TEXT, seq TEXT, length INTEGER, comment TEXT, reference TEXT ARRAY[10]) REF IS SYSTEM GENERATED; CREATE TABLE YeastProtein OF protein_type REF IS yid SYSTEM GENERATED; CREATE FUNCTION codon_usage(protein_type) RETURNS TEXT AS EXTERNAL NAME 'c:/../codonUsage.class' LANGUAGE 'java'; CREATE TABLE Expressed (id INTEGER, assay TEXT, protein REF(protein_type) SCOPE YeastProtein, amount INTEGER)
配列やリスト
配列やリストは、collection 型と呼ばれます。SQL:1999では
- ROW (n1 t1, n2 t2, ..., nn tn)
- base ARRAY[i]
という形が導入されています。ただしARRAY[i]は入れ子にできません。 こうした型を用いて以下のような問い合わせを記述できます。
SELECT DISTINCT E.assay, E.protein FROM Expressed E WHERE CARDINALITY(E.protein->reference) > 5
参照型
参照型を導入することは簡単なように思えますが、様々なコストを伴います。
- オブジェクト ID
データベース上のオブジェクトには object id が与えられます。ユーザはこの値を利用可能ですが、オブジェクトの生成、消滅をきちんと認識して使わないと参照エラーを起こします。
- 深い等価性と、浅い等価性
オブジェクトを比較する際に、参照先まで全て等しいかどうかという区別が必要になります。
- データの削除や更新
実体が削除されたのにもかかわらず、参照のみが残されるとデータの整合性が失われます。参照型の中身は実体が削除されたら null に戻さねばなりません。