關係型資料庫

来源:http://www.cnblogs.com/Fucx/archive/2016/03/01/5231352.html
-Advertisement-
Play Games

關係型資料庫的定義及設計思路


1、關係型資料庫

關係型資料庫:是一種建立在關係模型(數學模型)上的資料庫。

關係模型:一種所謂建立在關係上的模型。關係模型包含三個方面:

數據:數據存儲的問題,二維表(有行和列)

操作指令集合:所有SQL語句

完整性約束:表內數據約束(欄位與欄位),表與表之間約束(外鍵)

2、關係型資料庫的設計

關係型資料庫:從需要存儲的數據需求中分析,如果是一類數據(實體)應該設計成一張二維表;表是由表頭(欄位名:用來規定數據的名字)和數據部分組成(實際存儲的數據單元)

二維表:行和列

表頭 欄位名1 欄位名2
數據單元 數據1 數據線

以實際的案例來進行分析:分析一個教學系統,講師負責教學,教學生,在教室裡面教學生

①找出系統中所存在的實體:講師表,學生表,班級表

②找出實體中應該存在的數據信息

講師:姓名,性別,年齡,工資……

學生:姓名,性別,學號,學科……

班績:班級名字,教室編號……

關係型資料庫:維護實體內部,實體與實體之間的聯繫

實體內部聯繫:每個學生都有姓名,性別,學科信息

姓名 性別 學號 學科 年齡
陳滔 030310303 化學工程 22
杜洪 030320305 化工原理  
付威   030330303 物理化學  

第二行的所有欄位,都是在描述陳明這個學生(內部聯繫);第二列只能放性別(內部約束)——實體內部的聯繫

關係型資料庫的特點之一:如果有表中對應的某一個欄位沒有值(數據),但是系統依然要分配空間:關係型資料庫比較浪費空間

實體與實體之間的聯繫:每個學生肯定屬於某個班級,每個班級一定有多個學生(一對多)

第二行的所有欄位,都是在描述陳明這個學生(內部聯繫);第二列只能放性別(內部約束)——實體內部的聯繫

關係型資料庫的特點之一:如果有表中對應的某一個欄位沒有值(數據),但是系統依然要分配空間:關係型資料庫比較浪費空間

實體與實體之間的聯繫:每個學生肯定屬於某個班級,每個班級一定有多個學生(一對多)

姓名 性別 學號 學科 年齡
陳滔 030310303 化學工程 22
杜洪 030320305 化工原理  
付威   030330303 物理化學  

班級表

班級名稱 教室編號
化工原理 B203
物理化學 A305

問題:從上述兩個表中能否確定哪個學生屬於哪個班級或者哪個班級有哪些學生?

解決方案:在學生表中增加一個班級欄位來指向班級(必須能夠唯一的找到一個班級信息)

姓名 性別 學號 學科 年齡 班級信息
陳滔 030310303 化學工程 22 化工原理
杜洪 030320305 化工原理   物理化學
付威   030330303 物理化學   物理化學

學生實體與班級實體的關聯關係——實體與實體之間的關係


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 引用自 :http://www.2cto.com/database/201307/224836.html Oracle創建自增欄位方法-ORACLE SEQUENCE的簡單介紹 先假設有這麼一個表: create table S_Depart ( DepartId INT not null, Dep
  • 1 -- create function 2 create function [dbo].[fnXmlToJson] (@XmlData xml) 3 returns nvarchar(max) 4 as 5 begin 6 return 7 (select stuff( 8 (select 9 *
  • Sql Server的存儲過程是一個被命名的存儲在伺服器上的Transacation-Sql語句集合,是封裝重覆性工作的一種方法,它支持用戶聲明的變數、條件執行和其他強大的編程功能。 存儲過程相對於其他的資料庫訪問方法有以下的優點: (1)重覆使用。存儲過程可以重覆使用,從而可以減少資料庫開發人員的
  • mysql 主從 複製
  • 1、以下是一個簡單事務存儲過程,其中Users表ID為主鍵 CREATE PROCEDURE SP_TRANSACTIONAS BEGIN BEGIN TRANSACTION INSERT INTO USERS(ID,NAME)VALUES(1000,'TEST1000'); IF @@ERROR<
  • GRANT privilege [, ...] ON object [ ( column [, ...] ) ] [, ...] TO { PUBLIC | username [, ...] } [ WITH GRANT OPTION ] 這些欄位與 Postgres 實現是相容的,除了下麵一些例外
  • (1)選擇最有效率的表名順序(只在基於規則的優化器中有效):Oracle的解析器按照從右到左的順序處理FROM子句中的表名,FROM子句中寫在最後的表(基礎表 driving table)將被最先處理,在FROM子句中包含多個表的情況下,你必須選擇記錄條數最少的表作為基礎表。如果有3個以上的表連接查
  • 本文內容 Elasticsearch logstash 本文介紹安裝 logstash 2.2.0 和 elasticsearch 2.2.0,操作系統環境版本是 CentOS/Linux 2.6.32-504.23.4.el6.x86_64。 安裝 JDK 是必須的,一般操作系統都會有,只是版本的...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...