新人淺談__(資料庫的設計__資料庫模型圖,資料庫E-R圖,三大範式)

来源:http://www.cnblogs.com/john69-/archive/2016/01/06/5105170.html
-Advertisement-
Play Games

>>>> 為什麼需要規範的資料庫設計在實際的項目開發中,如果系統的數據存儲量較大,設計的表比較多,表和表之間的關係比較複雜,就需要首先考慮規範的資料庫設計,然後進行創建庫,創建表的工作. 如果設計不當,會存在數據操作異常,修改複雜,數據冗餘等問題,程式性能會受到影響,通過進行規範化的資料庫設計,可....


>>>>  為什麼需要規範的資料庫設計

在實際的項目開發中,如果系統的數據存儲量較大,設計的表比較多,表和表之間的關係比較複雜,就需要首先考慮規範的資料庫設計,然後進行創建庫,創建表的工作.  

如果設計不當,會存在數據操作異常,修改複雜,數據冗餘等問題,程式性能會受到影響,通過進行規範化的資料庫設計,可以消除不必要的數據冗餘,獲得合理的資料庫設計,提高項目的應用性能.

>>>>設計資料庫的步驟

1.收集信息

  需要瞭解資料庫需要存儲哪些信息(數據),實現哪些功能.

2.標識實體

  在收集需求信息後,必須標識資料庫要管理的關鍵對象或實體,實體可以是有形的事物,如人和產品;也可以是無形的事物,如商業交易公司部門或發薪周期...

3.標識每個實體需要存儲的詳細信息(即實體的屬性)

  就是需要細分出每個實體中包含的子成員信息,也稱為該實體的屬性,這些屬性將組成表中的列.

4.標識實體之間的關係

  要標識實體之間的關係,需要分析資料庫表,確定這些表在邏輯上是如何相關的,然後添加關係列建立起表之間的連接.

 

--在需求分析階段解決了客戶的業務和數據處理需求後,就進入了概要設計階段,我們需要和項目的其他成員及客戶溝通,討論資料庫的設計是否滿足客戶的業務和數據的處理需求,資料庫的設計也需要圖形化的表達方式--E-R(Entity-Relationship)圖,也稱之為 實體-關係圖

>>>>E-R(Entity-Relationship)圖

(實體使用矩形表示,一般是名詞;屬性使用橢圓表示,一般也是名詞;聯繫使用菱形表示,一般是動詞)

1.實體

  就是指現實世界中具有區分其他事物的特征或屬性並與其他實體有聯繫的實體.嚴格的說,實體是指表中一行特定數據,也  常把整個表稱之為一個實體.

2.屬性

  屬性可以理解為實體的特征.屬性對應表中的列.

3.聯繫

  聯繫是兩個或多個實體之間的關聯關係

根據E-R圖繪製酒店管理系統的E-R圖

>>>>映射基數

  映射基數表示通過聯繫與該實體關聯的其他實體的個數,對於實體集X和Y之間的二元關係,映射基數必須為下列技術之一:

>>一對一:X中的一個實體最多與Y中的一個實體相關聯,並且Y中的一個實體最多與X中的一個實體相關聯.

>>一對多:X中的一個實體可以與Y中的任意數量實體相關聯;Y中的實體最多與X中的一個實體相關聯.

>>多對一:X中的一個實體最多與Y中的一個實體相關聯;Y中的實體可以與X中的任意數量實體相關聯.

>>多對多:X中的一個實體可以與Y中的任意數量實體相關聯,反之亦然.

 

>>>>邏輯設計——繪製資料庫模型圖

操作步驟:(1.新建資料庫模型圖  2.添加實體  3.添加數據列及相應的屬性  4.添加實體之間的映射關係)

 

>>>>資料庫規範化

  從用戶的角度而言,將所有信息放在一個表中很方便,因為這樣查詢資料庫可能會比較容易,但是在資料庫的實際操作中會出現很多的問題:

  1.信息重覆:會造成存儲空間的浪費及一些其他的問題,如(不小心輸入"標準間","標準" ,則在資料庫中將表示兩種不同的  客房類型)

  2.更新異常:冗餘信息不僅浪費存儲空間,還會增加更新的難度.

  3.插入異常(無法表示某些信息):如(同樣是標準間,卻因為入住人數不同而造成價格的差異)

  4.刪除異常(丟失有用的信息):當刪除一行的信息時可能會丟失有用的信息.如(當"標準間"的住房記錄中只有一條信息,那  麽當我們刪除此記錄的時候會把"標準間"這一記錄刪除,而"標準間"也就不復存在了)

 

>>>>規範設計

  在設計資料庫時,三大範式良好的規避了以上可能出現的錯誤

  1.第一範式

  確保每列的原子性.

  2.第二範式

  確保表中的每列都和主鍵相關(直接相關和間接相關皆可).

  3.第三範式

  確保每列都和主鍵直接相關,而不是間接相關.   (在上面的那張資料庫設計E-R圖就是符合第三範式的)

 


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

-Advertisement-
Play Games
更多相關文章
  • Convert函數和Cast函數都是轉化函數,效果是一樣的。cast函數,轉化,如果轉化之後,年齡還是Null的話,就顯示為“未知”Convert函數和Cast函數都是轉化函數,效果是一樣的。
  • 相信大家認真看完這篇文章就會知道怎麼去設計出高級的資料庫了!!!最近有朋友一直問我為什麼需要規範的的資料庫設計?專業人士解析:因為在實際的項目開發中,如果系統的數據存儲量較大,設計的表比較多,表和表之間的關係比較複雜,就需要首先考慮規範的資料庫設計,然後進行具體的創建庫,創建表的工作,不管是創建動....
  • 創建了一個外鍵,還有一點限制,就是當定義了ON Update/Delete CASCADE 的時候,該表不能再定義Instand Of Update/Delete 觸發器。這個是不允許的。如果定義了Instand Of觸發器改變了 Update 或者 Delete 的行為,那麼在級聯刪除的時候,引用...
  • 一.mongodb replication 介紹 官網上的第一句話就是Replication is the process of synchronizing data across multiple servers.翻譯過來就是replication(複製)是跨多個伺服器同步的過程,基本原理就是一....
  • 本文目錄列表:1、什麼是時間粒度?2、SQL Server提供的時間粒度3、SQL Server時間粒度代碼演示 4、SQL Server基準日期5、總結語6、參考清單列表什麼是時間粒度? 我們知道比如年、季度、月、旬(一個月分為上中下3旬)、日這樣的時間單位;也知道小時、分鐘、秒;也有短於秒的比....
  • 現實世界中的數據往往非常雜亂,未經處理的原始數據中某些屬性數據缺失是經常出現的情況。另外,在做特征工程時經常會有些樣本的某些特征無法求出。路漫漫其修遠兮,數據還是要繼續挖的,本文介紹幾種處理數據中缺失值的主要方法。
  • 最近在某個項目中,需要針對TFS的用戶按照所屬的AD組來進行數據分析,但發現TFS中並沒有存儲用戶所屬的組信息,故考慮直接從AD中提取這個信息並存放在SQL Server的資料庫表裡面去。經過一番GOOGLE後,找到瞭如下相關的資料:https://community.spiceworks.com/...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...