Bạn chưa có tài khoản? Hãy bấm vào đây để đăng ký làm thành viên của chúng tôi!
VNOUG.ORG

VNOUG.ORG

Vietnam Oracle Users Group - Diễn đàn của Cộng đồng Oracle Việt Nam
Hôm nay, Thứ 5 Tháng 9 09, 2010 10:20 Sáng
Thời gian được tính theo giờ UTC + 7 Giờ

Đăng nhập

Tên thành viên: Mật khẩu: Ẩn trạng thái trực tuyến của tôi trong phiên đăng nhập này


Subscribe




Tạo chủ đề mới Gửi bài trả lời [ 20 bài viết ] [ 1 tập tin đính kèm ] Chuyển đến trang 1, 2, 3, 4  Trang kế tiếp
Người gửi Nội dung (Xem: 2445 | Trả lời: 19)
Tiêu đề bài viết: việc kiểm tra ràng buộc
Gửi bàiĐã gửi: Thứ 6 Tháng 5 16, 2008 8:29 Sáng
Ngoại tuyến
Trung sĩ
Trung sĩ

Tuổi: 26
Sinh nhật: 22-09-1983
Ngày tham gia: Thứ 6 Tháng 5 16, 2008 8:15 Sáng
Bài viết: 7
Quốc gia: Vietnam (vn)

Người tạo chủ đề
1. Các bạn ơi, cho mình hỏi mình có CSDL như sau:
SINHVIEN(MSSV,HOTEN,DIEMLT,DIEMTH)
Primary Key: MSSV
MSSV: Mã số sinh viên
DIEMLT: Điểm lý thuyết
DIEMTH: Điểm thực hành

Với ràng buộc table constraint bắt buộc là DIEMLT+DIEMTH<=10, thế các bạn cho mình hỏi mình làm sao để kiểm tra ràng buộc này, đồng thời kiểm tra ràng buộc DIEMLT có phần thập phân chỉ nằm trong điều kiện là.{0.00, 0.25, 0.5, 0.75} ví dụ như 7.25 hoặc 7.5 hoặc 7.75.

2. Cho hỏi thêm là Trong 1 bảng mình có 1 cột dữ liệu làm sao có thể lấy dữ liệu tích hợp là 1 dạng tập hợp nằm trên 1 row, chẳng hạn như 1 môn học có 3 phần ví dụ như cột HocPhan (('web',1),('web',2),('web',3))trong bảng MONHOC

Mong các bạn chỉ giúp, xin chân thành cám ơn các bạn.


Đầu trang
Xem thông tin cá nhân
Tiêu đề bài viết: Re: việc kiểm tra ràng buộc
Gửi bàiĐã gửi: Thứ 6 Tháng 5 16, 2008 10:34 Sáng
Ngoại tuyến
Thiếu tá - Tiểu đoàn phó
Thiếu tá - Tiểu đoàn phó

Tuổi: 34
Sinh nhật: 24-05-1976
Ngày tham gia: Thứ 4 Tháng 12 26, 2007 2:04 Chiều/Tối
Bài viết: 100
Quốc gia: Vietnam (vn)
Theo ý kiên tôi:
1.Để kiểm tra các ràng buộc như cậu muốn, cậu hãy viết trigger cho bảng này. Nó sẽ kiểm tra khi insert và update.
2. Cậu để cột điểm đó là trường varchar2 đi, lưu trữ và làm việc bàng cách chuyển đổi ra số và lại ghi lại vào bằng text.
Hoàng


Đầu trang
Xem thông tin cá nhân
Tiêu đề bài viết: Re: việc kiểm tra ràng buộc
Gửi bàiĐã gửi: Thứ 6 Tháng 5 16, 2008 5:33 Chiều/Tối
Ngoại tuyến
Thượng tướng - Tư lệnh quân khu
Thượng tướng - Tư lệnh quân khu
Hình đại diện của thành viên

Tuổi: 32
Sinh nhật: 03-09-1978
Ngày tham gia: Thứ 4 Tháng 7 05, 2006 9:07 Sáng
Bài viết: 655
Đến từ: Hà Nội
Quốc gia: Vietnam (vn)
Nghề nghiệp: System Architect
Hi giaolong,

1. Yêu cầu 1 có thể thực hiện đơn giản như sau:

Mã:
CREATE TABLE sinhvien
    (mssv                           VARCHAR2(20),
    hoten                          VARCHAR2(50),
    diemlt                         NUMBER(3,2),
    diemth                         NUMBER(3,2))
  )
/

