2015-07-21 99 views
0

我正在使用Couchbase Lite數據庫進行無模式項目,因爲我知道,我非常滿意這個項目,因爲它解決了我的問題,但它引發了一個與NoSQL中主鍵約束相關的問題(文檔數據庫)。Schema vs Schemaless DBMS

大家都知道所有的Schema數據庫都會以表格的形式表示出來,而這些表格可能有也可能沒有主要的/ forgien的關鍵字。例如,假設我有一個名爲Student的表格,其主鍵爲usn(大學的座位號),以及其他屬性,名,姓,地址,聯繫人號碼等等。

usn |名字|姓氏|地址|聯繫電話

2BA11CS409 | abc | mnq |班加羅爾| 1234567890

2BA11CS410 | xyz | PQR |孟買| 1234567809

在這裏,表格將通過一個錯誤說,如果我試圖再次添加2BS11CS409值,則違反主鍵約束(不能添加重複鍵)。

但什麼是文獻數據庫,它將如何文檔中識別獨特價值的情況下,

docID:123456789zxcv 

{ 
usn : 2BA11CS409, 
firstname : abc, 
....... 
....... etc 
} 

我知道每個文檔都有一個唯一的ID,其密鑰索引在數據庫中搜索,但我創建與上面相同的值另一份文件,

docID:zxcv123456789 
{ 
usn : 2BA11CS409, 
firstname : abc, 
last 
....... etc 
} 

當我嘗試與USN訪問一個數據庫,它必須返回我只有一個文件,但它會回到我兩個文件可以是相同的或不同的。

我需要知道關係數據庫中存在的文檔數據庫中的主要/唯一鍵概念。或者您可以將我重定向到一些文章

謝謝。

+0

謝謝@Nils Ziehn,但如果我想要重新創建基於usn的文檔並且具有相同usn的兩個文檔存在於數據庫中,會顯示兩個文檔還是會拋出任何錯誤。任何例子,將不勝感激 – iNasir

回答

0

那麼,模式或沒有模式唯一鍵約束總是使用索引,大多數RDBs的優點是,他們爲您提供這項服務,如果您需要自己做的couchbase。基本上你有第二個集合,它代表了索引。每次要插入標準集合時,只要首先檢查索引是否存在要插入usn的文檔,如果它沒有將文檔插入普通集合。然後,您將文檔插入索引docId=usn,並且如果您希望可以插入對插入正常集合的文檔的docID的引用。

+0

經過一些深入的研究,我來到了某個地步。我可以使用'docID'來存儲'USN',而不是一些垃圾/隨機值。在將值插入數據庫之前,我可以檢查具有'docID:2BA11CS409'的文檔是否存在,如果它的_true_ I可以阻止它們插入相同的值。 – iNasir