Tải bản đầy đủ (.pdf) (14 trang)

thiết kế ứng dụng quản lý sản xuất nhiều phân xưởng

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (347.69 KB, 14 trang )

1
THIẾT KẾ ỨNG DỤNG
1. Giới thiệu chức năng
Ứng dụng quản lý sản xuất nhiều phân xưởng được áp dụng để minh họa về
những gì tìm hiểu được về cơ sở dữ liệu phân tán áp dụng vào thực tế.



Sơ đồ chức năng hệ thống quản lý sản xuất nhiều phân xưởng.
2. Các bảng cho CSDL tập trung
Hệ thống gồm 4 bảng với các quan hệ như hình sau:

Các bảng cho CSDL tập trung cho hệ thống quản lý sản xuất nhiều phân xưởng.
Giả sử ứng dụng cần thống kê tính toán tình hình sản xuất tại các phân xương thuộc một
địa phương (TinhTP)
3. Thiết kế phân mảnh ngang
Giả sử ứng dụng được đặt ở 2 nơi Hà Nội và HCM là 2 nơi đặt phân xưởng sản xuất.
Ta thiết kế
 “Phanxuong” phân mảnh ngang dựa theo TinhTP giả sử TinhTP có 2 giá trị
“HN”, “HCM” đại diện cho 2 nơi.
 “Nhanvien” được phân mảnh ngang dẫn xuất theo “Phanxuong” dựa vào MaPX
 “Sanxuat “ được phân mảnh ngang dẫn xuất theo “Phanxuong” dựa vào MaPX
 “Sanpham” được nhân bản ở 2 nơi và được đồng bộ dữ liệu.
Ta có các mảnh ngang như sau:
PhanxuongHCM=
σ
TinhTP=’HCM’
(Phanxuong)
PhanxuongHN=
σ
TinhTP=’HN’


(Phanxuong)
Chương trình QL Sản xuất
Quản lý nhân viên
Quản lý SP xuất xưởng
Cập nhập thông tin Thống kế tình hình SX Cập nhật SP xuất xưởng
2

NhanvienHCM=Nhanvien 
< PhanxuongHCM (Phép nữa kết semi Join)
NhanvienHN=Nhanvien 
< PhanxuongHN

SanxuatHCM=Sanxuat 
< PhanxuongHCM
SanxuatHN=Sanxuat 
< PhanxuongHN

Vẽ cây phân mảnh dẫn xuất








4. Cài đặt CSDL tại các Server
4.1 Cài đặt Server database cho ứng dụng trên ServerHCM
ServerHCM cài đặt CSDL QLSanxuatHCM gồm 4 bảng :


use master
go
if exists(Select name from sysdatabases where name='QLSanxuatHCM')
drop database QLSanxuatHCM
go
create database QLSanxuatHCM
go
use QLSanxuatHCM
go
Create Table PhanxuongHCM
(
MaPX char(4) constraint pk_MaPX primary key,
TenPX nvarchar(50) not null,
DiachiPX nvarchar(100) null,
TinhTP nvarchar(20) constraint chk_Noi check(TinhTP='HCM')
)
go
PhanxuongHCM
SanxuatHCM
NhanvienHCM

PhanxuongHN
SanxuatHN
NhanvienHN

3
Create table NhanvienHCM
(
MaNV char(6) constraint pk_MaNV primary key,
HotenNV nvarchar(50) not null,

DiachiNV nvarchar(100) null,
MaPX char(4) constraint fk_MaPX1 references PhanxuongHCM(MaPX),
Trinhdo nvarchar(30) not null
)
go
Create table Sanpham
(
MaSP char(6) constraint pk_MaSP Primary key,
TenSP nvarchar(50) not null,
Mota nvarchar(100) null
)
go
Create table SanxuatHCM
(
MaPX char(4) constraint fk_MaPX2 references PhanxuongHCM(MaPX),
MaSP char(6) constraint fk_MaSP references Sanpham(MaSP),
Ngay smalldatetime not null,
Soluong integer constraint chk_Soluong Check(Soluong>=0) ,
constraint pk_Sanxuat primary key(MaPX,MaSP,Ngay)
)


