資料庫設計--實踐

来源:http://www.cnblogs.com/Aiapple/archive/2016/07/18/5682531.html
-Advertisement-
Play Games

目標與目的 學習目標: 掌握日常資料庫建表操作 瞭解表設計的規範 何為表結構設計: 表結構設計需要在正式進行開發之前完成 根據產品需求將複雜的業務模型抽象出來 項目分析 實踐課程模型: 類似電商類的網站 用戶: 核心業務 非核心業務 核心業務: 交易相關 訂單詳情,訂單 商品相關 商品類別,商品 非 ...


目標與目的
學習目標:
  • 掌握日常資料庫建表操作
  • 瞭解表設計的規範
  何為表結構設計:
  • 表結構設計需要在正式進行開發之前完成
  • 根據產品需求將複雜的業務模型抽象出來
  項目分析
實踐課程模型:
  • 類似電商類的網站
用戶:
  1. 核心業務
  2. 非核心業務
  核心業務:
  • 交易相關
    • 訂單詳情,訂單  
  • 商品相關
    • 商品類別,商品  
非核心業務:
  • 物流
  • 供應商信息
  業務模型轉表

 

用戶:   tb_account(用戶表) 商品類:tb_goods_category(商品類別表) tb_goods(商品詳情表) 交易類:tb_order_item(交易訂單詳情表)  tb_order(交易表)   設計表的時候需要註意哪些
  • 理解各個表的依賴關係
  • 理解各個表的功能特點(欄位之間的約束,索引;欄位類型,欄位長度)
  收集表屬性 用戶表:

 

自增屬性,auto_increment 圖片不會直接存在資料庫,在資料庫中之後存圖片的一個url地址,有專門的圖片存儲系統去存圖片     varchar VS text 在存儲特別長的欄位時 一般從兩個方面:   1.性能                           2.存儲上限   varchar 最大長度65535,如果用utf8及3個位元組; varchar最大為65535/3=21845 65535及2的16次方   網易數據類型-命名規範
  • 所有表名,欄位名全部使用小寫字母
  • 不同業務,表名使用不同首碼區分
  • 生成環境表名欄位名要有實際意義
  • 單個欄位儘量使用欄位全名;多個欄位名之間使用下劃線分隔
  欄位設計規範:
  • 存儲空間(儘量選擇能滿足應用要求的最小數據類型)
  • 前瞻性(儘量使用整型代替字元型)
  • 註釋,每個欄位必須以COMMENT語句給出欄位的作用
  • 經常訪問的大欄位(如blob,text)等需要單獨放到一張表中,避免降低SQL效率,圖片,電影等大文件數據禁止存放資料庫
  • 新業務統一建議使用utf8mb4字元集(適應蘋果手機的imoge表情庫)
  用戶賦權註意:
  • 理解用戶到底需要什麼許可權
    • 普通用戶只有讀寫許可權 
    • 系統管理員具有super許可權
  • 許可權粒度要做到儘可能的細
    • 普通用戶不要設置with  grant option 屬性
    • 許可權粒度:系統層面>庫層面>表層面>欄位層面  
  • 禁止簡單密碼
    • 線上密碼要求隨機
表結構      
--

-- Table structure for table `tb_account`

--

 

DROP TABLE IF EXISTS `tb_account`;

/*!40101 SET @saved_cs_client     = @@character_set_client */;

/*!40101 SET character_set_client = utf8 */;

