數據庫基礎:概念、原理與實戰示例

在當今信息時代,數據已經成為企業和個人的核心資產。無論是社交媒體、電子商務、金融交易,還是物聯網設備,幾乎所有的現代應用都依賴于高效的數據存儲和管理。數據庫(Database)作為數據管理的核心技術,幫助用戶存儲、檢索、更新和分析數據。本文將詳細介紹數據庫的基本概念、類型、核心組件、操作語言,并結合實際示例,幫助讀者深入理解數據庫的工作原理和應用。

1. 什么是數據庫?

1.1 數據與數據庫

  • 數據(Data):指原始的事實或信息,如數字、文本、圖像等。例如,一個學生的姓名、年齡、成績都是數據。

  • 數據庫(Database, DB):指有組織的數據集合,便于存儲、管理和檢索。例如,學校的學生信息管理系統就是一個數據庫。

1.2 數據庫管理系統(DBMS)

數據庫管理系統(Database Management System, DBMS)是用于管理數據庫的軟件系統,如:

  • 關系型數據庫:MySQL、PostgreSQL、Oracle、SQL Server

  • 非關系型數據庫:MongoDB、Redis、Cassandra

DBMS 的主要功能包括:

  • 數據定義(創建、修改表結構)

  • 數據操作(增刪改查)

  • 數據安全(權限控制)

  • 事務管理(保證數據一致性)

1.3 數據庫系統(DBS)

數據庫系統(Database System, DBS)包括:

  • 數據庫(DB)

  • 數據庫管理系統(DBMS)

  • 應用程序(如網站、APP)

  • 用戶(管理員、開發者、普通用戶)

2. 數據庫模型

數據庫模型決定了數據如何存儲和組織,主要分為?關系型數據庫(RDBMS)?和?非關系型數據庫(NoSQL)

2.1 關系型數據庫(RDBMS)

關系型數據庫以?表(Table)?的形式存儲數據,表由?行(Row)?和?列(Column)?組成。

示例:學生信息表(Students)
StudentID?(主鍵)NameAgeMajor
1張三20計算機
2李四21數學
3王五19物理
  • 表(Table):存儲特定類型的數據(如學生信息)。

  • 行(Row)/ 元組(Tuple):代表一條記錄(如一個學生的數據)。

  • 列(Column)/ 屬性(Attribute):代表數據的某個特征(如姓名、年齡)。

  • 主鍵(Primary Key):唯一標識一行(如?StudentID)。

  • 外鍵(Foreign Key):用于關聯不同表(如?StudentID?可以關聯到成績表)。

SQL 示例(關系型數據庫操作)
-- 創建表
CREATE TABLE Students (StudentID INT PRIMARY KEY,Name VARCHAR(50),Age INT,Major VARCHAR(50)
);-- 插入數據
INSERT INTO Students (StudentID, Name, Age, Major)
VALUES (1, '張三', 20, '計算機');-- 查詢數據
SELECT * FROM Students WHERE Age > 19;-- 更新數據
UPDATE Students SET Age = 22 WHERE StudentID = 1;-- 刪除數據
DELETE FROM Students WHERE StudentID = 3;

2.2 非關系型數據庫(NoSQL)

NoSQL 數據庫適用于非結構化或半結構化數據,主要類型包括:

  1. 鍵值存儲(Key-Value):如 Redis

  2. 文檔存儲(Document):如 MongoDB

  3. 列存儲(Column-Family):如 Cassandra

  4. 圖數據庫(Graph):如 Neo4j

示例:MongoDB(文檔存儲)
// 學生文檔(JSON 格式)
{"_id": 1,"name": "張三","age": 20,"major": "計算機","courses": ["數據結構", "算法"]
}

MongoDB 操作示例

// 插入數據
db.students.insertOne({_id: 1,name: "張三",age: 20,major: "計算機"
});// 查詢數據
db.students.find({ age: { $gt: 19 } });// 更新數據
db.students.updateOne({ _id: 1 },{ $set: { age: 22 } }
);// 刪除數據
db.students.deleteOne({ _id: 3 });

