1. 程式人生 > 資料庫 >資料庫-建立資料庫建立資料表和錄入資料

資料庫-建立資料庫建立資料表和錄入資料

本關任務:完成代理商、客戶、產品和彼此之間的訂單資料庫。

建資料庫、建資料表、錄入資料、備份還原

1、需求分析

代理商、客戶、產品和彼此之間的關係說明如下:
1.對於代理商,需要儲存:代理商編號、姓名、地址、提成金額以及提成的比例。
2.每個客戶需要儲存:客戶編號、姓名、地址、收支差額以及貸款的限額。另外還要儲存客戶通過的代理編號及姓名。(注:每個代理商可以代理多個客戶,而每個客戶只能通過一個代理商)。
3.對於產品,需要儲存:產品的編號、描述資訊、庫存量、類別、倉庫的編號以及價格。
4.每份訂單需要儲存:訂單編號、訂貨日期、客戶編號、姓名以及地址、通過的代理的編號。而且對於訂單的每一個訂貨項,需要儲存產品編號、描述資訊、訂貨的數量以及協商的價錢。

說明:
(1)每份訂單的客戶詳細資訊都已經儲存在客戶檔案中。
(2)每份訂單隻限於一個客戶。
(3)每種產品在一份訂單中最多出現一次。
(4)協商後的價錢可能和產品管理檔案中的相同,但也可能不同。即允許把同一種產品按不同的價格賣給不同的客戶,同時也允許修改產品的基本價格,而無須改變檔案中的訂貨資訊。

2、資料庫設計

根據上面的需求分析

關係模型如下: 1、代理商(代理商編號、姓名、地址、郵政編碼、提成金額、提成比例) 其中代理商編號為primary key(主碼)

欄位名 資料型別 備註
代理商編號 char(4) primary key
姓名 nvarchar(10)
地址 nvarchar(20)
郵政編碼 char(6)
提成金額 smallmoney
提成比例 tinyint

2、客戶(客戶編號、姓名、地址、郵政編碼、收支差額、貸款限額、代理商編號) 其中客戶編號為primary key(主碼)

欄位名 資料型別 備註
客戶編號 char(4) primary key
姓名 nvarchar(10)
地址 nvarchar(20)
郵政編碼 char(6)
收支差額 smallmoney
貸款限額 smallmoney
代理商編號 char(4) foreign key

3.產品(產品編號、描述資訊、庫存量、類別、倉庫的編號、價格) 其中產品的編號為primary key(主碼)

欄位名 資料型別 備註
產品編號 char(4) primary key
描述資訊 nvarchar(20)
庫存量 int
類別 tinyint
倉庫編號 char(4)
價格 smallmoney

4.訂單(訂單編號、訂貨日期、客戶編號)

欄位名 資料型別 備註
訂單編號 char(4) primary key
訂貨日期 Smalldatetime
客戶編號 char(4) foreign key

5.訂貨專案(訂單編號、產品編號、訂購數量、訂購單價)

欄位名 資料型別 備註
訂單編號 char(4) primary key , foreign key
產品編號 char(4) primary key, foreign key
訂購數量 smallint
訂購單價 smallmoney

注意:這裡不是有兩個主鍵,沒有資料表會有兩個主鍵。這裡是聯合主鍵,也就是說通過欄位訂單編號和產品編號來確認一條記錄的唯一性。primary key(訂單編號,產品編號)

sql語句

/***********注意:只是在適當的位置根據提示填寫程式碼,請不要刪除現有程式碼**********/

/***********BEGIN:刪除現存訂單資料庫**********/
use master
go
if exists(select * from sysdatabases WHERE name = 'orderdb')
drop database orderdb
go
/***********END:刪除現存訂單資料庫**********/


/*****TODO: 請在下面建立名為orderdb的訂單資料庫*******************/
/*   該訂單資料庫的資料檔案具體描述如下
     name='orderdb_data',  -- 主資料檔案的邏輯名稱
     filename='/home/orderdb_data.mdf', -- 主資料檔案的物理名稱
     size=5mb, --主資料檔案的初始大小
     maxsize=100mb, -- 主資料檔案增長的最大值
     filegrowth=15%--主資料檔案的增長率

	 該訂單資料庫的日誌檔案具體描述為
	 name='orderdb_log',
     filename='/home/orderdb_log.ldf',
     size=2mb,
     filegrowth=1mb
*/
/*******************BEGIN:建立訂單資料庫**********************/
CREATE DATABASE orderdb
on primary(
	name='orderdb_data',
	filename='/home/orderdb_data.mdf',
	size=5mb,
	maxsize=100mb,
	filegrowth=15%
)
log on
(
	name='orderdb_log',
	filename='/home/orderdb_log.ldf',
	size=2mb,
	filegrowth=1mb
)
go


/*********************END:訂單資料庫orderdb建立結束 *******************/

/********************  支援中文 **********************/
ALTER DATABASE orderdb SET SINGLE_USER WITH ROLLBACK IMMEDIATE
go
ALTER DATABASE orderdb COLLATE Chinese_PRC_90_CI_AS
go
ALTER DATABASE orderdb SET MULTI_USER
go


/********使返回的結果中不包含有關受 Transact-SQL 語句影響的行數的資訊*********/
SET NOCOUNT ON
go

/************************使用orderdb*********************/
USE orderdb
go

