2010-10-29 156 views
4

我有一個mysql數據庫有3個表必須連接在一起。我收到的小數據庫必須提供這個mysql數據庫,並附加新的數據。我遇到的問題是我得到的較小的dbs是由外部應用程序生成的,並不是真正意味着要一起使用。因此,當我利用較小數據庫的模式時,我無法知道它們是如何將3個表中的所有記錄歸在一起的。guid作爲主鍵?

我想插入一個GUID作爲主鍵,我可以添加到表中並插入所有新數據時插入。
但是,我不願意使用char字段(用於存儲guid)作爲關鍵字。這是一個有效的關注,或者正在使用char字段知道它將始終是一個足夠的解決方案的指導?有人可以推薦更好的方法嗎?

感謝

回答

6

MySQL不提供GUID/UUID類型,所以您需要在您用於將行插入數據庫的代碼中生成密鑰。 A char(32)char(36)(如果包含連字符)是存儲GUID以取代實際GUID數據類型的最佳數據類型。

+1

如果你不想在你的代碼中生成guid,那麼設置默認爲UUID()!非常棒的東西謝謝你們! – 2013-05-23 16:03:40

1

對不起,我不是100%熟悉MYSQL,在SQL Express中,有一個唯一的標識符類型,你可以設置一個列這實在是一個GUID。您甚至可以將其設置爲自動編號,以便隨機選擇自己的編號。

雖然我的老闆在工作HATES GUIDS,而且我們在離線/在線系統上工作很多,所以他想出了另一個系統,其中每個飼餵數據庫都分配了一個ID(稱爲DEPT),並且每當他插入從一個較小的主表中,他將DEPT寫入一個單獨的Integer列,因此它可以輕鬆排序。


要實現這一點,你會成爲一個第二個關鍵(使進口必須建立在雙密鑰表執行的每個表)。

例子:

PrimaryKey1 DEPT Name 
1    0  Slink 
2    0  Fink 
3    0  Werd 
1    1  Slammer 
2    1  Blam 
1    2  Werrr 
2    2  Soda 
+0

我沒有在mysql中看到唯一的標識符類型,但我會再次檢查。我也考慮過與日期做些什麼 - 可能把它轉換成一個整數或者這種性質的東西。 然而,這是一個好主意,我餵養的dbs是由隨機的4位數字標識的。我認爲存在重複的可能性對我來說太過分了。 – czuroski 2010-10-29 15:08:15

+0

不要使用他們的4位數字,將它們分配給你自己的一個。如果必須,請取最大值(DEPT)+1,並插入所有與該號碼相關的內容。 – Jrud 2010-10-29 15:09:39

0

有的像DB的MS SQL Server提供了一個GUID數據類型,我不知道有關MySQL。

一般來說,char或varchar作爲主鍵沒有問題,除非它們太長。通常整數是首選,因爲它們有點快,但這取決於這對你有多大影響。

實際上,您也可以使用複合主鍵。一個組件可能是您原來的主鍵,它只在一個分區中是唯一的。如果您能夠爲每個數據庫分配一個唯一編號,第二個組件可以是數據庫的編號。

您還可以使用以下方案:

int newId = dbNumber * 10000 + iDInSmallDb; 

所以最後4位數字是原來的分貝,其他數字是DB號。