Xem xét rằng Liên kết SQL Azure không hỗ trợ thuộc tính IDENTITY hoặc SEQUENCEs, cách nào sẽ là cách hiệu quả để tạo số tuần tự khi chèn bản ghi?Cách hiệu quả để tạo số tuần tự trên Liên minh SQL Azure
Ví dụ, đưa ra một bảng với các cột:
CREATE TABLE [dbo].[Orders] (
[TenantId] [uniqueidentifier] NOT NULL,
[OrderId] [uniqueidentifier] NOT NULL,
[OrderNumber] [int] NOT NULL
CONSTRAINT [PK_Orders] PRIMARY KEY CLUSTERED (
[TenantId] ASC,
[OrderId] ASC
)
) FEDERATED ON ([FederationKey] = [TenantId])
cho mỗi đơn hàng chèn vào cho một người thuê nhà nhất định, OrderId nên được tăng lên. Ví dụ, đối với một OrderId dài hạn sẽ là 1, 2, 3 ... và đối với B OrderId của người thuê nhà cũng sẽ là 1, 2, 3 ... trong một chuỗi độc lập. Lý tưởng nhất là không nên có khoảng trống.
TenantId và OrderId là các thành phần của khóa chính. Giá trị của chúng được thiết lập bởi ứng dụng và chúng không liên quan đến vấn đề tạo chuỗi; chỉ OrderId có số thứ tự với ý nghĩa kinh doanh. Ngoài ra, TenantId là khóa phân phối của liên kết.
This MSDN Blog article mô tả trong tùy chọn 1 cách tiếp cận để có bảng giữ các chuỗi và sử dụng quy trình được lưu trữ trong giao dịch tách biệt để tăng trình tự. Mỗi người thuê nhà sẽ có một bản ghi trên bảng này giữ giá trị được sử dụng cuối cùng của chuỗi.
Đó có phải là phương pháp tối ưu để xem xét khả năng mở rộng, tranh chấp, khóa tài nguyên không? Bất kỳ thủ thuật hữu ích khác, xem xét những hạn chế của Liên minh SQL Azure?
Great câu trả lời, ngoài việc lựa chọn tôi trích dẫn trong câu hỏi của tôi (bằng cách sử dụng một thủ tục lưu trữ để cập nhật một bản ghi bằng cách sử dụng một kết nối riêng biệt), thay thế đầu tiên của bạn cung cấp khả năng mở rộng lớn và thông lượng với chi phí của một số phức tạp; lựa chọn thứ hai khá đơn giản và có thể đủ khi quá trình được sắp xếp hợp lý (ví dụ: sử dụng hàng đợi thông báo) hoặc khi tỷ lệ tạo đơn đặt hàng mới cho mỗi đối tượng thuê không quá cao. –