Thiết kế hệ thống đặt vé xem phim (phần 2)

Thiết kế hệ thống đặt vé xem phim

Sáng sớm mưa gió lạnh lẽo chả đi được đâu nên tranh thủ viết tiếp bài viết về việc thiết kế mấy thứ liên quan đến Cí nì mơ tiếp để anh em có thêm cái nhìn về CSDL cũng như cách sử dụng mấy cái lệnh hay hay ho ho của SQL mà ít được sử dụng :v. Đại ý rằng sau khi mình làm bài viết đầu tiên về cái này thì có đi tìm tòi thêm về SQL thấy ai ngờ mình hiểu biết về nó còn ít vãi cả đái ra, toàn mấy cái cú pháp hay ho mà chả biết được mới đau cơ chứ. Anh em tham khảo bài viết trước chắc cũng thấy mấy cái như XML Path hay Pivot rồi đó. Tính năng tuyệt cmn vời mà chả mấy khi dùng, uống vãi 😐 Chính vì thế nay mình xin giới thiệu tiếp 1 cái hay ho nữa trong SQL mà cũng ứng dụng luôn cho cách thiết kế hệ thống đặt vé xem phim luôn :v

CÁi mình định nói trong ngày mưa này chính là về 1 thứ mà anh em làm DB chắc dùng suốt ngày luôn. Buồn buồn lôi ra viết 1 cái store có khi đã dùng nó rồi ấy chứ. Đố anh em nào biết đó là cái gì, éo phải SELECT hay WHERE đâu nhé :v Cái đó thì éo ai thèm đố :)) …………Mà thôi chắc không đoán được đâu, nói luôn cho nó vuông :3 Thứ mà mình muốn nói đến đó chính là OUTPUT. Vỗ tay đi nào!!!!!!!!

Cái này nghe thì đơn giản vl vì cứ hở ra là dùng ấy mà. Anh em nào viết SQL chả truyền vào rồi lấy ra từ mấy cái Store phân trang để lấy tổng là cái chắc rồi hay lấy ra cái ID vừa insert xong nữa chứ :v Chính vì vậy nên mấy cái cơ bản đó mình không buồn nhắc tới nữa :3 Ý chính ở đây là mình muốn giới thiệu 1 tính năng khác của cái OUTPUT mà ít anh em để ý tới cơ. Đó chính là việc sử dụng OUTPUT để lấy ra kết quả vừa được INSERT, UPDATE hay DELETE

Anh em nào dùng trigger thì chắc đều biết mấy thằng Inserted với Deleted để lấy ra được giá trị của row vừa được tương tác đúng không :3 Nếu không biết thì thôi mình đành buồn lòng giải thích lại 1 chút vậy 😦

Trong SQL thì có 1 chỗ dùng để chứa cái giá trị mà chúng ta vừa tiến hành thao tác khi sử dụng các lệnh liên quan đến việc thay đổi dữ liệu như thêm và xóa còn thằng Sửa thì Bản chất chính là xóa đi rồi thêm lại nên chả khác gì cả. Cái chỗ để chứa đó sẽ được sử dụng thông qua cú pháp INSERTED và DELETED.

Khi chúng ta muốn in ra kết quả của 1 câu lệnh INSERT vừa thực hiện xong thì sẽ có cách làm đó là sử dụng INSERTED kết hợp với từ khóa OUTPUT thay vì phải tiến hành SELECT lại, rất mất thời gian và hao tổn nguồn lực của con CPU đáng thương :3

Ví như ở đây ta có bảng phòng chiếu đi. Ta thử tiến hành 1 câu nhé

INSERT INTO dbo.Room ( Id, Name)

OUTPUT INSERTED.ID, INSERTED.name

VALUES (5, ‘Phòng 5’);

GO

Tương tự anh em làm thử với thằng DELETE thôi chứ có cái gì đâu đúng không :))

DELETE from dbo.Room
OUTPUT DELETED.id, DELETED.name
WHERE ID=5;
GO

Còn với thằng UPDATE thì nói rồi đấy. Kết cmn hợp của 2 thằng INSERT với DELETE thôi ấy mà

UPDATE dbo.Room
SET Name = ‘Phòng XXX’
OUTPUT DELETED.id, INSERTED.name
WHERE ID = 5;
GO

Chính vì những cái tiện lợi như thế này mà chúng ta có thể nhàn hạ đi 1 đống thứ đó các đồng dâm à :v Với việc này thì những câu lệnh cần lấy ra danh sách id của 1 bảng rồi đi cập nhật cho bảng đó cùng với đống bảng liên quan sẽ bớt đi kha khá công sức đấy :3

Ví dụ trong cái hệ thống xem phim của anh em ta đúng không. Khi mà có 1 thằng đặt vé và thanh toán thành công thì những thứ mà anh em ta cần làm là gì nhỉ. Cùng thinking 1 tí cái nào =))

Việc đầu tiên là cập nhật những cái ghế nó chọn chuyển qua trạng thái ĐÃ CÓ NGƯỜI ĐẶT, cập nhật trạng thái phòng chiếu là đã đầy hay chưa, cập nhật số tiền thanh toán, lưu lại thông tin vé bla bla gì gì đó. Thật là nhiều quá đi đúng không.

Với tư duy làm thông thường thì chúng ta sẽ SELECT ra 1 danh sách ID nào đó rồi insert vào 1 cái bảng tạm sau đấy thì lại dùng nó để UPDATE hay DELEE gì gì đó ở bảng khác thì nay OUTPUT bạn có thể bỏ qua được cái đoạn SELECT ra. Sử dụng OUTPUT nó sẽ tối ưu hơn 1 bước vì có thể lấy ra được luôn danh sách id từ trong câu lệnh UPDATE thay vì phải sử dụng SELECT thêm 1 lần

declare @ids table (id int);

update table1
    set status = 1
    output inserted.id into @ids
    where status = 2;

update table2
    set status = 1,
        date = getdate()
    where id in (select id from @ids);

Ở trên sẽ là 1 ví dụ để anh em tham khảo về việc sử dụng OUTPUT nhé. Còn có thể trong 1 bài viết tới mình sẽ có 1 bài tổng quan về việc tối ưu hiệu năng khi sử dụng OUTPUT :3

Giờ thì đói quá rồi. Đi ăn đã :3 Anh em hóng bài sau nhé

Advertisements

One thought on “Thiết kế hệ thống đặt vé xem phim (phần 2)

Add yours

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

Create a free website or blog at WordPress.com.

Up ↑

%d bloggers like this: