首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL 學習筆記:從核心概念到存儲結構的探索

     編輯:關於SqlServer

學習心態:在未知中建立認知框架

學習計算機知識往往讓人陷入「無知的恐懼」。過去那種打破沙鍋問到底的精神在這裡需要適度節制——關鍵在於把握「度」,明確當前階段最該掌握的核心知識,對暫時不需深究的細節只在心中留個問號,待未來機緣巧合再解決。疑問是學習的催化劑:我習慣以懷疑精神審視書本知識,也會先入為主推敲未知領域;猜測正確時沾沾自喜,錯誤時則為書中的解決方案歎服。

MS SQL Server 核心概念猜想與筆記

數據庫存儲結構的直觀推測

數據庫是門高深學問。我們知道數據庫包含多張表,表包含多個字段,字段定義規則。記錄包含所有字段對應值,記錄數與字段數均可動態變化。這種「可變加可變」帶來靈活性,但如何實現?查詢修改時可自由指定字段與記錄,背後機制是什麼?在未閱讀存儲結構專書前,我大膽猜測:字段是相對獨立對象,擁有屬性;以數組鏈表串聯表中字段,實現動態增減;每條記錄的字段值通過指針指向上下對應值,形成十字交叉鏈表,從而方便管理記錄、自由選擇字段顯示修改,數據得以「亂放」。但增減字段似乎需修改所有記錄,SQL 作為面向集合語言,這結構是否可行、高效?還有表間關係、缺省與規則如何綁定字段?暫時止步,留待日後探索。

存儲過程

存儲過程由一組 SQL 語句組成,共同完成一任務,以一名稱(含參數符號串)代表該語句組。遠程訪問時,客戶端只需發送名稱,服務器執行對應語句組並返回結果,從而減少網絡傳輸量。

觸發器

觸發器定義一組 SQL 語句,當對指定表進行修改時自動觸發執行,以保證數據正確性與一致性。

索引

索引由索引頁與數據頁組成。索引頁按一個或多個數據項(關鍵字)排序,同一關鍵字可對應多條記錄,並存儲指向具體記錄的指針,利用排序加快查找;數據頁為實際存儲數據頁面。填充因子在索引頁預留空間,利用內存與硬盤交換時預讀相鄰數據減少缺頁中斷的特性,保持數據連續性,提升查詢速度。

數據庫安全體系

使用 SQL Server 需登錄名連接服務器,登錄名賦予服務器使用權但不含數據庫權限;用戶賬號提供數據庫使用權,需為登錄名映射用戶賬號。不同用戶權限不同(唯讀、授權等),引入角色集中管理相同權限用戶。創建數據庫用戶時指定其角色。系統管理員與數據庫擁有者擁有最高權限。亦可對表、視圖、函數、存儲過程授予細粒度權限,從底層對象管控安全。

臨時表與視圖的應用機制

擁有權限後,應用程序如何使用數據?可用 SELECT 創建臨時表,用戶僅見此臨時表。臨時表字段指向基表對應字段數據指針,通過指針間接修改基表數據。指針可指向特定表特定字段,從而支援多表聯合查詢修改。視圖可理解為用字符串替換 SELECT 語句,減輕編寫負擔,但佔用系統表存儲空間。因應用程序通過指針間接訪問,物理存儲結構變更時無需修改用戶程序,只需更新臨時表數據地址(動態自動分配),保證程序穩定。或許只需重新編譯索引,索引頁存有數據地址,臨時表地址可高效從索引頁獲取。

COM 組件的初步思考

(原文至此結束,留作後續研究方向)

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved