數據庫入門教程:以商品訂單系統為例

數據庫入門教程:以商品訂單系統為例

一、前言

數據庫是現代軟件開發中不可或缺的基礎,掌握數據庫的基本概念和操作,是每個開發者的必經之路。本文將以“商品-品牌-客戶-訂單-訂單項”為例,帶你快速入門數據庫的核心知識和基本操作。


二、數據庫基礎知識回顧

1. 主鍵(Primary Key, PK)

主鍵是表中用來唯一標識一條記錄的一列或多列的組合。主鍵分為業務主鍵(如身份證號、手機號等有實際業務意義的字段)和代理主鍵(如自增ID)。

2. 外鍵(Foreign Key, FK)

外鍵用于連接兩張表,是引用另一張表的主鍵或唯一鍵,用于保證數據的完整性和關聯性。

3. 關系范式

  • 1NF(第一范式):每一列的值都是不可再分的原子值。
  • 2NF(第二范式):表中的每個非主屬性都完全依賴于主鍵。
  • 3NF(第三范式):非主屬性之間不能有傳遞依賴。

范式的意義:消除冗余、保證數據完整性和一致性。


三、SQL 語言分類

  • DDL(數據定義語言):用于定義和管理數據庫對象(如表、視圖、索引等)。
    • CREATE:創建
    • ALTER:修改
    • DROP:刪除
    • TRUNCATE:清空
    • GRANT:授權
  • DML(數據操作語言):用于對數據進行增刪改查(CRUD)。
    • INSERT:插入
    • SELECT:查詢
    • UPDATE:更新
    • DELETE:刪除
  • TCL(事務控制語言):用于管理事務。

四、常用數據類型

  • 數值類型bittinyintsmallintintbigintdecimaldouble
  • 文本類型CHARVARCHARTEXTBLOBENUMSET
  • 日期時間類型DATETIMEDATETIMETIMESTAMPYEAR
  • JSON類型:用于存儲結構化數據(如數組、對象)

五、實戰:商品訂單系統表設計

1. 創建數據庫

CREATE DATABASE shopdb;
USE shopdb;

2. 創建表結構

(1)品牌表
CREATE TABLE brand (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(32) NOT NULL
);
(2)商品表
CREATE TABLE product (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(64) NOT NULL,price DECIMAL(10,2) NOT NULL,brand_id INT,FOREIGN KEY (brand_id) REFERENCES brand(id)
);
(3)客戶表
CREATE TABLE customer (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(32) NOT NULL,tel CHAR(11),birthday DATE
);
(4)訂單表
CREATE TABLE orders (id INT PRIMARY KEY AUTO_INCREMENT,customer_id INT,order_date DATETIME DEFAULT CURRENT_TIMESTAMP,FOREIGN KEY (customer_id) REFERENCES customer(id)
);
(5)訂單項表
CREATE TABLE order_item (id INT PRIMARY KEY AUTO_INCREMENT,order_id INT,product_id INT,quantity INT NOT NULL,FOREIGN KEY (order_id) REFERENCES orders(id),FOREIGN KEY (product_id) REFERENCES product(id)
);

3. 插入數據示例

-- 插入品牌
INSERT INTO brand(name) VALUES ('華為'), ('蘋果');-- 插入商品
INSERT INTO product(name, price, brand_id) VALUES ('Mate60', 4999.00, 1), ('iPhone15', 6999.00, 2);-- 插入客戶
INSERT INTO customer(name, tel, birthday) VALUES ('張三', '13800000001', '1990-01-01'), ('李四', '13800000002', '1992-02-02');-- 插入訂單
INSERT INTO orders(customer_id) VALUES (1), (2);-- 插入訂單項
INSERT INTO order_item(order_id, product_id, quantity) VALUES (1, 1, 2), (1, 2, 1), (2, 2, 3);

4. 查詢數據示例

