確保主鍵的適當設定非常重要,原因有許多。
首先,將越多內容標示為主鍵時,物件鍵簽章的計算成本也會越高。 如果 User 的所有欄位都標示成主鍵,則不論任何使用者,系統都必須存取每個內容,再計算包括所有內容值的簽章。 如果欄位是指向另一個物件的參照,問題便會比較複雜。 因此,作為一般規則,含有用戶端資料的主鍵應該遵循資料庫主鍵的相同規則:單一欄位是最有效的鍵,最好是整數。 較複雜的鍵,其中包括預設產生的項目,且每個單一有效欄位都會標示成主鍵,運作方式與最小的鍵相同,但執行速度比較慢。
其次,您必須避免主要屬性中的參照循環。 比方說,如果您有一個 User 物件擁有 Address,且 Address 有一個指標又指向 User 物件,user.address 是主要欄位,address.user 也是主要欄位,當判斷這兩個物件的身分時,會出現無限迴圈。 這是憑直覺就能知道的,但在程式碼中,卻很難控制。 如果是這個情況,只要 Java 物件一致,系統便能夠運作:Address 所指向的 User 物件是指向 Address 物件的完全相同的 Java User 物件, 因此,簡式物件參照相等測試,如 theUser = theUser.getAddress().getUser(),會傳回 true。
最後,請想像所有欄位都被視為主鍵(預設值),且您變更給定的物件,失去了物件先前的身分,這是一個比較麻煩的問題。 由於所有欄位都是身分的一部分,因此,任何變更都會使身分不一致。 當使用較進階的組織架構特性時,如 Web 服務,這是一個真正的問題,這時您預期會從伺服器取得瀏覽器使用者可能已修改過的物件之更新項目。
使用條款 |
讀者意見
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.