2013-02-05 78 views
0

我希望能夠從數據庫內而不是我的應用程序中用單個值(即名稱)標記數據庫,因爲它始終是每個數據庫一個ID。例如,像這樣:在數據庫中存儲數據庫引用

DATABASE_A.sql

-- Database Name Table 
CREATE TABLE database (
    name VARCHAR(10) NOT NULL UNIQUE, 
); 

CREATE TABLE item (
    id SERIAL PRIMARY KEY, 
    name VARCHAR(10) NOT NULL UNIQUE, 
); 

Insert Into database (name) values ('A'); 

DATABASE_B.sql

-- Database Name Table 
CREATE TABLE database (
    name VARCHAR(10) NOT NULL UNIQUE, 
); 

CREATE TABLE item (
    id SERIAL PRIMARY KEY, 
    name VARCHAR(10) NOT NULL UNIQUE, 
); 

Insert Into database (name) values ('B'); 

這是因爲當它們結合並存儲在SOLR搜索服務器上的ID是其數據庫名稱和其項目ID的組合,例如:

SOLR項ID的

A1 
A2 
A3 
B1 

它是確定有一個表來定義前綴,這樣,當我做了從我的SQL的網站看看SOLR我可以做下面的查詢:

database (name) + item (id) = SolrID 
+0

SOLR從哪裏獲取數據庫名? – jgm

+0

它有一個名爲dataimporthandler查詢我的數據庫,並將其導入索爾 – Jimmy

+0

它會查詢數據庫(名稱)表 – Jimmy

回答

2

我會更傾向於建立在包含數據庫ID每個數據庫的程序,例如:

CREATE OR REPLACE FUNCTION solrid(IN local_id INTEGER, OUT result TEXT) AS $$ 
DECLARE 
    database_id TEXT := 'A'; 
BEGIN 
    result := database_id || local_id::TEXT; 
END; 
$$ LANGUAGE PLPGSQL; 

然後,你可以寫你的選擇語句,如:

SELECT solrid(id), name FROM item; 

這似乎是一個更乾淨的解決方案。

+0

只是爲了讓我的頭,這基本上是創建一個函數,我可以查詢solrid,但我沒有必須將其實際存儲爲數據庫中的值,它會隨時創建,但將ID添加到我的database_id TEXT – Jimmy

+0

solrid是一個函數。您傳遞一個整數ID,並通過預先設置數據庫ID並將ID轉換爲文本來生成Solr樣式的ID。您可以將此函數放入每個數據庫中,更改database_id以使其包含數據庫的唯一標識符。 – jgm

+0

天才,謝謝 – Jimmy