-- Constraints for SINHVIEN
ALTER TABLE SINHVIEN ADD CONSTRAINT PK_MASV
  PRIMARY KEY (
  MSSV
)
/

ALTER TABLE sinhvien
ADD CONSTRAINT ck_diem
   CHECK (
            ( DIEMLT+DIEMTH<=10 )
      and ( (DIEMLT-trunc(DIEMLT)) in (0, 0.25, 0.50, 0.75) )
)
/


:BA_8: Nếu chú ý rằng điều kiện hợp lệ cho phần thập phân của DIEMLT dẫn đến hệ quả là khi nhân DIEMLT với 4 sẽ cho kết quả là số nguyên, nên ta có thể "biến đổi" cách phát biểu cho điều kiện kiểm tra này và nhận được contraint tương đương đúng theo yêu cầu.

Mã:
ALTER TABLE sinhvien
ADD CONSTRAINT ck_diem
   CHECK (
            ( DIEMLT+DIEMTH<=10 )
      and ( (DIEMLT*4)=trunc(DIEMLT*4) )
)


Về phương pháp dùng trigger để kiểm tra dữ liệu như ngugat nói thì là đúng nhất, và đúng cho mọi trường hợp :!: Chính xác hơn thì: trong Oracle (và chắc là ở cả các CSDL khác nữa), nếu biếu thức kiểm tra của check-contraint phức tạp quá thì chỉ có thể thực hiện thông qua các trigger mà thôi :idea:

Trích dẫn:
check contraint là một trong 5 loại contraint để kiểm soát toàn vẹn dữ liệu, bao gồm: not-null contraint, Primary key contraint, foreign key contraint, unique key contraint, và check contraint.


2. Ở câu hỏi thứ 2 thì bạn cần mô tả rõ hơn một chút thì mới trả lời bạn được, chằng hạn: mô tả lại cấu trúc table HocPhan, mô tả cách client sẽ sử dụng kết quả đó. Hỏi cụ thể như vậy vì không biết bạn có áp dụng các cấu trúc XML hay JSON tại client để phân tích chuỗi đó ko? (Chuỗi mà bạn yêu cầu có cấu trúc khá giống định dạng JSON) :!:

giaolong đã viết:
1. Các bạn ơi, cho mình hỏi mình có CSDL như sau:
SINHVIEN(MSSV,HOTEN,DIEMLT,DIEMTH)
Primary Key: MSSV
MSSV: Mã số sinh viên
DIEMLT: Điểm lý thuyết
DIEMTH: Điểm thực hành

Với ràng buộc table constraint bắt buộc là DIEMLT+DIEMTH<=10, thế các bạn cho mình hỏi mình làm sao để kiểm tra ràng buộc này, đồng thời kiểm tra ràng buộc DIEMLT có phần thập phân chỉ nằm trong điều kiện là.{0.00, 0.25, 0.5, 0.75} ví dụ như 7.25 hoặc 7.5 hoặc 7.75.

2. Cho hỏi thêm là Trong 1 bảng mình có 1 cột dữ liệu làm sao có thể lấy dữ liệu tích hợp là 1 dạng tập hợp nằm trên 1 row, chẳng hạn như 1 môn học có 3 phần ví dụ như cột HocPhan (('web',1),('web',2),('web',3))trong bảng MONHOC

Mong các bạn chỉ giúp, xin chân thành cám ơn các bạn.


Luôn luôn lắng nghe
Lâu lâu mới hiểu

...
Hình ảnh
VNOUG.ORG - Cộng đồng Oracle Việt Nam


Sửa lần cuối bởi dotcom vào ngày Chủ nhật Tháng 5 18, 2008 9:14 Sáng với 1 lần sửa trong tổng số.
sửa lại ck_diem


Đầu trang
Xem thông tin cá nhân
Tiêu đề bài viết: Re: việc kiểm tra ràng buộc
Gửi bàiĐã gửi: Thứ 6 Tháng 5 16, 2008 11:43 Chiều/Tối
Ngoại tuyến
Trung sĩ
Trung sĩ

Tuổi: 26
Sinh nhật: 22-09-1983
Ngày tham gia: Thứ 6 Tháng 5 16, 2008 8:15 Sáng
Bài viết: 7
Quốc gia: Vietnam (vn)

Người tạo chủ đề
1.
Ví dụ như mình có bảng 1:
HOCPHAN (MaHP,TenHP,SoLuongHP)
PK: MaHP
Ví dụ: MaHP TenHP SoLuongHP
HP-1 Web 3