4.2 Cài đặt Server Database cho ứng dụng trên ServerHN
ServerHCM cài đặt CSDL QLSanxuatHCM gồm 4 bảng như sau :

use master
go
if exists(Select name from sysdatabases where name='QLSanxuatHN')
drop database QLSanxuatHN
go

create database QLSanxuatHN
go
use QLSanxuatHN
go
4
Create Table PhanxuongHN
(
MaPX char(4) constraint pk_MaPX primary key,
TenPX nvarchar(50) not null,
DiachiPX nvarchar(100) null,
TinhTP nvarchar(20) constraint chk_Noi check(TinhTP='HN')
)
go
Create table NhanvienHN
(
MaNV char(6) constraint pk_MaNV primary key,
HotenNV nvarchar(50) not null,
DiachiNV nvarchar(100) null,
MaPX char(4) constraint fk_MaPX1 references PhanxuongHN(MaPX),
Trinhdo nvarchar(30) not null
)
go
Create table Sanpham
(
MaSP char(6) constraint pk_MaSP Primary key,
TenSP nVarchar(50) not null,
Mota nvarchar(100) null
)
go
Create table SanxuatHN

(
MaPX char(4) constraint fk_MaPX2 references PhanxuongHN(MaPX),
MaSP char(6) constraint fk_MaSP references Sanpham(MaSP),
Ngay smalldatetime not null,
Soluong integer constraint chk_Soluong Check(Soluong>=0),
constraint pk_Sanxuat primary key(MaPX,MaSP,Ngay))
4.3 Cài đặt linkserver
Server đặt tại TP.HCM có tên PHET cài đặt Database QLSanxuatHCM (Chứa
thông tin quản lý sản xuất tại TP.HCM) gồm 4 bảng : PhanxuongHCM,NhanvienHCM,
SanxuatHCM, Sanpham
Server đặt tại TP.HN có tên KHOA cài đặt Database QLSanxuatHN (Chứa thông
tin quản lý sản xuất tại Hà Nội ) gồm 4 bảng : PhanxuongHN, NhanvienHN, SanxuatHN,
Sanpham
Tại ServerHCM (PHET) cài đặt linkserver đến ServerHN (KHOA) bằng đoạn mã
sau (Thực thi trong Query Analyzer)
use master
go
Exec sp_addlinkedserver
@server='Khoa',
@srvproduct='SQLServer OLEDB Provider',
@provider='SQLOLEDB',
5
@data go
Exec sp_addlinkedsrvlogin 'Khoa','false',NULL,'sa','sa'
Để kiểm tra
select * from Khoa.QLSanxuatHN.dbo.PhanxuongHN

Tương tự tại ServerHN (KHOA) cài đặt linkserver đến ServerHCM (PHET) bằng
đoạn mã sau (Thực thi trong Query Analyzer)
use master

go
Exec sp_addlinkedserver
@server='PHET',
@srvproduct='SQLServer OLEDB Provider',
@provider='SQLOLEDB',
@datasrc='PHET'
go
Exec sp_addlinkedsrvlogin 'PHET','false',NULL,'sa','sa'
Để kiểm tra
select * from Khoa.QLSanxuatHCM.dbo.PhanxuongHCM

5. Cài đặt các khung nhìn phân tán
5.1. Trên serverHCM (Phet) Cài đặt các khung nhìn phân tán
use QLSanxuatHCM
Create View Phanxuong
as
Select * from PhanxuongHCM
Union
Select * from Khoa.QLSanxuatHN.dbo.PhanxuongHN

Create View Nhanvien
as
Select * from NhanvienHCM
Union
Select * from Khoa.QLSanxuatHN.dbo.NhanvienHN
Create View Sanxuat
as
Select * from SanxuatHCM
Union
Select * from Khoa.QLSanxuatHN.dbo.SanxuatHN


Create View SanphamSX
as
Select Sp.MaSp,TenSP,Mota,MaPX,Ngay,Soluong from Sanpham SP , Sanxuat
SX Where Sp.MaSP=SX.MaSP
5.2. Trên serverHN (Khoa) Cài đặt các khung nhìn phân tán
use QLSanxuatHN
6
Create View Phanxuong
as
Select * from PhanxuongHN
Union
Select * from Khoa.QLSanxuatHCM.dbo.PhanxuongHCM