CREATE TABLE `tb_account` (

  `account_id` int(11) NOT NULL AUTO_INCREMENT,

  `nick_name` varchar(20) DEFAULT NULL,

  `true_name` varchar(20) DEFAULT NULL,

  `sex` char(1) DEFAULT NULL,

  `mail_address` varchar(50) DEFAULT NULL,

  `phone1` varchar(20) NOT NULL,

  `phone2` varchar(20) DEFAULT NULL,

  `password` varchar(30) NOT NULL,

  `create_time` datetime DEFAULT NULL,

  `account_state` tinyint(4) DEFAULT NULL,

  `last_login_time` datetime DEFAULT NULL,

  `last_login_ip` varchar(20) DEFAULT NULL,

  PRIMARY KEY (`account_id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

/*!40101 SET character_set_client = @saved_cs_client */;

 

--

-- Table structure for table `tb_goods`

--

 

DROP TABLE IF EXISTS `tb_goods`;

/*!40101 SET @saved_cs_client     = @@character_set_client */;

/*!40101 SET character_set_client = utf8 */;

CREATE TABLE `tb_goods` (

  `goods_id` bigint(20) NOT NULL AUTO_INCREMENT,

  `goods_name` varchar(100) NOT NULL,

  `pic_url` varchar(500) NOT NULL,

  `store_quantity` int(11) NOT NULL,

  `goods_note` varchar(800) DEFAULT NULL,

  `producer` varchar(500) DEFAULT NULL,

  `category_id` int(11) NOT NULL,

  PRIMARY KEY (`goods_id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

/*!40101 SET character_set_client = @saved_cs_client */;

 

--

-- Table structure for table `tb_goods_category`

--

 

DROP TABLE IF EXISTS `tb_goods_category`;

/*!40101 SET @saved_cs_client     = @@character_set_client */;

/*!40101 SET character_set_client = utf8 */;

CREATE TABLE `tb_goods_category` (

  `category_id` int(11) NOT NULL AUTO_INCREMENT,

  `category_level` smallint(6) NOT NULL,

  `category_name` varchar(500) DEFAULT NULL,

  `upper_category_id` int(11) NOT NULL,

  PRIMARY KEY (`category_id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

/*!40101 SET character_set_client = @saved_cs_client */;

 

--

-- Table structure for table `tb_order`

--

 

DROP TABLE IF EXISTS `tb_order`;

/*!40101 SET @saved_cs_client     = @@character_set_client */;

/*!40101 SET character_set_client = utf8 */;

CREATE TABLE `tb_order` (

  `order_id` bigint(20) NOT NULL AUTO_INCREMENT,

  `account_id` int(11) NOT NULL,

  `create_time` datetime DEFAULT NULL,

  `order_amount` decimal(12,2) DEFAULT NULL,

  `order_state` tinyint(4) DEFAULT NULL,

  `update_time` datetime DEFAULT NULL,

  `order_ip` varchar(20) DEFAULT NULL,

  `pay_method` varchar(20) DEFAULT NULL,

  `user_notes` varchar(500) DEFAULT NULL,

  PRIMARY KEY (`order_id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

/*!40101 SET character_set_client = @saved_cs_client */;

 

--

-- Table structure for table `tb_order_item`

--

 

DROP TABLE IF EXISTS `tb_order_item`;

/*!40101 SET @saved_cs_client     = @@character_set_client */;

/*!40101 SET character_set_client = utf8 */;

CREATE TABLE `tb_order_item` (

  `order_item_id` bigint(20) NOT NULL AUTO_INCREMENT,

  `order_id` bigint(20) NOT NULL,

  `goods_id` bigint(20) NOT NULL,

  `goods_quantity` int(11) NOT NULL,

  `goods_amount` decimal(12,2) DEFAULT NULL,

  PRIMARY KEY (`order_item_id`),

  UNIQUE KEY `uk_order_goods` (`order_id`,`goods_id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

/*!40101 SET character_set_client = @saved_cs_client */;

/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;

 


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

-Advertisement-
Play Games
更多相關文章
  • 相對佈局由其名稱大致可以猜測其是相對於其他的控制項進行佈局的。因此呢!其屬性也就比較多了,不過基本上都是有跡可循的。下麵就其屬性值的特點可以將一些常用的屬性分為以下三個類別。 1. 屬性值為true或false(相對於父控制項的位置) android:layout_centerHrizontal 水平居 ...
  • 顧名思義,LinearLayout是指將佈局或者是控制項以線性的形式排布到佈局里;當然,此處就涉及到兩個方向的排布,只要將LinearLayout中的android:orientation屬性的屬性值設置為vertical(垂直方向)和horizontal(水平方向)即可。 線性佈局當中的一些常見屬性 ...
  • 狀態欄動畫切換效果 效果 源碼 https://github.com/YouXianMing/iOS-Project-Examples 中的 StatusBarAnimation ...
  • 1、UIApplication(應用程式實例) 獲取方式:[UIApplication sharedApplication] 詳細:http://www.cnblogs.com/hissia/p/5678518.html 2、NSNotificationCenter(消息中心) 獲取方式:[NSNo ...
  • user_tab_columns來源於user_tab_cols,user_tab_cols where hidden_column='NO',引自:http://blog.csdn.net/gumengkai/article/details/50823140 user_all_tables 是 u ...
  • 我執行下邊的sql語句 得到下麵結果 誰能告訴我那一步沒有去重嗎? ...
  • 工作中的問題總結: 問題一:scala 之向下轉型 引言:假如在複雜的業務邏輯中,變數的類型不能確認,只能給個介面類型,這樣數據類型推導不會錯誤,但是後面要使用實現類的類型時,你卻發現轉不過來了? 對於這樣的一個問題,scala可以這樣解決: 首先建造一個介面,People: 這樣定義了一個介面,接 ...
  • sql語言進階 典型操作 order by - select * from play_list order by createtime; - select * from play_list order by bookedcount desc,createtime asc; order by 語句用於 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...