Announcement

Collapse
No announcement yet.

hỏi bài tập sql qlbh?

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • hỏi bài tập sql qlbh?

    mình đang làm bài quản lí bán hàng (chắc mọi người đều biết ), mình có thắc mắc ở câu 10, 11 và 12
    câu 10: ngày khách hàng đăng kí thành viên phải lớn hơn ngày sinh của người đó.
    câu 11: ngày mua hàng của một khách hàng thành viên sẽ lớn hơn hoặc bằng ngày khách hàng đó đăng kí thành viên
    câu 12: ngày bán hàng của một nhân viên phải lớn hơn hoặc bằng ngày nhân viên đó vào làm.
    thắc mắc là tại sao câu 10 lại dùng hàm Check mà không phải là trigger, còn 2 câu còn lại lại làm trigger mà không phải check (vì thấy câu hỏi không khác nhau lắm) và cuối cùng là check và trigger khác nhau chỗ nào.
    mong mọi người hướng dẫn, cảm ơn. :shy:
    đừng cố gắng trở thành 1 người thành công mà hãy cố gắng trở thành 1 người có giá trị :happy:

  • #2
    Originally posted by 13520851 View Post
    mình đang làm bài quản lí bán hàng (chắc mọi người đều biết ), mình có thắc mắc ở câu 10, 11 và 12
    câu 10: ngày khách hàng đăng kí thành viên phải lớn hơn ngày sinh của người đó.
    câu 11: ngày mua hàng của một khách hàng thành viên sẽ lớn hơn hoặc bằng ngày khách hàng đó đăng kí thành viên
    câu 12: ngày bán hàng của một nhân viên phải lớn hơn hoặc bằng ngày nhân viên đó vào làm.
    thắc mắc là tại sao câu 10 lại dùng hàm Check mà không phải là trigger, còn 2 câu còn lại lại làm trigger mà không phải check (vì thấy câu hỏi không khác nhau lắm) và cuối cùng là check và trigger khác nhau chỗ nào.
    mong mọi người hướng dẫn, cảm ơn. :shy:
    Không biết có nhớ đúng không nữa, Câu 10 vì 2 thuộc tính này thuộc trên 1 bảng nên dùng check cho tiện, dễ làm - nếu thích thì e viết trigger cũng được. Còn câu 11,12 thì các thuộc tính này thuộc nhiều bảng khác nhau nên phải viết trigger.

    Comment


    • #3
      --10. Ngày khách hàng đăng ký là khách hàng thành viên phải lớn hơn ngày sinh của người đó.
      ALTER TABLE KHACHHANG ADD CHECK(NGDK>NGSINH)
      --11. Ngày mua hàng (NGHD) của một khách hàng thành viên sẽ lớn hơn hoặc bằng ngày khách hàng đó đăng ký thành viên (NGDK).
      CREATE TRIGGER CHECH_NGAYKH
      ON HOADON
      FOR INSERT
      AS
      IF UPDATE(NGHD) --Kiểm tra việc cập nhật trên cột
      BEGIN
      DECLARE @NGHD SMALLDATETIME, @NGDK SMALLDATETIME
      SET @NGHD=(SELECT NGHD FROM INSERTED)
      SET @NGDK=(SELECT NGDK FROM KHACHHANG A, INSERTED B WHERE A.MAKH=B.MAKH)
      IF(@NGHD<@NGDK)
      BEGIN
      PRINT'NGHD PHAI LON HON NGDK'
      ROLLBACK TRAN --Câu lệnh quay lui khi thực hiện biến cố không thành công
      END
      ELSE
      BEGIN
      PRINT'HOA DON DA THEM THANH CONG'
      END
      END
      -------------------------------------------------
      CREATE TRIGGER CHECK_NGAYKH
      ON HOADON
      FOR UPDATE, INSERT
      AS
      IF UPDATE(NGHD)
      BEGIN
      IF(SELECT COUNT(*) FROM KHACHHANG K, INSERTED I
      WHERE K.MAKH = I.MAKH AND
      I.NGHD < K.NGDK)>0
      BEGIN
      PRINT'NGHD PHAI LON HON NGDK'
      ROLLBACK TRAN
      END
      ELSE
      BEGIN
      PRINT'HOA DON DA THEM THANH CONG'
      END
      END
      --12. Ngày bán hàng (NGHD) của một nhân viên phải lớn hơn hoặc bằng ngày nhân viên đó vào làm.
      CREATE TRIGGER TRG_NGAYNV
      ON HOADON
      FOR UPDATE, INSERT
      AS
      IF UPDATE(NGHD) --Kiểm tra việc cập nhật trên cột
      BEGIN
      DECLARE @NGHD SMALLDATETIME, @NGVL SMALLDATETIME
      SET @NGHD=(SELECT NGHD FROM INSERTED)
      SET @NGVL=(SELECT NGVL FROM NHANVIEN A,INSERTED B WHERE A.MANV=B.MANV)
      IF(@NGHD<@NGVL)
      BEGIN
      PRINT 'NGHD PHAI LON HON NGVL'
      ROLLBACK TRAN -- Câu lệnh quay lui khi thực hiện biến cố không thành công
      END
      END
      ---------------------------------------------------------------------------------
      CREATE TRIGGER TRG_NGAYNV02 ON HOADON
      FOR INSERT, UPDATE
      AS
      BEGIN
      IF EXISTS ( SELECT * FROM INSERTED A, NHANVIEN B
      WHERE A.MANV = B.MANV AND A.NGHD < B.NGVL)
      BEGIN
      PRINT 'NGHD PHAI LON HON NGVL'
      ROLLBACK TRAN
      END
      IF(UPDATE(NGHD))
      BEGIN
      IF EXISTS ( SELECT * FROM INSERTED A, DELETED B
      WHERE A.SOHD = B.SOHD AND A.NGHD = B.NGHD)
      BEGIN
      PRINT'DU LIEU MOI CHEN GIONG DU LIEU DA CO'
      ROLLBACK TRAN
      END
      END

      Comment


      • #4
        bài giải mình có rồi, mình cần giải thích cái thắc mắc á :shy:
        đừng cố gắng trở thành 1 người thành công mà hãy cố gắng trở thành 1 người có giá trị :happy:

        Comment


        • #5
          Originally posted by 13520851 View Post
          bài giải mình có rồi, mình cần giải thích cái thắc mắc á :shy:
          Môn này mình học vào HK3 giờ lâu rồi không nhớ :beatbrick:

          Comment


          • #6
            Originally posted by 12520288 View Post
            Môn này mình học vào HK3 giờ lâu rồi không nhớ :beatbrick:
            :shot: :shot::shot:
            đừng cố gắng trở thành 1 người thành công mà hãy cố gắng trở thành 1 người có giá trị :happy:

            Comment


            • #7
              Bạn [MENTION=12734]11520549[/MENTION] trả lời đúng rồi.
              Check sử dụng với những trường hợp cùng 1 bảng, sẽ tối ưu được tốc độ.
              Trigger sử dụng với những trường hợp phức tạp, có thể lồng được 2 trigger vào nhau.
              Để dễ hiểu hơn thử tưởng tượng :
              + Làm sao bạn lấy được ngày mới thêm vào (lấy từ bảng inserted, nên nhớ Inserted + deleted chỉ có thể truy cập trong Trigger) để so sánh với ngày đã có rồi ?

              Comment


              • #8
                cảm ơn anh :haha:
                đừng cố gắng trở thành 1 người thành công mà hãy cố gắng trở thành 1 người có giá trị :happy:

                Comment

                LHQC

                Collapse
                Working...
                X