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