2013-01-16 28 views
2

我正在設計一個數據庫來存放電話,SIM卡,電話-SIM配對以及電話-SIM配對的歷史記錄。一個電話一次只能與一個SIM卡配對。電話數據庫主鍵問題

我的問題是試圖想出一個唯一標識手機SIM配對的主鍵。我目前有一個IMEI和ICCID的* comp(ound | osite)鍵,但是這將依賴於用戶不添加新條目來破壞一個phone-one SIM規則。

我可以使用驗證在device-SIM配對錶上強制執行此規則,但這是否是不好的做法?

在此先感謝。

*我說這是因爲我目前正在努力記住複合和複合鍵之間的區別。

+1

複合鍵是使用多個列的複合鍵。複合是多列連接。前者可能有問題,後者是一個問題。 –

+0

組合鍵是具有多個屬性的鍵。所以是一個複合關鍵。然而,在ER術語中,兩者之間存在細微的差異,即「複合密鑰」是其屬性碰巧包含某個其他實體的密鑰的複合密鑰。使用術語複合鍵除非你的意思是指複合鍵的特定ER概念。另見:http://dba.stackexchange.com/questions/3134/in-sql-is-it-composite-or-compound-keys – sqlvogel

回答

1

如果你想在同一個表中配對的歷史。 然後一個身份的主鍵將做這項工作

畢竟我可以將我的SIM卡從phone1移動到phone2,然後回到phone1。

這是一個頑皮的重新鍵入表可以將你移動到另一個宇宙... 有一個隱含的假設,pair_id在時間維度增加。 某些東西可以被CRUD訪問表中的任何內容破壞。

你可以添加一個日期時間date_paired,但如果我換了我的模擬人生很快...... 好時間兩個表,當前和歷史我認爲。

1

我的問題是試圖想出一個唯一的主鍵, 識別手機SIM配對。我目前有一個IMEI和ICCID的* comp(ound | osite) 鍵,但是這將依賴於用戶而不是 添加一個新的條目,這將破壞一個phone-one SIM規則。

那麼,你沒有說要求是一個SIM卡的電話。您說:「一次只能將一部手機與一張SIM卡配對一次」。 (強調增加。)

IMEI和ICCID 的列對聽起來像就像這張表的罰款候選鍵。 (我在說你的話;我不太瞭解手機和SIM卡。)如果你允許用戶首先輸入數據,你必須有一些業務流程 - 可能在應用代碼中實現或SQL - 允許更新,無論規則是「一個電話/一個SIM」還是「一次一個電話/一個SIM」。

爲什麼?這些值很難正確輸入。

沒有什麼錯後添加的替代ID號你把真正候選鍵到位。添加代理ID號碼而沒有實際候選密鑰就位存在很多錯誤。