① 用Word製作表格後,如何對數據進行匯總
1、新建一個word文檔,並輸入序號匯總的數據,如圖,
② 資料庫表結構設計,常見的資料庫管理系統
一、數據場景 1、表結構簡介 任何工具類的東西都是為了解決某個場景下的問題,比如Redis緩存系統熱點數據,ClickHouse解決海量數據的實時分析,Mysql關系型資料庫存儲結構化數據。數據的存儲則需要設計對應的表結構,清楚的表結構,有助於快速開發業務,和理解系統。表結構的設計通常從下面幾個方面考慮:業務場景、設計規范、表結構、欄位屬性、數據管理。
2、用戶場景
例如存儲用戶基礎信息數據,通常都會下面幾個相關表結構:用戶信息表、單點登錄表、狀態管理表、支付賬戶表等。
用戶信息表
存儲用戶三要素相關信息:姓名,手機號,身份證,登錄密碼,郵箱等。
CREATE TABLE `ms_user_center` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用戶ID', `user_name` varchar(20) NOT NULL COMMENT '用戶名', `real_name` varchar(20) DEFAULT NULL COMMENT '真實姓名', `pass_word` varchar(32) NOT NULL COMMENT '密碼', `phone` varchar(20) NOT NULL COMMENT '手機號', `email` varchar(32) DEFAULT NULL COMMENT '郵箱', `head_url` varchar(100) DEFAULT NULL COMMENT '用戶頭像URL', `card_id` varchar(32) DEFAULT NULL COMMENT '身份證號', `user_sex` int(1) DEFAULT '1' COMMENT '用戶性別:0-女,1-男', `create_time` datetime DEFAULT NULL COMMENT '創建時間', `update_time` datetime DEFAULT NULL COMMENT '更新時間', `state` int(1) DEFAULT '1' COMMENT '是否可用,0-不可用,1-可用', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用戶表'; 單點登錄表
用意是在多個業務系統中,用戶登錄一次就可以訪問所有相互信任的業務子系統,是聚合業務平台常用的解決方案。
CREATE TABLE `ms_user_sso` ( `user_id` int(11) NOT NULL COMMENT '用戶ID', `sso_id` varchar(32) NOT NULL COMMENT '單點信息編號ID', `sso_code` varchar(32) NOT NULL COMMENT '單點登錄碼,唯一核心標識', `log_ip` varchar(32) DEFAULT NULL COMMENT '登錄IP地址', `create_time` datetime DEFAULT NULL COMMENT '創建時間', `update_time` datetime DEFAULT NULL COMMENT '更新時間', `state` int(1) DEFAULT '1' COMMENT '是否可用,0-不可用,1-可用', PRIMARY KEY (`user_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用戶單點登錄表'; 狀態管理表
系統用戶在使用時候可能出現多個狀態,例如賬戶凍結、密碼鎖定等,把狀態聚合到一起,可以更加方便的管理和驗證。
CREATE TABLE `ms_user_status` ( `user_id` int(11) NOT NULL COMMENT '用戶ID', `account_status` int(1) DEFAULT '1' COMMENT '賬戶狀態:0-凍結,1-未凍結', `real_name_status` int(1) DEFAULT '0' COMMENT '實名認證狀態:0-未實名,1-已實名', `pay_pass_status` int(1) DEFAULT '0' COMMENT '支付密碼是否設置:0-未設置,1-設置', `wallet_pass_status` int(1) DEFAULT '0' COMMENT '錢包密碼是否設置:0-未設置,1-設置', `wallet_status` int(1) DEFAULT '1' COMMENT '錢包是否凍結:0-凍結,1-未凍結', `email_status` int(1) DEFAULT '0' COMMENT '郵箱狀態:0-未激活,1-激活', `message_status` int(1) DEFAULT '1' COMMENT '簡訊提醒開啟:0-未開啟,1-開啟', `letter_status` int(1) DEFAULT '1' COMMENT '站內信提醒開啟:0-未開啟,1-開啟', `emailmsg_status` int(1) DEFAULT '0' COMMENT '郵件提醒開啟:0-未開啟,1-開啟', `create_time` datetime DEFAULT NULL COMMENT '創建時間', `update_time` datetime DEFAULT NULL COMMENT '更新時間', `state` int(1) DEFAULT '1' COMMENT '是否可用,0-不可用,1-可用', PRIMARY KEY (`user_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用戶狀態表'; 支付賬戶表
用戶交易的核心表,存儲用戶相關的賬戶資金信息。
CREATE TABLE `ms_user_wallet` ( `wallet_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '錢包ID', `user_id` int(11) NOT NULL COMMENT '用戶ID', `wallet_pwd` varchar(32) DEFAULT NULL COMMENT '錢包密碼', `total_account` decimal(20,2) DEFAULT '0.00' COMMENT '賬戶總額', `usable_money` decimal(20,2) DEFAULT '0.00' COMMENT '可用余額', `freeze_money` decimal(20,2) DEFAULT '0.00' COMMENT '凍結金額', `freeze_time` datetime DEFAULT NULL COMMENT '凍結時間', `thaw_time` datetime DEFAULT NULL COMMENT '解凍時間', `create_time` datetime DEFAULT NULL COMMENT '創建時間', `update_time` datetime DEFAULT NULL COMMENT '更新時間', `state` int(1) DEFAULT '1' COMMENT '是否可用,0-不可用,1-可用', PRIMARY KEY (`wallet_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用戶錢包'; 二、設計規范 1、涉及模塊
通過上面幾個表設計的案例,可以看到表設計關聯到資料庫的各個方面知識:數據類型,索引,編碼,存儲引擎等。表設計是一個很大的命題,不過也遵循一個基本規范:三範式。
2、三範式 基礎概念
一範式
表的列的具有原子性,不可再分解,即列的信息,不能分解,關系型資料庫MySQL、Oracle等自動的滿足。
二範式
每個事實的數據記錄只會出現一次, 不會冗餘, 通常設計一個主鍵來實現。
三範式
要求一個表中不包含已經存在於其它表的非主鍵信息,例如部門和員工的信息,員工表包含部門表的主鍵ID,則可以關聯獲取相關信息,沒必要在員工表保存相關信息。
優缺點對比
範式化設計
範式化結構設計通常更新快,因為冗餘數據較少,表結構輕巧,也更好的寫入內存中。但是查詢起來涉及到關聯,代價非常高,非常損耗查詢性能。
反範式化設計
所有的數據都在一張表中,避免關聯查詢,索引的有效性更高,但是數據的冗餘性極高。
建議結論
上述的兩種設計方式在實際開發中都是不存在的,在實際開發中都是混合使用。比如匯總統計,緩存數據,都會基於反範式化的設計。
三、欄位屬性
合適的欄位類型對於高性能來說非常重要,基本原則如下:簡單的類型佔用資源更少;在可以正確存儲數據的情況下,選最小的數據類型。
1、數據類型選擇 整數類型
TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT,根據數據類型範圍合理選擇即可。
實數類型
FLOAT、DOUBLE、DECIMAL,建議資金貨幣相關類型使用高精度DECIMAL存儲,或者把數據成倍擴大為整數,採用BIGINT存儲,不過處理相對麻煩。
字元類型
CHAR、VARCHAR,長度不確定建議採用VARCHAR存儲,不過VARCHAR類型需要額外開銷記錄字元串長度。CHAR適合存儲短字元,或者定長字元串,例如MD5的加密結構。
時間類型
DATETIME、TIMESTAMP,DATETIME保存大范圍的值,精度秒。TIMESTAMP以時間戳的格式,范圍相對較小,效率也相對較高,所以通常情況建議使用。
MySQL的欄位類型有很多種,可以根據數據特性選擇合適的,這里只描述常見的幾種類型。
2、基礎用法操作 數據類型
修改欄位類型
ALTER TABLE ms_user_sso MODIFY state CHAR(1) DEFAULT '0' ; ALTER TABLE ms_user_sso MODIFY state INT(1) DEFAULT '1' COMMENT '狀態:0不可用,1可用';
修改名稱位置
ALTER TABLE ms_user_sso CHANGE log_ip login_ip VARCHAR(32) AFTER update_time ; 索引使用
索引類型:主鍵索引,普通索引,唯一索引,組合索引,全文索引。這里演示普通索引的操作。MySQL的核心模塊,後續詳說。
添加索引
ALTER TABLE ms_user_wallet ADD INDEX user_id_index(user_id) ; CREATE INDEX state_index ON ms_user_wallet(state) ;
查看索引
SHOW INDEX FROM ms_user_wallet;
刪除索引
DROP INDEX state_index ON ms_user_wallet ;
修改索引
不具有真正意義上的修改,可以把原有的索引刪除之後,再次添加索引。
外鍵關聯
用處:外鍵關聯的作用保證多個數據表的數據一致性和完整性,建表時先有主表,後有從表;刪除數據表,需要先刪從表,再刪主表。復雜場景不建議使用,實際開發中用的也不多。
添加外鍵
ALTER TABLE ms_user_wallet ADD CONSTRAINT user_id_out_key FOREIGN KEY(user_id) REFERENCES ms_user_center(id) ;
刪除外鍵
ALTER TABLE ms_user_wallet DROP FOREIGN KEY user_id_out_key ; 四、表結構管理 1、查看結構 DESC ms_user_status ; SHOW CREATE TABLE ms_user_status ; 2、欄位結構 添加欄位 ALTER TABLE ms_user_status ADD `delete_time` datetime DEFAULT NULL COMMENT '刪除時間' ; 刪除欄位 ALTER TABLE ms_user_status DROP COLUMN delete_time ; 3、修改表名 ALTER TABLE ms_user_center RENAME ms_user_info ; 4、存儲引擎 存儲引擎 SELECT VERSION() ; SHOW ENGINES ;
MySQL 5.6 支持的存儲引擎有InnoDB、MyISAM、Memory、Archive、CSV、BLACKHOLE等。一般默認使用InnoDB,支持事務管理。該模塊MySQL核心,後續詳解。
修改引擎
數據量大的場景下,存儲引擎修改是一個難度極大的操作,容易會導致表的特性變動,引起各種後續反應,後續會詳說。
ALTER TABLE ms_user_sso ENGINE = MyISAM ; 5、修改編碼
表字元集默認使用utf8,通用,無亂碼風險,漢字3位元組,英文1位元組,utf8mb4是utf8的超集,有存儲4位元組例如表情符號時使用。
查看編碼 SHOW VARIABLES LIKE 'character%'; 修改編碼 ALTER TABLE ms_user_sso DEFAULT CHARACTER SET utf8mb4; 五、數據管理 1、增刪改查
添加數據
INSERT INTO ms_user_sso ( user_id,sso_id,sso_code,create_time,update_time,login_ip,state ) VALUES ( '1','SSO7637267','SSO78631273612', '2019-12-24 11:56:57','2019-12-24 11:57:01','127.0.0.1','1' );
更新數據
UPDATE ms_user_sso SET user_id = '1',sso_id = 'SSO20191224',sso_code = 'SSO20191224', create_time = '2019-11-24 11:56:57',update_time = '2019-11-24 11:57:01', login_ip = '127.0.0.1',state = '1' WHERE user_id = '1';
查詢數據
一般情況下都是禁止使用 select* 操作。
SELECT user_id,sso_id,sso_code,create_time,update_time,login_ip,state FROM ms_user_sso WHERE user_id = '1';
刪除數據
DELETE FROM ms_user_sso WHERE user_id = '2' ;
不帶where條件,就是刪除全部數據。原則上不允許該操作,優化篇會詳解。TRUNCATE TABLE也是清空表數據,但是佔用的資源相對較少。
2、數據安全 不可逆加密
這類加密演算法,多用來做數據驗證操作,比如常見的密碼驗證。
SELECT MD5('cicada')='' ; SELECT SHA('cicada')=''; SELECT PASSWORD('smile')='*' ; 可逆加密
安全性要求高的系統,需要做三級等保,對數據的安全性極高,數據在存儲時必須加密入庫,取出時候需要解密,這些就需要可逆加密。
SELECT DECODE(ENCODE('123456','key_salt'),'key_salt') ; SELECT AES_DECRYPT(AES_ENCRYPT('cicada','salt123'),'salt123');
上述數據安全的管理,也可以基於應用系統的服務(代碼)層進行處理,相對專業的流程是從數據生成源頭處理,規避數據傳遞過程泄露,造成不必要的風險。
③ 一般台帳表資料庫,怎麼設計,最優化
要根據實際情況來分析設計:既要方便數據採集(錄入或導入),又要方便統計、查詢、匯總、生成報表用來分析。仔細考慮,設計庫表時盡量包含足夠的要素(象日期、類別、規格、名稱、數量、單價、總價、日期、台帳人等),各個要素盡量分列欄位。若數據量非常大(千級、萬級),可考慮設計多張表,一張清單表,幾張字典表(類別表、規格表等)。
不知道這樣回答是否滿意,主要是你的需求太模糊了。
④ 如何在access中完成這種表格的資料庫系統設計
建議資料庫設計如下:
一 數據表
1.職員(職員id 文本 主鍵,姓名 文本,職位 文本)
2.管理單位(管理單位編號 文本 主鍵,名稱,地址 文本,電話 文本)
3.路線(路線編號 文本 主鍵 ,名稱 文本)
4.橋梁(橋梁編碼 主鍵,橋梁名稱 文本,管理單位編號 文本,路線編號 文本)
5.部件(部件id 文本 主鍵,部件名稱 文本)
6.檢查記錄(檢查id 自增id 主鍵,日期 日期時間,橋梁編碼 文本,記錄人id 文本,負責人id 文本)
7.檢查明細(id 自增id 主鍵,檢查id 長整型,部件id 文本,缺損類型 文本,缺損范圍 文本,保養措施意見 備注)
8.現場照片(id 自增id 主鍵,照片id 文本 唯一索引 非空,檢查id 文本,照片保存地址 文本 255,照片說明 備注)
二 建立表間關系
1. 管理單位.管理單位編號與橋梁.管理單位編號建立一對多參照完整性關系;
2. 路線.路線編號與橋梁.路線編號建立一對多參照完整性關系;
3. 橋梁.橋梁編碼與檢查記錄.橋梁編碼建立一對多參照完整性關系;
4. 檢查記錄.檢查id分別與檢查明細.檢查id、現場照片.檢查id建立一對多參照完整性關系;
5. 部件.部件id與檢查明細.部件id建立一對多參照完整性關系;
6. 檢查記錄.檢查id與現場照片.檢查id建立一對多參照完整性關系;
另外為了方便錄入
請將"檢查記錄"的欄位"記錄人id"、"負責人id"的「查閱」屬性設置為組合框,分別將其行來源屬性設置為綁定職員表的職員欄位,並設置為限於列表。
將"檢查明細"表的欄位"部件id"的「查閱」屬性設置為組合框,其行來源屬性設置為綁定"部件"表的「部件id」欄位,並設置為限於列表。
在錄入檢查記錄、檢查明細和現場照片前,請先錄入「職員」、「管理單位」、「路線」、「橋梁」和"部件"信息。
提問中的那張表可用報表對象輸出,也可以輸出到WORD文檔,具體數據可從數據表中用SQL語句、VBA代碼、DlookUp函數等工具提取並輸出到報表或WORD文檔里。
⑤ Excel 表格類似的數據結構,資料庫應該如何設計
可以想想一個三維的空間:
x,y,z 分別表示坐標的 x,y,z 值,為整數(可以為負,如果你在應用裡面將0設置為中點,且允許反方向存儲數據的話,x,y 表示坐標,z 表示用戶,那麼任何一個數據就是:
(x,y,z,data)
那麼這個時候問題來了,data 需要存儲的是各種各樣類型的,所以,這個時候,我們可以這樣:
data 拆分為 (type, value)
data 存儲 data 表中的 id,然後真實數據存儲在 data 表中,可以直接存儲對象
⑥ 如何把Excel表格當做資料庫處理
一、 建立資料庫
方法一:使用向導,調出方法⑴可採用「文件」菜單「新建」
⑵或採用「工具」菜單「向導」
方法二:使用資料庫設計器
1、 使用向導建立資料庫
特點:可以方便快捷地創建資料庫,但只適用於一般常用的資料庫。
2、 使用資料庫設計器建立資料庫
特點: 最大特點就是靈活性
操作步驟:⑴「文件」菜單「新建」,顯示新建對話框
⑵選擇「資料庫」和單擊「新建文件」鈕
⑶在創建對話框中輸入新資料庫的名稱和單擊「保存」鈕
效果:資料庫文件已經建立完成。
顯示出「資料庫設計器」窗口和「資料庫設計工具」
打開「資料庫設計器」工具方法:「顯示」菜單「工具欄」
選擇「資料庫設計器」
三、建立表
1、 資料庫與數據表
可以先建立自由表,然後再添加到資料庫中
建立新的資料庫表,系統會將其自動加入到資料庫中。
2、 建立自由表
注意:自由表獨立於任何資料庫,如需要課添加到資料庫中,但不能同時
將一個表添加到多個資料庫。
預備知識:建立表必須首先建立表的結構
即要描述各個欄位的欄位名、欄位類型、欄位寬度、如果是數
值型還有小數位數,以及索引、是否再欄位中允許空值(選擇NULL)
3、 建立資料庫表
有三種方法:
法一、「文件」菜單「新建」,顯示新建對話框
選擇「表」和單擊「新建文件」鈕
在創建對話框中輸入新數表名稱和單擊「保存」鈕
法二、再建立完資料庫後,不關閉「資料庫設計器」窗口,單擊滑鼠右鍵後
選擇快捷菜單種的「新表」,單擊「新表」鈕,再創建對話框輸入表 名
後「保存」
法三、使用資料庫設計器工具欄
(「顯示」菜單「工具欄」)
選擇「資料庫設計器」工具欄種的第一個鈕「新建表」
二、使用命令建立資料庫、資料庫表
1、 建立資料庫
CREATE DATABASE 資料庫名稱
2、 建立資料庫表
CREATE TABLE │DBF 表名 [FREE]
(欄位名1 欄位類型 [(欄位寬度 [,小數位數] )]
[(欄位名2……]
二、使用向導建立查詢
1、查詢形式分類:查詢向導:標准查詢
交叉表向導:以電子表格形式輸出查詢結果
圖形向導:以電子圖形形式輸出查詢結果
2、使用查詢向導建立查詢步驟:
[0]使用查詢向導前必須先打開用到的庫表或自由表
⑴欄位選取
⑵記錄篩選
⑶選擇排序方式
⑷查詢完成(選擇保存並運行)(瀏覽查詢)
⑸打開查詢設計器,修改查詢
求採納為滿意回答。
⑦ 根據如下表格內容如何設計資料庫表(Mysql)
1、職責信息表、包含表述信息
2、工作任務表
3、職責和任務關聯中間表
這樣就做到了職責表1對多個工作表,後面不管怎麼加都是一個套路