/***************TODO: 請在下面建立5張資料表************************/
/*
例子1:訂單表
create table  訂單
(
訂單編號 char(4) ,
訂貨日期 smalldatetime ,
客戶編號 char(4),
primary key(訂單編號),--在表級定義實體完整性
foreign key(客戶編號) references 客戶(客戶編號)--在表級定義參照完整性
)
go
*/
/**************BEGIN:建立資料表**************/
/*TODO:1、建立名為代理商的資料表*/
CREATE TABLE 代理商(
	代理商編號 char(4),
	姓名 nvarchar(10),
	地址 nvarchar(20),
	郵政編碼 char(6),
	提成金額 smallmoney,
	提成比例 tinyint,
	primary key(代理商編號)
)
go


/*TODO:2、建立名為客戶的資料表*/
CREATE TABLE 客戶(
	客戶編號 char(4),
	姓名 nvarchar(10),
	地址 nvarchar(20),
	郵政編碼 char(6),
	收支差額 smallmoney,
	貸款限額 smallmoney,
	代理商編號 char(4),
	primary key(客戶編號),
	foreign key(代理商編號) references 代理商(代理商編號)
)
go

/*TODO:3、建立名為產品的資料表*/
CREATE TABLE 產品(
	產品編號 char(4),
	描述資訊 nvarchar(20),
	庫存量 int,
	類別 tinyint,
	倉庫編號 char(4),
	價格 smallmoney,
	primary key(產品編號)
)
go

/*TODO:4、建立名為訂單的資料表*/

CREATE TABLE 訂單(
	訂單編號 char(4),
	訂貨日期 smalldatetime,
	客戶編號 char(4),
	primary key(訂單編號),
	foreign key(客戶編號) references 客戶(客戶編號)
)
go


/*TODO:5、建立名為訂貨專案的資料表*/
CREATE TABLE 訂貨專案(
	訂單編號 char(4),
	產品編號 char(4),
	訂購數量 smallint,
	訂購單價 smallmoney,
	CONSTRAINT orderdb_key primary key(訂單編號,產品編號),
	foreign key(訂單編號) references 訂單(訂單編號),
	foreign key(產品編號) references 產品(產品編號)
)
go


/**************	END:建立資料表結束 ****************/

/***************TODO: 請在下面給表中插入資料************************/
/*
例子1,插入一條記錄:
insert into  訂貨專案
VALUES 
('444','0044',1000,1900.00)
go
例子2,插入多條記錄:
insert into  訂貨專案
VALUES 
('555','0055',5500,950.00),
('444','0044',1000,1900.00)
go
*/
/**************BEGIN:插入資料**************/
/*TODO:1、插入資料到名為代理商的資料表中*/
INSERT INTO 代理商
VALUES
('01', '聯邦', '東環路1號', '541001', 30000.00, 40),
('02', '惠普', '東環路2號', '541002', 4000.00, 10),
('03', '三洋', '東環路3號', '541003', 10000.00, 30),
('04', '聯想', '東環路4號', '541004', 100000.00, 60),
('05', '海爾', '東環路5號', '541005', 200000.00, 60)
go

/*TODO:2、插入資料到名為客戶的資料表中*/
INSERT INTO 客戶
VALUES
('100', '張三', '西環路1號', 100001, 10.00, 100.00, '02'),
('200', '李四', '西環路2號', 100001, -10.00, 10.00, '04'),
('300', '王五', '西環路3號', 100001, 100.00, 1000.00, '02'),
('400', '趙六', '西環路4號', 100001, 600.00, 2000.00, '01'),
('500', '洪七', '西環路5號', 100001, 300.00, 900.00, '05'),
('600', '李明', '西環路6號', 100001, 20.00, 300.00,'03'),
('700', '張進', '西環路7號', 100001, 400.00, 1000.00, '03')
go
/*TODO:3、插入資料到名為產品的資料表中*/
INSERT INTO 產品
VALUES
('0011', '藥物,單位(瓶)', 1000, 12, 1001, 40.00),
('0022', '機器,單位(件)', 300, 3, 1002, 50000.00),
('0033', '中藥,單位(包)', 800, 12, 1001, 300.00),
('0044', '軟體,單位(套)', 1500, 10, 1003, 2000.00),
('0055', '傢俱,單位(件)', 6000, 3, 1002, 1000.00),
('0066', '小型機,單位(臺)', 10000, 3, 1002, 200000.00)
go
/*TODO:4、插入資料到名為訂單的資料表中*/
INSERT INTO 訂單
VALUES
('111', '2000-10-01', '200'),
('222', '2000-09-01', '200'),
('333', '2001-01-01', '500'),
('444', '2002-02-02', '300'),
('555', '2003-03-03', '100')
go
/*TODO:5、插入資料到名為訂貨專案的資料表中*/
INSERT INTO 訂貨專案
VALUES
('111', '0033', 200, 280.00),
('222', '0066', 6000, 150000.00),
('333', '0033', 100, 280.00),
('444', '0011', 300, 39.00),
('555', '0055', 5500, 950.00),
('444', '0044', 1000, 1900.00)
go
/****************END:插入資料結束**********************/

/****************TODO:請在下面寫SQL語句備份orderdb資料庫***********************/
backup database orderdb to disk = '/home/mybackupdb.bak'
go
/****************END:完成訂單資料庫備份********************************/

/**************TODO:請在下面寫SQL語句還原orderdb資料庫為mybackup*************/
restore database mybackup
from disk='/home/mybackupdb.bak'
 WITH move 'orderdb_data'
 to '/home/orderdb_data_backup.mdf',
 move 'orderdb_log'
 to '/home/orderdb_log_backup.ldf'
 go
/****************END:完成還原資料庫備份********************************/

/***************  測試 ,請不要刪除下面程式碼********/
SELECT name FROM sys.databases WHERE name='mybackup'
go
USE mybackup
go
select * from 代理商
go
select * from 客戶
go
select * from 產品
go
select * from 訂單
go
select * from 訂貨專案
go