3. 數據庫的核心組件

3.1 表(Table)

表是關系型數據庫的基本存儲單位,例如:

  • Students?表存儲學生信息

  • Courses?表存儲課程信息

3.2 主鍵(Primary Key)

唯一標識表中的每一行,如?StudentID

3.3 外鍵(Foreign Key)

用于建立表之間的關系,例如:

  • Students?表有?StudentID

  • Scores?表引用?StudentID?關聯學生和成績

示例:外鍵關聯
-- 創建成績表(Scores)
CREATE TABLE Scores (ScoreID INT PRIMARY KEY,StudentID INT,Course VARCHAR(50),Score INT,FOREIGN KEY (StudentID) REFERENCES Students(StudentID)
);

3.4 索引(Index)

提高查詢速度,例如:

-- 在 Students 表的 Name 列上創建索引
CREATE INDEX idx_name ON Students(Name);

3.5 視圖(View)

虛擬表,基于 SQL 查詢結果:

-- 創建視圖:顯示年齡大于 19 的學生
CREATE VIEW AdultStudents AS
SELECT * FROM Students WHERE Age > 19;

4. 數據庫操作語言(SQL)

4.1 數據定義語言(DDL)

用于定義數據庫結構:

CREATE TABLE ...  -- 創建表
ALTER TABLE ...   -- 修改表
DROP TABLE ...    -- 刪除表

4.2 數據操作語言(DML)

用于操作數據:

INSERT INTO ...   -- 插入數據
SELECT ...        -- 查詢數據
UPDATE ...        -- 更新數據
DELETE FROM ...   -- 刪除數據

4.3 數據控制語言(DCL)

用于權限管理:

GRANT SELECT ON Students TO user1;  -- 授權
REVOKE SELECT ON Students FROM user1; -- 撤銷權限

5. 數據庫特性

5.1 ACID 原則

  • 原子性(Atomicity):事務要么全部成功,要么全部失敗(如銀行轉賬)。

  • 一致性(Consistency):事務執行前后數據保持一致。

  • 隔離性(Isolation):多個事務并發執行時互不干擾。

  • 持久性(Durability):事務提交后,數據永久保存。

示例:銀行轉賬事務
BEGIN TRANSACTION;UPDATE Accounts SET Balance = Balance - 100 WHERE AccountID = 1;UPDATE Accounts SET Balance = Balance + 100 WHERE AccountID = 2;
COMMIT;

5.2 事務(Transaction)

一組 SQL 操作,作為一個整體執行:

START TRANSACTION;INSERT INTO Orders (OrderID, CustomerID) VALUES (101, 1);INSERT INTO OrderDetails (OrderID, ProductID) VALUES (101, 1001);
COMMIT;

5.3 規范化(Normalization)

減少數據冗余,提高數據一致性:

  • 第一范式(1NF):每個列不可再分(如?Address?不能包含?City?和?Street)。

  • 第二范式(2NF):滿足 1NF,并且非主鍵列完全依賴主鍵。

  • 第三范式(3NF):滿足 2NF,并且非主鍵列之間沒有傳遞依賴。

6. 數據庫應用場景

  1. 關系型數據庫:適用于結構化數據,如銀行系統、ERP。

  2. NoSQL 數據庫:適用于大數據、實時分析,如社交網絡、IoT。

  3. 內存數據庫(Redis):適用于緩存、會話管理。

  4. 圖數據庫(Neo4j):適用于推薦系統、社交網絡分析。

結論

數據庫是現代信息系統的核心,理解其基本概念和操作至關重要。本文介紹了:

  • 數據庫的基本概念(DB、DBMS、DBS)

  • 關系型數據庫 vs. NoSQL

  • 核心組件(表、主鍵、外鍵、索引)

  • SQL 語言(DDL、DML、DCL)

  • 數據庫特性(ACID、事務、規范化)

無論是開發網站、APP,還是進行數據分析,掌握數據庫知識都能讓你更高效地管理和利用數據。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/80861.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/80861.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/80861.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

前端-HTML基本概念