-- 查詢所有訂單及其客戶信息
SELECT o.id AS 訂單號, c.name AS 客戶名, o.order_date
FROM orders o
JOIN customer c ON o.customer_id = c.id;-- 查詢某訂單的商品明細
SELECT oi.order_id, p.name AS 商品名, oi.quantity, p.price
FROM order_item oi
JOIN product p ON oi.product_id = p.id
WHERE oi.order_id = 1;

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

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

相關文章

GeoServer樣式設置:使用本地圖標及分層/分視野顯示

GeoServer樣式設置:使用本地圖標及分層/分視野顯示 1、本地圖標生效設置2、GeoServer添加不同視野的圖標點樣式1)服務預覽效果2)本地圖標引用3)不同視野顯示不同圖標4)標注注記顯示空間的點數據,使用圖標來表示是非常常見的業務需求,而且由于在不同比例尺下,可能需要設…

DL00347-基于人工智能YOLOv11的安檢X光危險品刀具檢測含數據集

🚨 AI技術革新,提升安檢效率與安全性!YOLOv11助力X光危險品刀具檢測! 💡 在安全領域,效率與精準度的要求從未如此迫切。作為科研人員,是否一直在尋找一款可以提升安檢準確率、減少人工干預、提…

測試計劃與用例撰寫指南

測試計劃與用例撰寫指南 一、測試計劃:項目測試的 “導航地圖”1.1 測試計劃的核心目標 1.2 測試計劃的關鍵要素 1.2.1 項目概述 1.2.2 測試策略 1.2.3 資源與進度 1.2.4 風險評估與應對 二、測試用例:測試執行的 “行動指南”2.1 測試用例的設計原則 2…

微服務的應用案例

從“菜市場”到“智慧超市”:一場微服務的變革之旅 曾經,我們的系統像一個熙熙攘攘的傳統菜市場。所有功能模塊(攤販)都擠在一個巨大的單體應用中。用戶請求(買菜的顧客)一多,整個市場就擁堵不堪…

Java設計模式之觀察者模式:從基礎到高級的全面解析

文章目錄 一、觀察者模式基礎概念1.1 什么是觀察者模式?1.2 觀察者模式的四大角色1.3 觀察者模式類圖二、觀察者模式實現步驟2.1 基礎實現步驟2.2 詳細代碼實現第一步:定義主題接口第二步:定義觀察者接口第三步:創建具體主題第四步:創建具體觀察者第五步:客戶端使用三、觀…

GATT 服務的核心函數bt_gatt_discover的介紹

目錄 概述 1 GATT 基本概念 1.1 GATT 的介紹 1.2 GATT 的角色 1.3 核心組件 1.4 客戶端操作 2 bt_gatt_discover函數的功能和應用 2.1 函數介紹 2.1 發現類型(Discover Type) 3 典型使用流程 3.1 服務發現示例 3.2 級聯發現模式 3.3 按UUID過…

【更新至2023年】1985-2023年全國及各省就業人數數據(無缺失)

1985-2023年全國及各省就業人數數據(無缺失) 1、時間:1985-2023年 2、來源:Z國統計年鑒、各省年鑒、新中國60年 3、指標:就業人數 4、范圍:全國及31省 5、缺失情況:無缺失 6、指標解釋&am…

0基礎學習Linux之揭開朦朧一面:環境基礎開發工具

