Ms-access 定義額外的索引欄位
我正在開發一個最終會擴大規模的訪問數據庫。因此,必須考慮可擴展性。
我的背景:沒有關於數據庫的官方研究。
- 我已經閱讀了 Access Database Design & Programming (O’Reilly),並且我已經學習了多門關於數據庫的課程(我一直在學習和閱讀)
- 到目前為止,我一直在從頭開始開發一個數據庫,其中包含多達 50-60k 行的表(但會變得更大)。
- 高級 VBA 使用者,熟悉 C#
我想確認/否認一些可能危及項目的假設。
- 假設 tblA 具有最小的超級鍵 uniqueID。uniqueID 是一個 7+ 字元的文本字元串。是否有必要(推薦)定義一個新的欄位類型 numeric(integer) 將用作其他表中的 FK 以生成關係?比方說,將來會遷移到SQL server。會有幫助嗎?
- 應用先驗原則。將數據庫與 Excel 連接時,使用者需要查看幫助他辨識記錄的資訊屬性,但是當我將其發送回數據庫時,我需要傳遞連接兩條記錄的數值。假設我們需要更新 tblInventory 中與 tblEmpl/tblClients/tblPrices 有關係的記錄。
我應該如何處理 empl_name=“Carlos” 到 emplID=1 的轉換?
維護字典鍵/項?生成 recorset 以查找 tblEmpl 中的值?是否有任何 SQL {INSERT INTO;UPDATE} 語法來創建 INNER JOIN 以便它自動轉換它?(我還沒有找到任何適用於 SQL Access 的東西)
- 通過使用數字 ID 在表中查找值(當表具有 3/4/+ 關係時),SELECT 語句會導致嵌套的 INNER JOIN 看起來非常難看:
(即:想在 tblC 上查找 emplName 為“MyName”且 clientName 為“MyClient”的值。需要嵌套表來查找這些屬性)
SELECT tblC.ID,tblA.Name,tblB.Client 從 tblC INNER JOIN (tblA INNER JOIN tblC ON tblA.ID = tblC.FK_A) ON tblB.ID = tblC.FK_B WHERE (((tblA.Name)=“MyName” ,(tblB.Client)=“MyClient”));
如果我有 4 種不同的關係,它會變得很可怕。
由於我是自學成才的,我不太確定我是否只是在 stackoverflow 中閱讀了錯誤的文章,或者這就是它的方式,我應該忍受它。
任何對這些問題的看法將不勝感激。
您的問題確實是:代理鍵有什麼好處?
代理鍵是數據庫中記錄的(通常)整數標識符,用作主鍵(通常)並用作外鍵關係中的連結。
答案隨處可見,維基百科有一個很好的總結,包括優點和缺點,其中一些你提到:https ://en.wikipedia.org/wiki/Surrogate_key
解決你的每一個觀點:
“會有幫助嗎?”
是的。從性能的角度來看,如果您的數據庫增長到較大的規模,這將產生巨大的影響,因為電腦自然使用整數並且比較它們對它們來說很容易。一旦您必須比較自然/業務密鑰,電腦處理時間就會大大增加。但這只是一個優勢,不變性可能是最大的優勢。閱讀上面的維基百科文章以了解這一點。“我應該如何處理 empl_name=“Carlos” 到 emplID=1 的轉換?” 你不應該。你有幾個選擇:
- 對使用者隱藏關鍵欄位,他們不需要知道它。
- 讓使用者看到該欄位,告訴他們不要觸摸它(最好鎖定它)。
使用者不需要知道幕後發生的事情。他們通常也不在乎。如果隱藏或顯示列,則無需進行轉換。其次,除非您有一個自動將這些資訊重新集成到您的應用程序中的過程,否則使用者不應離線更新 Excel 工作表上的詳細資訊。相反,建構一個數據輸入表單供他們使用搜尋功能,並告訴他們直接更新數據庫。
“SELECT 語句看起來很醜” 這是因為 MS Access 使 SELECT 語句看起來很醜,而不是因為它們很醜。格式正確的 SELECT 語句看起來不錯:
SELECT tblC.ID ,tblA.Name ,tblB.Client FROM tblC INNER JOIN tblA ON tblA.ID = tblC.FK_A INNER JOIN tblB ON tblB.ID = tblC.FK_B WHERE tblA.Name="MyName" AND tblB.Client="MyClient";
不幸的是,如果你被 Access 困住,你就會被難看的 SELECT 困住。經常使用 MS Access,最好只使用 Access 中的查詢設計器而忘記 SQL 語句,除非您在 VBA 程式碼中執行它們。在 VBA 程式碼中,您可以控制它的外觀,因此可以根據需要進行設計。
您的書似乎包括關於數據庫理論的一章。這很重要,您應該重新閱讀有關數據理論的部分(第 4 章),因為這些部分應該已經回答了您的問題。如果沒有,請尋找另一本書,希望如此。