Create View Nhanvien
as
Select * from NhanvienHN
Union
Select * from Khoa.QLSanxuatHCM.dbo.NhanvienHCM
Create View Sanxuat
as
Select * from SanxuatHN
Union
Select * from Khoa.QLSanxuatHCM.dbo.SanxuatHCM

Create View SanphamSX
as
Select Sp.MaSp,TenSP,Mota,MaPX,Ngay,Soluong from Sanpham SP , Sanxuat
SX Where Sp.MaSP=SX.MaSP
6. Cài đặt các Stored Procedure xử lý

6.1. Trên serverHCM (Phet) Cài đặt các Stored Procedure xử lý
a. Nhập TinhTP, MaSP, Ngay cho biết số lượng sản phẩm đã sản xuất trên các phân
xưởng theo ngày.
Create Proc TimSLSanxuat
@Noi varchar(10), @MaSP Char(6), @Ngay Varchar(20)
As
If @Noi='HCM' Local
Select SP.MaSP, TenSP, SoLuong
From Sanpham SP, SanxuatHCM SX
Where SP.MaSP=SX.MaSP and SP.MaSP=@MaSP and
Ngay=@Ngay
If @Noi='HN' Remote
Select SP.MaSP, TenSP, SoLuong
From Sanpham SP, Khoa.QLSanxuatHN.dbo.SanxuatHN SX
Where SP.MaSP=SX.MaSP and SP.MaSP=@MaSP and
Ngay=@Ngay
b. Thêm vào bảng Sanxuat thông tin gồm: MaSP, MaPX, Ngay, Soluong
Create Proc NhapSPXuatxuong
@Noi varchar(10),@MaPX as Char(4), @MaSP Char(6), @Ngay Varchar(20),
@Soluong Integer
As
If @Noi='HCM' Local
Insert Into
SanxuatHCM(MaPX,MaSP,Ngay,Soluong)
7
values (@MaPX, @MaSP, @Ngay, @Soluong)
If @Noi='HN' Remote
Insert Into Khoa.QLSanxuatHN.dbo.SanxuatHN(MaPX,MaSP,Ngay,Soluong)
values (@MaPX, @MaSP, @Ngay, @Soluong)
c. Xóa 1 dòng ra khỏi bảng Sanxuat

Create Proc XoaSPXuatxuong
@Noi varchar(10),@MaPX as Char(4), @MaSP Char(6), @Ngay Varchar(20)
As
If @Noi='HCM' Local
Delete From SanxuatHCM
Where MaPX=@MaPX and MaSP=@MaSP and Ngay=@Ngay
If @Noi='HN' Remote
Delete From Khoa.QLSanxuatHN.dbo.SanxuatHN
Where MaPX=@MaPX and MaSP=@MaSP and Ngay=@Ngay
d. Cập nhật dữ liệu trong bảng sản xuất (MaSP, MaPX, Ngay, Soluong)
Create Proc SuaSPXuatxuong
@Noi varchar(10),@MaPXCu as Char(4), @MaSPCu Char(6), @NgayCu
Varchar(20), @Soluong Integer, @MaPXMoi as Char(4), @MaSPMoi Char(6),
@NgayMoi Varchar(20)
As
If @Noi='HCM' Local
Update SanxuatHCM
Set MaPX=@MaPXMoi,MaSP=@MaSPMoi,
Ngay=@NgayMoi,Soluong=@Soluong
where MaPX=@MaPXCu and MaSP=@MaSPCu and Ngay=@NgayCu
If @Noi='HN' Remote
Update Khoa.QLSanxuatHN.dbo.SanxuatHN
Set MaPX=@MaPXMoi,MaSP=@MaSPMoi,
Ngay=@NgayMoi,Soluong=@Soluong
where MaPX=@MaPXCu and MaSP=@MaSPCu and
Ngay=@NgayCu
e. Thêm vào bảng Nhanvien ( MaNV, HoTenNV, DiachiNV, MaPX, Trinhdo)
Create Proc NhapNV
@MaNV Char(6), @HotenNV nvarchar(50), @MaPX varchar(4),@Trinhdo
nVarchar(30)

