分子結構式的表達和存儲
化學分子結構式的表達方法有很多。最基本的方法當然就是圖片文件,圖片文件的確僅適用于展示,不適用于分析和檢索。常見的以文本形式存儲的化學結構包括InChI,SMILES,Molfiles,CML等。對于這些格式,在inchi.info網站上有一個不錯的比較。原文還帶有一些注釋。
InChI | InChIKey | SMILES | Molfile | CML | |
線性(不用換行) | Yes | Yes | Yes | No | No |
唯一性 | Yes | No | Possibly | No | No |
可讀性 | Hardly | Impossible | Easily | Hardly | Hardly |
定義原子幾何位置 | No | No | No | Yes | Yes |
長度(每原子字符數) | ~2 | ~1 | 1-2 | ~50 | ~50 |
軟件支持 (0-1) | 0.3 | 0.1 | 0.2 | 1 | 0.5 |
在數據庫中作為結構式信息進行存儲,比較重要的考慮因素就是唯一性、存儲空間。所以使用InChI, SMILES作為結構式的描述信息都可行。
這個表里需要注意的是,InChIKey與Molfile/CML在唯一性上都是No,但有很大不同。不同的分子結構有可能用同一個InChIKey表達;同一個分子式,可以表示成不同的Molfile/CML。這都對數據庫中的 一項重要工作,檢索帶來大麻煩。
找到合適的分子結構式表達方式,用文本的方式存儲起來,并不復雜。執行一些簡單的操作,比如通過分子結構(精確)查找分子,也和普通的數據庫操作沒什么兩樣。
但是要通過結構式信息進行分子參數計算、子結構檢索、描述符(fingerprint)生成及索引、分子相似性計算等工作時,往往需要在關系數據庫上增加插件來實現。
關系數據庫插件 (cartridge)
下面的插件,沒有一個是應用于MS SQL Server的。SQL Server也提供了擴展存儲過程(SQL Server 2000)及CLR(SQL Server 2005)等插件接口,是能夠實現相同的功能的。這也正是我現在正在進行的工作。
pgchem::tigress
開源。用在PostgreSQL上。在checkmol/matchmol 和OpenBabel的基礎上開發的。文檔很nice,但是似乎很久沒有更新了。典型的案例是http://www.chemcollect.de/
mychem
開源。用在MySQL上,UDF形式的插件。基于OpenBabel。SVN代碼更新比較勤。
OrChem
This project aims at creating an open source chemistry plugin / cartridge for the relational database system Oracle.
其他商業插件
- CambridgeSoft Oracle Cartridge
- Symyx Direct, Cartridge for Oracle
- CHORD, a commercial chemical cartridge for PostgreSQL, is sold by gNova. 基于OEChem。OEChem也不是免費的。
- JChem Cartridge, adds chemical intelligence to the Oracle platform.
一本新書
Design and Use of Relational Database in Chemistry,《在化學領域設計和使用關系數據庫》。作者是gNova公司的TJ O’Donnell, Ph. D.,那這本書里用到的方法,也自然是這個公司的CHORD插件了。不過這本書對關系數據庫中,化學信息的應用,寫得比較全面和系統了(從目錄上看)。就是有點灌水,連關系數據理論都要占一章。寫一本書,講解理論的同時推銷自己的產品,還能掙稿費,這絕對是個好辦法。Amazon上的定價是$93.56。
不需要插件的解決方案
Chemical Substructure Search in SQL
Adel Golovin and Kim Henrick,
EMBL-EBI Hinston Hall Genome Campus, Cambridge, U.K.
J. Chem. Inf. Model., Article ASAP
DOI: 10.1021/ci8003013
這是一篇發表不久的文章。我很感嘆之前為什么沒有過這么直接的思路。分子結構用SMILES表達的原理中,實際上就已經將分子結構抽象為原子(Atom)和鍵(Bond)之間的組合,并且用生成樹(spanning tree)構造成字串。
分子、原子、鍵、分子結構(spanning tree),都可以,而且很適合在關系數據庫中表達出來。子結構檢索等功能操作,也可以用基本的SQL來實現。
相對于用插件的方案,優勢在于
- 不限制于數據庫平臺。
- 更穩定。插件的質量高低,運行于何種進程空間,是否會出現異常,都將直接影響服務器。在重要的運營服務器上,更是隱患。
- 性能(performance)更優。對原子和鍵的查詢都可直接利用數據庫服務器的索引。
- 存儲空間上(可能)有改善。當設計得當時,原子、鍵建立字典表,事實表就都是數字組成的關聯表。在基于插件的系統中,以子結構檢索為例,為了盡量減少性能消耗最大的插件函數計算,往往會生成碎片(fingerprint)索引,所使用的存儲空間,加上SMILES的字符串存儲空間,會高于這個方案中的存儲空間。尤其是在小分子數據庫中。
其他參考資料
Fast Substructure Search series, by Rich Apodaca
How to create a web-based molecular structure database with free software[PDF], by Norbert Haider (Checkmol/matchmol)