目錄 Linux下安裝軟件的方案: 對于操作系統的理解: 操作系統的生態問題: 什么是好的操作系統(os): 重新理解centos VS ubnutu VS kail: 關于yum: 用 yum 安裝軟件(安裝和卸載軟件一定要有r…

YOLO 算法詳解:實時目標檢測的里程碑

在計算機視覺領域,目標檢測一直是一個關鍵且熱門的研究方向,而 YOLO(You Only Look Once)算法憑借其出色的實時性和較高的檢測精度,成為了目標檢測算法中的明星選手。本文將深入探討 YOLO 算法的原理、發展歷程、技術優…

leetcode98.驗證二叉搜索樹:遞歸法中序遍歷的遞增性驗證之道

一、題目深度解析與BST核心性質 題目描述 驗證二叉搜索樹(BST)是算法中的經典問題,要求判斷給定的二叉樹是否滿足BST的定義: 左子樹中所有節點的值嚴格小于根節點的值右子樹中所有節點的值嚴格大于根節點的值左右子樹本身也必須…

MathQ-Verify:數學問題驗證的五步流水線,為大模型推理筑牢數據基石

MathQ-Verify:數學問題驗證的五步流水線,為大模型推理筑牢數據基石 大語言模型在數學推理領域進展顯著,但現有研究多聚焦于生成正確推理路徑和答案,卻忽視了數學問題本身的有效性。MathQ-Verify,通過五階段流水線嚴格…

八股戰神-JVM知識速查

1.JVM組成 JVM由那些部分組成,運行流程是什么? JVM是Java程序的運行環境 組成部分: 類加載器:加載字節碼文件到內存 運行時數據區:包括方法區,堆,棧,程序計數器,本地…

Maven:在原了解基礎上對pom.xml文件進行詳細解讀

一、pom.xml文件 就像項目管理軟件 Make 的 MakeFile、Ant 的 build.xml 一樣,Maven 項目的核心是 pom.xml。POM( Project Object Model,項目對象模型 ) 定義了項目的基本信息,用于描述項目如何構建,聲明項目依賴,等等…

Spring Cloud項目登錄認證從JWT切換到Redis + UUID Token方案

背景介紹 在傳統的Spring Boot項目中,用戶登錄認證常見的方案是使用JWT(JSON Web Token)來實現無狀態的身份驗證。JWT憑借自包含用戶信息、方便前后端分離、性能較好等優勢被廣泛采用。 然而,在實際項目中,JWT也有一…

MongoDB 快速整合 SpringBoot 示例

1.添加依賴<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spr…

Flyweight(享元)設計模式 軟考 享元 和 代理屬于結構型設計模式

1.目的&#xff1a;運用共享技術有效地支持大量細粒度的對象 Flyweight&#xff08;享元&#xff09;設計模式 是一種結構型設計模式&#xff0c;它的核心目的是通過共享對象來減少內存消耗&#xff0c;特別是在需要大量相似對象的場景中。Flyweight 模式通過將對象的共享細節與…

002大模型-提示詞工程,少樣本提示,角色扮演,思維鏈

一、提示詞工程 二、少樣本提示 三、角色扮演 四、思維鏈

華為OD機試真題——傳遞悄悄話(二叉樹最長路徑問題)(2025A卷:200分)Java/python/JavaScript/C/C++/GO最佳實現

2025 A卷 200分 題型 本專欄內全部題目均提供Java、python、JavaScript、C、C++、GO六種語言的最佳實現方式; 并且每種語言均涵蓋詳細的問題分析、解題思路、代碼實現、代碼詳解、3個測試用例以及綜合分析; 本文收錄于專欄:《2025華為OD真題目錄+全流程解析+備考攻略+經驗分…

「讀書報告」Spark實時大數據分析

這本書是清華大學出版社2018年出版的&#xff0c;我是2020年讀的&#xff0c;說真的的&#xff0c;不怎么喜歡這本書&#xff0c;所以作者我都不想提。有的人可能會奇怪&#xff0c;ailx10&#xff0c;你一個搞網絡安全的&#xff0c;怎么會去讀大數據相關的書&#xff0c;哎&a…

2025 河北ICPC( D. 金泰園(二分)-- C.年少的誓約(公式轉化))

文章目錄 2025 河北ICPCD. 金泰園&#xff08;二分&#xff09;C.年少的誓約(公式轉化)總結 2025 河北ICPC 題目鏈接&#xff1a; Attachments - The 9th Hebei Collegiate Programming Contest - Codeforces sdccpc20250522 - Virtual Judge 賽時&#xff1a;5道 D. 金泰…