A. 怎樣用sql寫一個倉庫管理系統
首先配置SQLSERVER2005:
打開」Microsoft SQL Server Management Studio「 直接用Windows 用戶連接進入,再在「安全性」中的「登錄名」內的「新建登錄名」,你就對應的添好「確定」就可以了。
再在你對應的「資料庫」里「安全性」用戶,把你建的用戶添加進去。
關鍵地方,查看「伺服器 屬性」在 「安全性」選上 「SQL Server 和 Windows 身份驗證模式」點 「確定」系統會提示你重新啟動SQL Server 你「停止」重啟一下就配好了。
接著看C#連接SQL Server2005的代碼語句:
strcon = strcon + @"Data Source=" + strcons[0];
strcon = strcon + "," + strcons[2] + ";";
strcon = strcon + "Network Library=" + strcons[1] + ";";
strcon = strcon + "Initial Catalog=" + strcons[3] + ";";
strcon = strcon + "User ID=" + strcons[4] + ";";
strcon = strcon + "Password=" + strcons[5] + ";";
strcon = strcon + "Persist Security Info=True";
strcons[0] 伺服器名稱,一般添機器的IP
strcons[1]協議DBMSSOCN(為tcp/ip協議)
strcons[2]]埠號,一般為1433
strcons[3] 資料庫名
strcons[4] 用戶名
strcons[5]密碼
埠號也要配置一下:
在控制面板里的服務和應用程序中的SQL Server配置管理中的SQL Server 2005網路配置內的SQL
Server2005的協議TCP/IP默認為已禁用,在它的屬性設置它的埠號為1433 「確定」 啟動。
B. 資料庫表結構設計,常見的資料庫管理系統
一、數據場景 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');
上述數據安全的管理,也可以基於應用系統的服務(代碼)層進行處理,相對專業的流程是從數據生成源頭處理,規避數據傳遞過程泄露,造成不必要的風險。
C. 怎麼用java+sql資料庫做一個工資管理系統
第一章 需求分析
1.1 功能要求
1.1.1 功能概況
本次設計要求運用面向對象設計知識,利用 JAVA 語言設計實現一個「小型公司工資管理系統」。
1.1.2 存儲功能
能夠存儲雇員的編號、姓名、性別、所在部門,級別,並進行工資的計算。 其中,雇員級別分為經理、技術人員、銷售人員和銷售經理。四類人員的月薪計算方法如下:經理拿固定月薪;技術人員按小時領取月薪;銷售人員按其當月銷售額的提成領取工資;銷售經理既拿固定月薪也領取銷售提成。由此要求,該項目需要利用資料庫的關系表存儲數據。
1.1.3 添加功能
程序能夠任意添加上述四類人員的記錄,可提供選擇界面供用戶選擇所要添加的人員類別,要求員工的編號要唯一,如果添加了重復編號的記錄時,則提示數據添加重復並取消添加。需要利用 Java 語言連接資料庫,使用資料庫添加語句。
1.1.4 查詢功能
可根據編號、姓名等信息對已添加的記錄進行查詢,如果未找到,給出相應的提示信息,如果找到,則顯示相應的記錄信息。利用 Java Swing 控制項進行展示。
1.1.5 編輯功能
可根據查詢結果對相應的記錄進行修改,修改時注意編號的唯一性。
1.1.6 刪除功能
主要實現對已添加的人員記錄進行刪除。如果當前系統中沒有相應的人員記錄, 則提示「記錄為空!」並返回操作;否則,輸入要刪除的人員的編號或姓名,根據所輸入的信息刪除該人員記錄,如果沒有找到該人員信息,則提示相應的記錄不存。
1.1.7 統計功能
能根據多種參數進行人員的統計。例如,統計四類人員數量以及總數,或者統計男、女員工的數量,或者統計平均工資、最高工資、最低工資等信息。利用資料庫語句完成統計。
1.1.8 界面功能
利用 java 的 GUI 功能設計系統的圖形用戶界面,要求界面美觀,易用。
D. 資料庫sql 的課程設計怎麼做,要借哪些書看,求大神指教
IT行業,資料庫確實是一門相當重要的課程。但是在大學裡面,對待資料庫原理及應用這么課程以及其課程設計的重視程度就相差很大了,各個學校要求也不一樣。如果是要學好,那確實要下工夫;如果只是完成課程設計,交差了事,其實相當簡單。
既然是課程設計,也算是個小小的項目,既然是項目,也就離不開需求分析、資料庫設計、部署實現等環節。當然,這個小小的項目只需要前面的部分:需求和資料庫設計,資料庫設計是重點。
需求分析就不用多說,和所有其他項目一樣,無非就是用戶需求,功能需求,系統需求等,找任何一本關於需求分析的書都是可以,除了那些個空話之外,更多的是要根據設計需要進行分析。
資料庫設計就比較復雜一點,首先得把資料庫原理搞清楚,比如:符合什麼樣的範式,怎麼畫ER圖,如何理解用例圖。在設計資料庫之前,有一系列的分析要做:面向對象分析,用例分析,類和對象分析等等。分析到位是資料庫設計成功的重要保障。分析完成之後才是設計,比如:邏輯結構設計,關系模式設計,存取方法設計,存儲結構設計,數據完整性設計,參考完整性設計,Check約束,Default約束,觸發器設計,視圖設計,存儲過程設計,許可權設計等。這些都完成了,最後一步才是寫SQL代碼實現這些設計,創建資料庫及相關的數據表,關聯,視圖,觸發器,存儲過程等一些列的看得見的資料庫參數。
上面說的比較理論,也比較籠統。我想我可以用一個簡單例子告訴你我要表達的意思。例子很簡單,其中很多地方都不是太好,不過或許可以給你一個直觀的思路。
資料庫應用課程設計報告書
網上超市管理系統
成 績:
學 號:
姓 名:
指導教師:
20 年 月 日
目錄
任務書......................................... (3)
1. 需求調查、分析................................. (4)
1.1.企業介紹.................................... (4)
1.2.需求調查及分析.............................. (5)
2. 面向對象分析和設計............................. (7)
2.1. 用例分析 (7)
2.2.類和對象設計 (12)
3. 邏輯結構設計.................................. (15)
3.1. 類和對象向關系模式轉換............................................ (15)
3.2. 關系模式優化 (16)
4. 資料庫物理結構設計............................ (16)
4.1. 存取方法設計 (16)
4.2. 存儲結構設計 (17)
5. 資料庫完整性設計.............................. (17)
5.1. 主鍵及唯一性索引 (17)
5.2. 參照完整性設計 (18)
5.3. Check約束 (18)
5.4. Default約束 (18)
5.5. 觸發器設計 (19)
6. 資料庫視圖設計................................ (19)
7. 資料庫存儲過程設計............................ (20)
8. 許可權設計...................................... (20)
9. 總結.......................................... (21)
E. 家庭理財管理系統的設計與實現
家庭財務管理系統
經濟全球化和居民生活需求的變化以及計算機技術不斷發展的今天,人們生活水平越來越高,財務管理也變得越來越重要,理財直接影響著人們的生活,本系統應用於C/S結構的平台,本研究課題的主要目的是提供財務數據統一管理和做出合理的財務決策,其界面友好,操作簡單,除具備基本的財務信息管理外,還提供了數據統計,數據查詢,圖表自動統計等功能。
為方便操作,從多方面把用戶的家庭收入、家庭支出、統計節余等財產管理的數據,以及他們的生活結余和消費統計,用科學統計的方法把這些數據存儲在財務管理軟體之中。以餅圖形式說明收入、支出、節餘三者之間的相互關系,為家庭的財產的有效管理和合理分配提供幫助。本文著重論述了該系統的功能與實現,如:數據流程與存儲、管理等功能,並對關鍵的技術作了較詳細的介紹。
1.2 相關理論技術基礎 1
1.2.1 VB 1
1.2.2 ACCESS 2003 2
1.2.3 C/S模式 2
2系統需求設計 3
2.1用戶角色需求 3
2.2可行性分析 3
2.3環境需求 3
3系統分析 3
3.1具體功能模塊劃分 3
3.1.1系統登陸模塊的設計 3
3.1.2用戶注冊模塊功能的設計 4
3.1.3密碼修改模塊功能的設計 4
3.1.4家庭理財模塊 5
3.1.5資產管理模塊 6
3.1.6資產查詢模塊 7
3.1.7統計分析模塊 8
3.2功能示意圖 8
4系統設計 9
4.1系統的設計目標 9
4.2資料庫設計 10
4.2.1理財系統管理 10
4.2.2家庭收入表 10
4.2.3.家庭支出表 11
4.2.4.資財管理表 11
4.3系統主要功能的實現 11
4.3.1用戶登錄和注冊 11
4.3.2家庭理財 13
4.3.3資產管理 14
4.3.4資料庫管理 14
5系統測試 16
5.1 測試環境 16
5.2 測試內容 16
5.3 測試結果 19
結 論 20
F. 資料庫設計:個人財務管理系統要建哪些表
收入表,支出表,個人財產統計表,如果有必要的話還可以建一個收入項目/支出項目表,登錄的表可以不建,利用資料庫的用戶角色就行了
G. sql個人記賬管理系統 個人記賬管理系統資料庫的設計與實現 描述:設計一個個人記帳系統。實現下列功能: 1
create database 個人記賬
create table 人員
(姓名 char(20) primary key,
地位 char(20),
年齡 smallint,
職業 char(20),
性別 char(2))
create table 項目
(項目編號 char(4) primary key,
項目名稱 char(20) unique,
項目類型 char(10));
create table 支出
(姓名 char(20),
項目編號 char(20),
金額 float(2),
次數 int,
時間 smalldatetime,
primary key(姓名,項目編號));
create table 收入
(姓名 char(20),
項目編號 char(20),
金額 float(2),
次數 int,
時間 smalldatetime,
primary key(姓名,項目編號));
select *
from 人員
select *
from 項目
select *
from 支出
select *
from 收入
select 姓名,項目名稱,金額
from 項目,收入
where (姓名='施曉明' )and (項目名稱='工資' or 項目名稱='提成')
create unique index Fna on 人員("姓名" asc);
create unique index Pid on 項目("項目編號" desc);
insert into 人員
values ('費翔','哥哥',26,'會計','男')
insert into 支出(姓名,項目編號,金額)
values ('費翔','006','410')
update 人員
set 年齡=84
where 姓名='施文祥'
delete
from 支出
where 姓名='費翔' --刪除數據
create view Sub_N
as select 姓名,地位,職業
from 人員
where 姓名='施展'
create view N_Avg(姓名,Avg)
as select 姓名,Avg(金額)
from 收入
group by 姓名
create procere InsertRecord
(@姓名 char(20),
@地位 char(20),
@年齡 smallint,
@職業 char(20),
@性別 char(2))
as
insert into 人員 values(@姓名,@地位,@年齡,@職業,@性別)
create procere QueryProgram
(@項目編號 char(4),
@項目名稱 char(20) output,
@項目類型 char(10) output)
as
select @項目編號=項目編號,@項目名稱=項目名稱,@項目類型=項目名稱
from 項目
where 項目編號=@項目編號
create trigger ChangeDisplay
on 人員
for insert
as
select * from 人員
--創建一個觸發器,當向人員表中插入一條記錄時,自動顯示人員表中的記錄
exec InsertRecord @姓名='施圓圓',@地位='妹妹',@年齡=16,@職業='學生',@性別='女'
H. 求一份SQL server資料庫課程設計報告
2.2需求分析
(1)需求分析的任務
需求分析的任務是通過詳細調查現實世界要處理的對象(組織、部門、企業等),充分了解原系統(手工系統或計算機系統)工作概況,明確用戶的各種需求,用通俗的話來講,就是分析了解用戶關心什麼,用戶需要什麼樣的結果,然後在此基礎上分析和設計新系統的資料庫。
需求分析的重點是調查、收集與分析用戶在數據管理中的信息要求、處理要求、安全性與完整性要求。
信息要求
是指用戶需要從資料庫中獲得信息的內容與性質。由用戶的信息要求可以導出數據要求,即在資料庫中需要存儲哪些數據。
處理要求
是指用戶要求完成什麼處理功能,對處理的響應時間有什麼要求,處理方式是批處理還是聯機處理。
安全性與完整性要求
一是指用戶對系統和數據有什麼安全性要求,如不同級別的用戶具有什麼操作許可權和使用哪些數據;二是對數據的輸入和存儲的什麼要求,如數據的長度和范圍、數據的有效性、一致性和唯一性等。
確定用戶的最終需求其實是一件很困難的事,這是因為一方面用戶缺少計算機知識,開始時無法確定計算機究竟能為自己做什麼,不能做什麼,因此無法一下子准確地表達自己的需求,他們所提出的需求往往不斷地變化。另一方面設計人員缺少用戶的專業知識,不易理解用戶的真正需求,甚至誤解用戶的需求。因此設計人員必須與用戶不斷深入地進行溝通和交流,才能逐步得以確定用戶的實際需求。
(2)需求分析的基本步驟
1.調查與初步分析用戶的需求,確定系統的功能邊界
⑴首先調查組織機構情況
⑵然後調查各部門的業務活動情況
⑶協助用戶明確對新系統的各種要求
⑷確定新系統的結構和功能邊界,確定哪些功能由計算機完成或將來由計算機完成,哪些活動由人工完成。
常用的調查方法有:
⑴跟班作業
⑵開調查會
⑶請專人介紹
⑷詢問
⑸問卷調查
⑹查閱記錄
2.生成數據字典
1)數據項條目:數據項是不可再分的數據單位,它直接反映事物的某一特徵。
2)數據結構條目:反映了數據之間的組合關系。
3)數據流條目:數據流是數據結構在系統內傳輸的路徑。
4)數據文件條目:數據文件是數據項停留或保存的地方,也是數據流的來源和去向之一。
5)處理過程條目。
(3) 案例分析:教學管理系統資料庫的需求分析
用戶的需求具體體現在各種信息的提供、保存、更新和查詢上,這就要求資料庫的結構能充分滿足各種信息的輸出和輸入。需求分析階段主要是收集基本數據,確定數據結構及數據處理的流程,組成一份詳盡的數據字典,以便為後面的概念設計和邏輯設計打下基礎。
2.3概念結構設計
概念結構設計是對收集來的信息和數據進行分析整理,確定實體、屬性及聯系,形成獨立於計算機的反映用戶觀點的概念模型。概念設計的重點在於信息結構的設計,它是整個資料庫系統設計的關鍵。
(1)概念結構設計的目標和任務
概念結構設計的目標是產生反映系統信息需求的資料庫概念結構,即概念模式。概念結構是獨立於DBMS和使用的硬體環境的。在這一階段,設計人員要從用戶的角度看待數據以及數據處理的要求和約束,產生一個反映用戶觀點的概念模式,然後再把概念模式轉換為邏輯模式。
概念模型的表示方法很多,其中最著名、最常用的表示方法為實體-聯系方法,這種方法也稱為E-R模型方法,該方法採用E-R圖描述概念模型。
E-R圖提供了表示實體、屬性和聯系的方法,它由以下三個組件構成:
實體---用矩形表示,矩形框內寫明實體名。
屬性---用橢圓形表示,並用無向邊將其與相應的實體連接起來。
聯系---用菱形表示,菱形框內寫明聯系名,並用無向邊分別與有關實體連接起來,同時在無向邊旁標上聯系的類型(1:1、1:n或m:n)。
例如教學管理系統中的學生實體與課程實體的E-R圖如下圖表示:
(2)概念結構設計的過程
●數據抽象
概念結構是對現實世界的一種抽象,所謂抽象就是對實際的人、事、物和概念進行加工處理,抽取所關心的共同特性,用各種概念精確的加以描述,組成某種模型。
在需求分析中,已初步得到了有關各類實體、實體間的聯系以及描述它們性質的數據元素,統稱數據對象。
在這一階段中,首先要從以上數據對象中找出:系統有哪些實體?每個實體有哪些屬性?哪些實體間存在聯系?每一種聯系有哪些屬性?然後就可以做出系統的局部E-R模型和全局E-R模型。
● 局部E-R模型設計
局部E-R模型設計是從數據流圖出發確定實體和屬性,並根據數據流圖中表示的對數據的處理、確定實體之間的聯系。
設計局部E-R圖的步驟是:
1.確定實體類型和屬性
實體和屬性之間沒有嚴格的區別界限,但對於屬性來講,可以用下面的兩條准則作為依據:
1)作為屬性必須是不可再分的數據項,也就是屬性中不能再包含其他的屬性。
2)屬性不能與其他實體之間具有聯系。
2.確定實體間的聯系
依據需求分析結果,考察任意兩個實體類型之間是否存在聯系,若有,則確定其類型(一對一,一對多或多對多)。
3.畫出局部E-R圖
確定了實體及實體間的聯系後,可用E-R圖描述出來。形成局部E-R圖之後,還必須返回去徵求用戶意見,使之如實地反映現實世界,同時還要進一步規范化,以求改進和完善。每個局部E-R圖必須滿足:
(1)對用戶需求是完整的。
(2)所有實體、屬性、聯系都有惟一的名字。
(3)不允許有異名同義、同名異義的現象。
● 全局E-R模型的設計
各個局部E-R模型建立好後,還需要對它們進行合並,集成為一個整體的數據概念結構,即總E-R圖。在合並全局E-R模型時,應注意檢查和消除屬性、命名的沖突及數據冗餘。
(3)案例分析:教學管理系統資料庫的概念結構設計
通過上面的需求分析,就可以進行資料庫的概念結構設計,先對現實當中的人、事、物和概念進行抽象的加工處理,抽取所關心的共同特性,用各種概念進行描述,從中找出能夠滿足用戶需求的各種實體,以及它們之間的關系,並用實體-聯系圖表示出來(即畫出E-R圖),為後面的邏輯結構設計打下基礎。
1、確定實體及其屬性
經過對人工進行的教學管理系統的業務調查,得知系統主要涉及以下幾個實體:
● 學生實體:屬性主要包括班級名稱、學號、姓名、性別、出生日期、民族、政治面貌、來源地、入學成績、學生類別、電話、備注等。
● 教師實體:屬性主要包括教師號、教師姓名、性別、出生日期、所在系、職稱
● 班級實體:屬性主要包括系部名稱、班級號、班級名稱、班主任、學生人數、備注等。
● 系部實體:屬性主要包括系號、系部名稱、班級數等。
● 課程實體:屬性主要包括課程號、課程名、考核方式、學分、學時數等。
2、確定實體之間的聯系
2.4 邏輯結構設計
(1)邏輯結構設計的目標和任務
邏輯結構設計的目標就是把概念結構設計階段設計好的E-R圖轉換為特定的DBMS所支持的數據模型(即層次、網狀、關系模型之一),並對其進行優化。
概念模型向邏輯模型的轉換過程分為3步進行:
(1)把概念模型轉換為一般的數據模型。
(2)將一般的數據模型轉換成特定的DBMS所支持的數據模型。
(3)通過優化方法將其轉化為優化的數據模型。
(2) 概念模型轉換為一般的關系模型
1.實體的轉換規則
將E-R圖中的每一個常規實體轉換為一個關系,實體的屬性就是關系的屬性,實體的碼就是關系的碼。
2.實體間聯系的轉換規則
1)一個1:1聯系可以轉換為各自獨立的關系模式,也可以與任意一端所對應的關系模式合並。
2)一個1 : n聯系可以轉換為各自獨立的關系模式。
3)一個m : n聯系轉換為一個關系模式。轉換的方法為:與該聯系相連的各實體的碼以及聯系本身的屬性均轉換為關系的屬性,新關系的碼為兩個相連實體碼的組合
(3) 案例分析:教學管理系統資料庫的邏輯結構設計
邏輯結構設計的任務是把概念結構設計階段設計好的E-R圖轉換為特定的DBMS所支持的數據模型(即層次、網狀、關系模型之一),並對其進行優化,得到滿足用戶要求和系統功能需求的關系模式。
1、 E-R模型轉換為關系模式
將E-R模型轉換成初始關系模式的一般規則是:系統中各個實體轉換為對應的關系模式;實體之間多對多的聯系也轉換為關系模式。
根據轉換規則,可以將系部、班級、學生、教師、課程五個實體轉換成與之對應的五個關系模式;而將學生與課程兩者之間多對多的選修關系以及教師、班級和課程三者之間多對多的開課關系也轉換為關系模式。
2、關系模式的設計
根據上述的轉換結果,在對關系模式中數據進行規范化處理後,得到了符合第三範式的關系模式如下:
學生:{學號、姓名、性別、出生日期、民族、政治面貌、來源地、入學成績、學生類別、班級名稱、電話、備注}
班級:{班級號、班級名稱、班主任、學生人數、系部名稱、備注}
系部:{系號、系部名稱、班級數}
教師:{教師號、教師姓名、性別、出生日期、所在系、職稱}
課程:{課程號、課程名、考核方式、學分、學時數}
選修:{學號、課程號、成績}
開課: {教師號、班級名稱、課程號、開課學期、授課地點}
每個關系模式中帶下劃線的屬性或屬性的組合表示主鍵、帶雙波浪線的屬性表示與之關聯的表的外鍵。
根據系統功能需求,數據採用SQL Server 2000所支持的實際數據模型,也就是資料庫的邏輯結構。啟動SQL Server 2000,創建一個資料庫命名為:jxgl。該資料庫中各個數據表的結構如下面各個表格所示。每個表格對應於資料庫中的一個表。
3、將關系模式轉換為資料庫中的表
按照關系數據模型的結構,將關系模式轉換為關系資料庫中的數據表,轉換的規則是:一個關系模式轉換為一個數據表,關系模式中的每個屬性轉換為數據表中的一個列。同時設置表中各個列的名稱、數據類型、數據寬度以及數據規則,得到如下幾個表:
學生表(student)
列名 類型 寬度 規則
班級名稱 CHAR 20 內容取自班級信息表的班級名稱
學號 CHAR 10 主鍵、長度為10個字元
姓名 CHAR 8
性別 CHAR 2 非空、只能取「男」或「女」
出生日期 DATETIME
民族 CHAR 4 假定只能取以下之一:漢、壯、白、回、苗、滿、其它
政治面貌 CHAR 4 只能取以下之一:黨員、團員、群眾
來源地 CHAR 10
入學成績 INT
學生類別 CHAR 10 假定只能取以下之一:本科、大專(普)、大專(業)、中專、技校、函授、其它
電話 CHAR 11
備注 CHAR 10
註:(1)該表存放全校所有學生的基本信息,每個學生產生一條記錄。
(2)學號的前4位表示年級,第5--8位表示班級號(其中第5-6位表示系號, 第7-8位表示系內班級號),最後兩位是班內的學生編號,在輸入記錄內容時應加以區分。
班級表(class)
列名 類型 寬度 規則
系部名稱 CHAR 10 非空、內容取自系部信息表的系部名稱
班級號 CHAR 4 非空、長度為4個字元
班級名稱 CHAR 20 主鍵
班主任 CHAR 8
學生人數 INT
備注 CHAR 10
註:(1)該表存放全校所有班級的信息,每個班級產生一條記錄。
(2)班級號的前2位表示系號,後兩位為系內的班級編號,在輸入記錄內容時應加以區分。
系部表(department)
列名 類型 寬度 規則
系號 CHAR 2 非空、長度為2個字元
系部名稱 CHAR 10 主鍵
班級數 INT
註:該表存放某校所有的系部信息,每個系部產生一條記錄。
教師表(teacher)
列名 類型 寬度 規則
教師號 CHAR 4 主鍵、長度為4個字元
姓名 CHAR 8
性別 CHAR 2 非空、只能取「男」或「女」
出生日期 DATETIME
職稱 CHAR 6 只能取以下之一:教授、副教授、講師、助教、其他
所在系 CHAR 20 非空、外鍵(內容取自系部表的系部名稱)
課程表(course)
列名 類型 寬度 規則
課程號 CHAR 4 主鍵、長度為4個字元
課程名 CHAR 20
考核方式 CHAR 4 假定只能取以下之一:考試、考查、其他
學分 INT 非空
學時數 INT
註:該表存放某校所有的課程信息,每門課產生一條記錄。
成績表(SC)
列名 類型 寬度 規則
學號 CHAR 8 主鍵、內容取自學生信息表的學生姓名
課程號 CHAR 20 主鍵、內容取自課程信息表的課程名稱
成績 INT
註:該表存放某校所有學生的成績信息,每個學生學習每門課程產生一條記錄。
開課信息表(tcc)
列名 類型 寬度 規則
教師號 CHAR 4 主鍵、內容取自教師信息表的教師號
課程號 CHAR 4 主鍵、內容取自課程信息表的課程號
班級號 CHAR 4 主鍵、內容取自班級信息表的班級號
開課學期 CHAR 20
授課地點 CHAR 20
註:該表存放某校開設課程的信息,每個教師教授某個班級的某門課產生一條記錄。
2. 5 物理設計
資料庫的物理設計目標是在選定的DBMS上建立起邏輯設計結構確立的資料庫結構,這一過程也稱為資料庫的物理實現。它主要包括兩項工作:
一是根據資料庫的結構、系統的大小、系統需要完成的功能及對系統的性能要求,決定選用哪個資料庫管理系統。目前,資料庫產品市場上比較好的產品有:Microsoft SQL Server、Oracle、IBM DB/2,SYBASE等。
二是根據選用的資料庫管理系統的資料庫實現方法來建立用戶資料庫,即創建所需要的資料庫、表及其他資料庫對象。
本系統選用的DBMS是SQL Server 2000,並在該系統上創建用戶資料庫jxgl以及下屬的7個用戶表:student、class、department、teacher、course、sc、tcc,各個表的結構按2.4節第3點各表給出的具體內容設定。
2. 5 實訓二
以小組討論的形式,完成人事工資管理系統用戶資料庫的設計,要求個人寫出用戶資料庫設計的文檔(包括資料庫的需求分析、概念設計、邏輯設計和物理設計,表達方法可參考本章相應內容的案例分析部分),每個小組上交一份本系統用戶資料庫包括的數據表。
第三章 資料庫的數據完整性設計
3.1數據完整性的基本概念及內容
正確創建資料庫後,需要考慮數據的完整性、數據的安全性等要求。數據的完整性主要指數據的正確性、有效性、相容性,強制實施數據完整性可以確保資料庫中的數據的質量。
進行數據完整性設計主要考慮以下幾個方面的內容:
1)表名惟一;
由系統強制實施控制。
2)列名惟一;()
由系統強制實施控制。
3)數據行惟一;
通過設置主鍵約束或觸發器來實施控制。
4)列值非空;
通過設置非空約束來實施控制。
5)列值惟一性
通過設置惟一約束或惟一索引來實施控制。
6)列值滿足一定的條件
通過設置檢查約束或觸發器來實施控制。
7)數據的一致性和有效性
通過設置外鍵約束或觸發器來實施控制。
至於具體要對資料庫的哪一個表的哪一項數據進行什麼樣的數據完整性設計,還應根據用戶的需求來考慮和確定。
3.2 數據完整性的分類與實現方法
在SQL Server關系資料庫中,數據完整性分為以下三類:
1. 域完整性
域完整性是指一個列的輸入有效性,是否允許空值。實現域完整性的方法主要有:限制數據類型(通過設定列的數據類型)、限定格式(通過CHECK約束和規則)或可能值的范圍(通過 FOREIGN KEY 約束、CHECK 約束、DEFAULT定義、NOT NULL定義和規則)以及程序控制。
2. 實體完整性
實體完整性是指保證表中所有的行唯一。實現實體完整性的方法主要有:索引、UNIQUE約束、PRIMARY KEY約束或 IDENTITY屬性以及程序控制。
3. 參照完整性
參照完整性也叫引用完整性。參照完整性確保主鍵(被引用表)和外鍵(引用表)之間的參照關系。它涉及兩個或兩個以上表數據的一致性維護。如student表(稱為引用表、參照表或子表)的class_id列就是參照class表(稱為被引用表、被參照表或父表)的外鍵。參照完整性可以實現以下兩種控制:
(1)存在外鍵時,被參照表中的這一行不能被刪除,主鍵值也不能改變 (以student和class表的「班級名稱」列為例說明)。
(2)若在被參照表中不存在包含相應主鍵的行時,一個外鍵值不能插入參照表中(MsgBox "添加記錄成功!", vbOKOnly + vbInformation, "提示"
End Sub
Private Sub Command5_Click()
rs.Close
Unload Me
End Sub
Private Sub Form_Load()
rs.CursorLocation = adUseClient ' 設置在客戶端創建游標
rs.CursorType = adOpenKeyset '設置游標類型為鍵集類型
rs.LockType = adLockOptimistic '設置打開記錄集時的鎖定類型為樂觀鎖,在執行UPdate方法前不鎖定編輯的數據
rs.Open "select * from teacher", cnn
'在表格上顯示class表的記錄內容
Set DataGrid1.DataSource = rs
DataGrid1.Refresh
'將表格上的數據與文本框或下拉列表框綁定
Set Text1.DataSource = rs
Text1.DataField = "教師號"
Set Text2.DataSource = rs
Text2.DataField = "姓名"
Set Combo1.DataSource = rs
Combo1.DataField = "所在系"
Set Text3.DataSource = rs
Text3.DataField = "出生日期"
Set Text4.DataSource = rs
Text4.DataField = "從教日期"
Set Combo2.DataSource = rs
Combo2.DataField = "性別"
Set Combo3.DataSource = rs
Combo3.DataField = "職稱"
Set Combo4.DataSource = rs
Combo4.DataField = "政治面貌"
Set Combo5.DataSource = rs
Combo5.DataField = "學歷"
Set Text7.DataSource = rs
Text7.DataField = "家庭住址"
Set Text5.DataSource = rs
Text5.DataField = "聯系電話"
Set Text6.DataSource = rs
Text6.DataField = "備注"
'下拉列表框提供班級名稱
Combo1.Clear
rs1.Open "select 系部名稱 from department", cnn
While Not rs1.EOF()
Combo1.AddItem Trim(rs1.Fields("系部名稱"))
rs1.MoveNext
Wend
rs1.Close
End Sub
對其餘幾個表的數據進行增、刪、改操作的窗體的設計方法與上述類擬。