As
Declare @Noi varchar(20)
Lay gia tri Noi cua phan xuong trong Khung nhin phan tan
Select @Noi=TinhTP From Phanxuong where MaPX=@MaPX
If @Noi='HCM' Local
Insert Into NhanvienHCM(MaNV,HotenNV,DiachiNV,MaPX,Trinhdo)
values (@MaNV, @HotenNV, @DiachiNV, @MaPX, @Trinhdo)
If @Noi='HN' Remote
Insert Into NhanvienHN(MaNV,HotenNV,DiachiNV,MaPX,Trinhdo)
values (@MaNV, @HotenNV, @DiachiNV, @MaPX, @Trinhdo)
f. Cập nhật thông tin phân xưởng
8
Create Proc DieuchinhPX
@Ma Char(4), @Noi varchar(20), @Ten nvarchar(50),@Diachi nvarchar(100)
as
Declare @Noicu varchar(20), @Tencu nvarchar(50), @Diachicu nvarchar(100)
Lay gia tri Noicu, Tencu,Diachicu
Select @Noicu=TinhTP, @Tencu = TenPX, @Dichicu=DiachiPX
From Phanxuong Khung nhin phan tan
Where MaPX=@Ma
If(@Noi=@Noicu) chi cap nhat TenPX,DiachiPX tren khung nhin phan tan
If(@Ten<>@Tencu)
Update Phanxuong Set TenPX=@Ten where MaPX=@Ma
else
Begin
If(@Noi='HCM' Chuyen tu ServerHN(Khoa) sang ServerHCM(Phet)
Begin
Them vao Bang PhanxuongHCM
Insert into
PhanxuongHCM(MaPX,TenPX,DiachiPX,TinhTP)

Values(@Ma, @Ten, @Diachi, 'HCM')
Them vao Bang NhanvienHCM
Insert into NhanvienHCM(MaNV,HotenNV,DichiNV, MaPX, Trinhdo)
Select MaNV,HotenNV,DiachiNV,@Ma, trinhdo
From Khoa.QLsanxuatHN.dbo.NhanvienHN where MaPX=@Ma
Them vao Bang SanxuatHCM
Insert into SanxuatHCM(MaPX,MaSP,Ngay,Soluong)
Select @Ma,MaSp,Ngay,Soluong
From Khoa.QLsanxuatHN.dbo.SanxuatHN where MaPX=@Ma
Xoa ra khoi Bang NhanvienHN
Delete From Khoa.QLSanxuatHN.dbo.NhanvienHN
where MaPX=@Ma
Xoa ra khoi Bang SanxuatHN
Delete From Khoa.QLSanxuatHN.dbo.SanxuatHN
where MaPX=@Ma
End
Else Chuyen tu ServerHCM(Phet) sang ServerHN(Khoa)
Begin
Them vao Bang PhanxuongHN
Insert into PhanxuongHN(MaPX,TenPX,DiachiPX,TinhTP)
Values(@Ma, @Ten, @Diachi, 'HN')
Them vao Bang NhanvienHN
Insert into NhanvienHN(MaNV,HotenNV,DichiNV, MaPX, Trinhdo)
Select MaNV,HotenNV,DiachiNV,@Ma, trinhdo
From Phet.QLsanxuatHN.dbo.NhanvienHN where MaPX=@Ma
Them vao Bang SanxuatHCM
Insert into SanxuatHN(MaPX,MaSP,Ngay,Soluong)
Select @Ma,MaSp,Ngay,Soluong
9
From Phet.QLsanxuatHCM.dbo.SanxuatHCM where MaPX=@Ma

Xoa ra khoi Bang NhanvienHCM
Delete From Phet.QLSanxuatHCM.dbo.NhanvienHCM where
MaPX=@Ma
Xoa ra khoi Bang SanxuatHCM
Delete From Phet.QLSanxuatHCM.dbo.SanxuatHCM where
MaPX=@Ma
End
End



6.2. Trên serverHCM (Phet) Cài đặt các Procedure xử lý
a. Nhập TinhTP, MaSP, Ngay cho biết số lượng sản phẩm đã sản xuất trên các phân
xưởng theo ngày.
Create Proc TimSLSanxuat
@Noi varchar(10), @MaSP Char(6), @Ngay Varchar(20)
As
If @Noi='HN' Local
Select SP.MaSP, TenSP, SoLuong
From Sanpham SP, SanxuatHCM SX
Where SP.MaSP=SX.MaSP and SP.MaSP=@MaSP and Ngay=@Ngay
If @Noi='HCM' Remote
Select SP.MaSP, TenSP, SoLuong
From Sanpham SP, Phet.QLSanxuatHCM.dbo.SanxuatHCM SX
Where SP.MaSP=SX.MaSP and SP.MaSP=@MaSP and Ngay=@Ngay
b. Thêm vào bảng Sanxuat thông tin gồm : MaSP, MaPX, Ngay, Soluong
Create Proc NhapSPXuatxuong
@Noi varchar(10),@MaPX as Char(4), @MaSP Char(6), @Ngay Varchar(20),
@Soluong Integer
As

If @Noi='HN' Local
Insert Into SanxuatHN(MaPX,MaSP,Ngay,Soluong) values (@MaPX,
@MaSP, @Ngay, @Soluong)
If @Noi='HCM' Remote
Insert Into
Phet.QLSanxuatHCM.dbo.SanxuatHCM(MaPX,MaSP,Ngay,Soluong) values
(@MaPX, @MaSP, @Ngay, @Soluong)
c. Xóa 1 dòng ra khỏi bảng Sanxuat
Create Proc XoaSPXuatxuong
@Noi varchar(10),@MaPX as Char(4), @MaSP Char(6), @Ngay Varchar(20)
As
If @Noi='HN' Local
Delete From SanxuatHN Where MaPX=@MaPX and MaSP=@MaSP and
Ngay=@Ngay
If @Noi='HCM' Remote
10
Delete From Phet.QLSanxuatHCM.dbo.SanxuatHCM Where
MaPX=@MaPX and MaSP=@MaSP and Ngay=@Ngay
d. Cập nhật dữ liệu trong bảng sản xuất (MaSP, MaPX, Ngay, Soluong)
Create Proc SuaSPXuatxuong
@Noi varchar(10),@MaPXCu as Char(4), @MaSPCu Char(6), @NgayCu
Varchar(20), @Soluong Integer, @MaPXMoi as Char(4), @MaSPMoi Char(6),
@NgayMoi Varchar(20)
As
If @Noi='HN' Local
Update SanxuatHN
Set
MaPX=@MaPXMoi,MaSP=@MaSPMoi,Ngay=@NgayMoi,Soluong=@Soluong
where MaPX=@MaPXCu and MaSP=@MaSPCu and Ngay=@NgayCu
If @Noi='HCM' Remote

Update PHET.QLSanxuatHCM.dbo.SanxuatHCM
Set
MaPX=@MaPXMoi,MaSP=@MaSPMoi,Ngay=@NgayMoi,Soluong=@Soluong
where MaPX=@MaPXCu and MaSP=@MaSPCu and Ngay=@NgayCu
e. Thêm vào bảng Nhanvien ( MaNV, HoTenNV, DiachiNV, MaPX, Trinhdo)
Create Proc NhapNV
@MaNV Char(6), @HotenNV nvarchar(50), @MaPX varchar(4),@Trinhdo
nVarchar(30)
As
Declare @Noi varchar(20)
Lay gia tri Noi cua phan xuong trong Khung nhin phan tan
Select @Noi=TinhTP From Phanxuong where MaPX=@MaPX
If @Noi='HCM' Local
Insert Into NhanvienHCM(MaNV,HotenNV,DiachiNV,MaPX,Trinhdo)
values (@MaNV, @HotenNV, @DiachiNV, @MaPX, @Trinhdo)
If @Noi='HN' Remote
Insert Into NhanvienHN(MaNV,HotenNV,DiachiNV,MaPX,Trinhdo)
values (@MaNV, @HotenNV, @DiachiNV, @MaPX, @Trinhdo)
f. Cập nhật thông tin phân xưởng
Create Proc DieuchinhPX
@Ma Char(4), @Noi varchar(20), @Ten nvarchar(50),@Diachi nvarchar(100)
as
Declare @Noicu varchar(20), @Tencu nvarchar(50), @Diachicu nvarchar(100)
Lay gia tri Noicu, Tencu,Diachicu

Select @Noicu=TinhTP, @Tencu = TenPX, @Dichicu=DiachiPX
From Phanxuong Khung nhin phan tan
Where MaPX=@Ma
If(@Noi=@Noicu) chi cap nhat TenPX,DiachiPX tren khung nhin phan tan
If(@Ten<>@Tencu)

Update Phanxuong Set TenPX=@Ten where MaPX=@Ma
else
11
Begin
If(@Noi='HCM' Chuyen tu ServerHN(Khoa) sang ServerHCM(Phet)
Begin
Them vao Bang PhanxuongHCM
Insert into
PhanxuongHCM(MaPX,TenPX,DiachiPX,TinhTP)
Values(@Ma, @Ten, @Diachi, 'HCM')
Them vao Bang NhanvienHCM
Insert into NhanvienHCM(MaNV,HotenNV,DichiNV,
MaPX, Trinhdo)
Select MaNV,HotenNV,DiachiNV,@Ma, trinhdo
From Khoa.QLsanxuatHN.dbo.NhanvienHN
where MaPX=@Ma
Them vao Bang SanxuatHCm
Insert into SanxuatHCM(MaPX,MaSP,Ngay,Soluong)
Select @Ma,MaSp,Ngay,Soluong
From Khoa.QLsanxuatHN.dbo.SanxuatHN
where MaPX=@Ma
Xoa ra khoi Bang NhanvienHN
Delete From Khoa.QLSanxuatHN.dbo.NhanvienHN
where MaPX=@Ma
Xoa ra khoi Bang SanxuatHN
Delete From Khoa.QLSanxuatHN.dbo.SanxuatHN
where MaPX=@Ma
End
Else Chuyen tu ServerHCM(Phet) sang ServerHN(Khoa)
Begin

Them vao Bang PhanxuongHN
Insert into
PhanxuongHN(MaPX,TenPX,DiachiPX,TinhTP)
Values(@Ma, @Ten, @Diachi, 'HN')
Them vao Bang NhanvienHN
Insert into NhanvienHN(MaNV,HotenNV,DichiNV,
MaPX,
Trinhdo)
Select MaNV,HotenNV,DiachiNV,@Ma, trinhdo
From Phet.QLsanxuatHN.dbo.NhanvienHN
where MaPX=@Ma
Them vao Bang SanxuatHCM
Insert into SanxuatHN(MaPX,MaSP,Ngay,Soluong)
Select @Ma,MaSp,Ngay,Soluong
From Phet.QLsanxuatHCM.dbo.SanxuatHCM
where MaPX=@Ma
Xoa ra khoi Bang NhanvienHCM
Delete From Phet.QLSanxuatHCM.dbo.NhanvienHCM
where MaPX=@Ma
12
Xoa ra khoi Bang SanxuatHCM
Delete From Phet.QLSanxuatHCM.dbo.SanxuatHCM
where MaPX=@Ma
End
End
7. Giao diện chương trình







13


14
8. Những vấn đề chưa giải quyết
• Vấn đề khi một server chứa Phân xưởng bị hỏng thì hệ thống cũng không hoạt
động được (vấn đề nhân bản dữ liệu)
• Chưa giải quyết vần đề các giao dịch đồng thời xảy ra
• Chưa quan tâm đến việc Commit các giao dịch thành công và Rollback các giao
dịch thất bại
• Và còn một số vấn đề khác nữa
Trên đây là những vần đề quan trọng khi thực hiện một ứng dụng phân tán, nhưng
do thời gian hạn hẹp nên chỉ thực hiện dược một ứng dụng nhỏ đơn giản: Giải quyết
được các vần đề truy xuất dữ liệu, cập nhật dữ liệu giữa các mảnh. Trong tương lai sẽ
phát triển hoàn thiện hơn.

×