public Table<String, String, List<String>> getRelationFromGeneDiseaseNetwork()
          throws SqlJetException {
    // load gene id2name cache
    Map<Long, String> gid2name = Maps.newHashMap();
    ISqlJetCursor cursor = db.getTable(GENE_ATTRIBUTES_TABLE_NAME).open();
    if (!cursor.eof()) {
      do {
        gid2name.put(cursor.getInteger(GENE_ID_COL_NAME), cursor.getString(GENE_NAME_COL_NAME));
      } while (cursor.next());
    }
    // load disease id2name cache
    Map<String, String> did2name = Maps.newHashMap();
    cursor = db.getTable(DISEASE_ATTRIBUTES_TABLE_NAME).open();
    if (!cursor.eof()) {
      do {
        did2name.put(cursor.getString(DISEASE_ID_COL_NAME), cursor.getString(DISEASE_NAME_COL_NAME));
      } while (cursor.next());
    }
    // create relation table
    Table<String, String, List<String>> table = HashBasedTable.create();
    cursor = db.getTable(GENE_DISEASE_NETWORK_TABLE_NAME).open();
    if (!cursor.eof()) {
      do {
        String gname = gid2name.get(cursor.getInteger(GENE_ID_COL_NAME));
        String dname = did2name.get(cursor.getString(DISEASE_ID_COL_NAME));
        if (!table.contains(gname, dname)) {
          table.put(gname, dname, Lists.<String> newArrayList());
        }
        table.get(gname, dname).add(cursor.getString(ASSOCIATE_TYPE_COL_NAME));
      } while (cursor.next());
    }
    return table;
  }