MONHOC(MaHP,MaMH,TenMH)
PK:MaHP,MaMH
Ví dụ: MaHP MaMH TenMH
HP-1 (‘Web’,1), (‘Web’,2) (‘Web’,3) Thiết kế Web
Cột MaMH căn cứ vào số lượng học phần (SoLuongHP) nên có MaMH có dạng tập hợp như trên, mà theo như bạn thì bảng MONHOC có PK zậy đúng ko?

2.Cho mình hỏi thêm khi mình có bảng sau:
SINHVIEN(MSSV,HoTen,DiemTichLuy,TongSoTinChi)
Ví dụ 1 SV đăng ký nhiều học phần cùng 1 môn (có thể do rớt và trả nợ hoặc cải thiện điểm nên chỉ lấy điểm thi mới nhất) thì chỉ tính trên học phần mới nhất, và DiemTichLuy đc tính theo công thức sau:
TONG_HPMN [ (HPMN.DiemLT + HPMN.DiemTH) * (HPMN.MONHOC.TinChiLT + HPMN.MONHOC.TinChiTH) ]
Còn TongSoTinChi đc tính như sau:
TONG_HPMN [ HPMN.MONHOC.TinChiLT + HPMN.MONHOC.TinChiTH ]

Thế cho mình hỏi là bảng HPMN có nhất thiết tạo từ View ko?Mong hướng dẫn từ các bạn, các này mình ko biết, mong sự giúp đỡ xin chân thành cám ơn.


Đầu trang
Xem thông tin cá nhân
Re: việc kiểm tra ràng buộc --> Thiết kế CSDL?
Tiêu đề bài viết: Re: việc kiểm tra ràng buộc --> Thiết kế CSDL?
Gửi bàiĐã gửi: Thứ 7 Tháng 5 17, 2008 8:00 Sáng
Ngoại tuyến
Thượng tướng - Tư lệnh quân khu
Thượng tướng - Tư lệnh quân khu
Hình đại diện của thành viên

Tuổi: 32
Sinh nhật: 03-09-1978
Ngày tham gia: Thứ 4 Tháng 7 05, 2006 9:07 Sáng
Bài viết: 655
Đến từ: Hà Nội
Quốc gia: Vietnam (vn)
Nghề nghiệp: System Architect
Hi giaolong,

Theo tôi đoán thì bạn đang làm bài tập lớn, rất muốn giúp bạn nhưng có lẽ bạn cần mô tả lại toàn bộ yêu cầu bài toán thì mới có thể hiểu và giúp bạn chính xác được.

Bạn tham khảo bài viết sau và post lại chi tiết đề bài nhé: http://vnoug.org/viewtopic.php?f=70&t=1196

dotcom


Luôn luôn lắng nghe
Lâu lâu mới hiểu

...
Hình ảnh
VNOUG.ORG - Cộng đồng Oracle Việt Nam


Đầu trang
Xem thông tin cá nhân
Hiển thị những bài viết cách đây: Sắp xếp theo
Tạo chủ đề mới Gửi bài trả lời [ 20 bài viết ] [ 1 tập tin đính kèm ] Chuyển đến trang 1, 2, 3, 4  Trang kế tiếp

Subscribe


Ai đang trực tuyến?

Đang xem chuyên mục này: Không có thành viên nào đang trực tuyến và 1 khách


Bạn không thể tạo chủ đề mới trong chuyên mục này
Bạn không thể trả lời bài viết trong chuyên mục này
Bạn không thể sửa những bài viết của mình trong chuyên mục này
Bạn không thể xoá những bài viết của mình trong chuyên mục này
Bạn không thể gửi tập tin đính kèm trong chuyên mục này

Tìm kiếm với từ khoá:
Chuyển đến:

Ai đang trực tuyến?

Ai đang trực tuyến? Trong tổng số 1 người đang trực tuyến: không có thành viên, không có thành viên ẩn và chỉ có 1 vị khách
Số lượt người ghé thăm website đông nhất là 66 vào ngày Thứ 2 Tháng 5 04, 2009 4:14 Sáng

Đang xem chuyên mục này: Không có thành viên nào đang trực tuyến và 1 khách

Thông tin trên được cập nhật trong vòng 1 phút vừa qua
cron
© Bản quyền 2006-2007 VNOUG.ORG. E-mail
Ban Quản trị VNOUG.ORG: vnoug.org, rfvn, dotcom
© Ghi rõ nguồn "VNOUG.ORG" khi sử dụng nội dung từ site này.

Hệ thống sử dụng phpBBVietNam © 2006 - 2007 phpBBVietNam Group