目錄 什么是HTML 常用的瀏覽器引擎是什么? 常見的HTML實體字符 HTML注釋 HTML語義化是什么?為什么要語義化?一定要語義化嗎? 連續空格如何渲染? 聲明文檔類型 哪些字符集編碼支持簡體中文? 如何解…

Linux進程信號處理(26)

文章目錄 前言一、信號的處理時機處理情況“合適”的時機 二、用戶態與內核態概念重談進程地址空間信號的處理過程 三、信號的捕捉內核如何實現信號的捕捉?sigaction 四、信號部分小結五、可重入函數六、volatile七、SIGCHLD 信號總結 前言 這篇就是我們關于信號的最…

C++ 字符格式化輸出

文章目錄 一、簡介二、實現代碼三、實現效果 一、簡介 這里使用std標準庫簡單實現一個字符格式化輸出&#xff0c;方便后續的使用&#xff0c;它有點類似Qt中的QString操作。 二、實現代碼 FMTString.hpp #pragma once#include <cmath> #include <cstdio> #include…

python高級特性

json.dumps({a:1,n:2}) #Python 字典類型轉換為 JSON 對象。相當于jsonify data2 json.loads(json_str)#將 JSON 對象轉換為 Python 字典 異步編程&#xff1a;在異步編程中&#xff0c;程序可以啟動一個長時間運行的任務&#xff0c;然后繼續執行其他任務&#xff0c;而無需等…

ubuntu24離線安裝docker

一、確認ubuntu版本 root@dockerserver:/etc/pam.d# lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 24.04.2 LTS Release: 24.04 Codename: noble 根據codename確認。 docker官方網址下載 https://download.docker.com/linux/…

索尼(sony)攝像機格式化后mp4的恢復方法

索尼(sony)的Alpha 7 Ⅳ系列絕對稱的上是索尼的“全畫幅標桿機型”&#xff0c;A7M4配備了3300萬像素的CMOS&#xff0c;以及全新研發的全畫幅背照式Exmor R?CMOS影像傳感器&#xff0c;搭載BIONZ XR?影像處理器&#xff0c;與旗艦微單?Alpha 1如出一轍。下面我們來看看A7M4…

2025最新出版 Microsoft Project由入門到精通(七)

目錄 優化資源——在資源使用狀況視圖中查看資源的負荷情況 在資源圖表中查看資源的負荷情況 優化資源——資源出現沖突時的原因及處理辦法 資源過度分類的處理解決辦法 首先檢查任務工時的合理性并調整 增加資源供給 回到資源工作表中雙擊對應的過度分配資源 替換資…

最短路與拓撲(1)

1、找最長良序字符串 #include<bits/stdc.h> using namespace std; const int N105; int dis[N]; int vis[N]; int edge[N][N]; int n,m; int vnum;void dij(int u, int v) {// 初始化距離數組和訪問標記for(int i0; i<vnum; i) {vis[i] 0;dis[i] edge[u][i];}// D…

降低60.6%碰撞率!復旦大學地平線CorDriver:首次引入「走廊」增強端到端自動駕駛安全性

導讀 復旦大學&地平線新作-CorDriver: 首次通過引入"走廊"作為中間表征&#xff0c;揭開一個新的范式。預測的走廊作為約束條件整合到軌跡優化過程中。通過擴展優化的可微分性&#xff0c;使優化后的軌跡能無縫地在端到端學習框架中訓練&#xff0c;從而提高安全…

CSS flex:1

在 CSS 中&#xff0c;flex: 1 是一個用于彈性布局&#xff08;Flexbox&#xff09;的簡寫屬性&#xff0c;主要用于控制 flex 項目&#xff08;子元素&#xff09;如何分配父容器的剩余空間。以下是其核心作用和用法&#xff1a; 核心作用 等分剩余空間&#xff1a;讓 flex …

1.6 關于static和final的修飾符

一.static static是靜態修飾符&#xff0c;用于修飾類成員&#xff08;變量&#xff0c;方法&#xff0c;代碼塊&#xff09; 被修飾的類成員屬于類&#xff0c;不必生成示例&#xff0c;即可直接調用屬性或者方法。 關于代碼塊&#xff0c;被static修飾的代碼塊是靜態代碼塊…

數據結構—(鏈表,棧,隊列,樹)

本文章寫的比較亂&#xff0c;屬于是縫合怪&#xff0c;很多細節沒處理&#xff0c;顯得粗糙&#xff0c;日后完善&#xff0c;今天趕時間了。 1. 紅黑樹的修復篇章 2. 紅黑樹的代碼理解&#xff08;部分寫道注釋之中了&#xff09; 3. 隊列與棧的代碼 4. 重要是理解物理邏輯&a…

每日Prompt:發光線條解剖圖

提示詞 一幅數字插畫&#xff0c;描繪了一個 [SUBJECT]&#xff0c;其結構由一組發光、干凈且純凈的藍色線條勾勒而成。畫面設定在深色背景之上&#xff0c;以突出 [SUBJECT] 的形態與特征。某個特定部位&#xff0c;如 [PART]&#xff0c;通過紅色光暈加以強調&#xff0c;以…

【時時三省】(C語言基礎)使用字符串處理函數

山不在高&#xff0c;有仙則名。水不在深&#xff0c;有龍則靈。 ----CSDN 時時三省 在C函數庫中提供了一些用來專門處理字符串的函數&#xff0c;使用方便。幾乎所有版本的C語言編譯系統都提供這些函數。下面介紹幾種常用的函數。 ①puts函數 輸出字符串的函數 其一般形式…

構建可信數據空間需要突破技術、規則和生態三大關鍵

構建可信數據空間需要突破技術、規則和生態三大關鍵&#xff1a;技術上要解決"可用不可見"的隱私計算難題&#xff0c;規則上要建立動態確權和跨境流動的治理框架&#xff0c;生態上要形成多方協同的標準體系。他強調&#xff0c;只有實現技術可控、規則可信、生態協…

模板的使用

模板 模板的概念&#xff1a;模板就是建立一個通用的模具&#xff0c;大大提高復用性 c中模板機制分為兩類 函數模板 建立一個通用函數&#xff0c;其函數返回值類型和形參類型可以不具體定制&#xff0c;用一個虛擬的類型來代表 template<typename T> //template 聲…

YOLOv1:開啟實時目標檢測的新篇章

YOLOv1&#xff1a;開啟實時目標檢測的新篇章 在深度學習目標檢測領域&#xff0c;YOLO&#xff08;You Only Look Once&#xff09;系列算法無疑占據著重要地位。其中&#xff0c;YOLOv1作為開山之作&#xff0c;以其獨特的設計理念和高效的檢測速度&#xff0c;為后續的目標…

vim中的查找

在 Vim 中&#xff0c;使用 n 鍵可以按正向&#xff08;向下&#xff09;繼續查找下一個匹配項。若要反向&#xff08;向上&#xff09;查找&#xff0c;可以使用以下方法&#xff1a; 1. 使用 N 鍵反向查找 在查找命令&#xff08;如 /keyword&#xff09;后&#xff0c;按下…

卡爾曼濾波通俗理解

卡爾曼濾波器的目的與意義何在&#xff1f; - 陳不陳的回答 - 知乎 https://www.zhihu.com/question/41351736/answer/3057034500 這是一個比較通俗易懂的例子&#xff0c;讀完之后可以對卡爾曼濾波怎么使用有比較直觀的理解。 &#x1f9e0; 一、卡爾曼濾波是什么&#xff1f;…

對抗帕金森:在疾病陰影下,如何重掌生活主動權?

帕金森病&#xff0c;一種影響全球超 1000 萬人的神經退行性疾病&#xff0c;正無聲地改變著患者的生活軌跡。隨著大腦中多巴胺分泌減少&#xff0c;患者逐漸出現肢體震顫、肌肉僵硬、步態遲緩等癥狀&#xff0c;甚至連扣紐扣、端水杯這類日常動作都變得艱難。更棘手的是&#…