Khi kiểm tra chức năng của ứng dụng của bạn hoặc hiệu suất của một thủ tục được lưu trữ cụ thể hoặc một truy vấn đặc biệt trong môi trường phát triển, bạn cần có dữ liệu được lưu trữ trong cơ sở dữ liệu phát triển điển hình hoặc tương tự với dữ liệu được lưu trữ trong cơ sở dữ liệu sản xuất. Điều này là do hiệu suất của một truy vấn đang xử lý 50 bản ghi sẽ khác với hiệu suất của cùng một truy vấn đang xử lý 50 triệu hàng. Khôi phục bản sao của cơ sở dữ liệu sản xuất vào máy chủ cơ sở dữ liệu phát triển cho mục đích thử nghiệm không phải lúc nào cũng là một tùy chọn hợp lệ, do dữ liệu quan trọng được lưu trữ trong các cơ sở dữ liệu này và không được mở cho tất cả nhân viên xem, trừ khi bạn đang phát triển một dữ liệu mới ứng dụng và chưa có cơ sở dữ liệu sản xuất.
Giải pháp thay thế tốt nhất và an toàn nhất là điền vào các bảng cơ sở dữ liệu phát triển với dữ liệu thử nghiệm. Tạo dữ liệu thử nghiệm rất hữu ích để kiểm tra hiệu suất của ứng dụng hoặc một chức năng mới mà không thay đổi dữ liệu sản xuất. Không có cách đơn giản nào để tạo dữ liệu thử nghiệm phù hợp với tất cả các tình huống, đặc biệt là khi bạn cần tạo một lượng lớn dữ liệu để kiểm tra hiệu suất của các truy vấn và giao dịch phức tạp, trong đó bạn nên bao gồm tất cả các kết hợp có thể có của các trường hợp thử nghiệm.
Để lấp đầy một bảng với một lượng lớn dữ liệu, cách dễ nhất là viết một tập lệnh đơn giản để chèn các bản ghi giống hệt nhau vào bảng cơ sở dữ liệu với số lượng bản sao bạn cần. Nhưng vấn đề là SQL Server Query Optimizer sẽ xây dựng một kế hoạch khác nhau trên cơ sở dữ liệu phát triển với một kế hoạch được xây dựng trên cơ sở dữ liệu sản xuất do sự khác biệt trong phân phối dữ liệu. Ví dụ:tập lệnh bên dưới sẽ điền vào bảng Sinh viên với 100 nghìn bản ghi kiểm tra dự phòng bằng cách sử dụng GO Number tuyên bố:
INSERT INTO Students (FirstName, LastName, BirthDate, STDAddress) VALUES ('John','Horold','2005-10-01','London, St15') GO 25000 INSERT INTO Students (FirstName, LastName, BirthDate, STDAddress) VALUES ('Mike','Zikle','2005-06-08','London, St18') GO 25000 INSERT INTO Students (FirstName, LastName, BirthDate, STDAddress) VALUES ('Faruk','Cedrik','2005-03-15','London, St24') GO 25000 INSERT INTO Students (FirstName, LastName, BirthDate, STDAddress) VALUES ('Faisal','Ali','2005-12-05','London, St41') GO 25000
Một tùy chọn khác là tạo dữ liệu ngẫu nhiên tùy thuộc vào kiểu dữ liệu của mỗi cột. Cột ID có thuộc tính IDENTITY sẽ tự động tạo số thứ tự mà không cần bất kỳ nỗ lực mã hóa nào từ phía bạn. Nhưng nếu bạn định tạo điểm ngẫu nhiên cho học sinh, bạn có thể nhận được lợi ích từ RAND () Hàm T-SQL và ép kiểu kết quả là kiểu dữ liệu số được yêu cầu. Ví dụ:tập lệnh dưới đây sẽ tạo 100 nghìn điểm ngẫu nhiên cho học sinh từ 1 đến 100 với ba kiểu dữ liệu khác nhau:điểm INTEGER, điểm THỰC và điểm DECIMAL, với khả năng kiểm soát phạm vi của các giá trị này tùy thuộc vào kỹ năng lập trình và toán học của bạn , như hình dưới đây:
INSERT INTO StudentsGrades (STDGrade) VALUES (CAST(RAND(CHECKSUM(NEWID()))*100 as int)) AS INT_Grage GO 100000 INSERT INTO StudentsGrades (STDGrade) VALUES (CAST(RAND(CHECKSUM(NEWID()))*100 as real)) AS Real_Grage GO 100000 INSERT INTO StudentsGrades (STDGrade) VALUES (CAST(RAND(CHECKSUM(NEWID()))*100 as decimal(6,2))) AS Decimal_Grage GO 100000
Việc tạo tên ngẫu nhiên cũng có thể đạt được bằng cách sử dụng cơ sở dữ liệu thử nghiệm AdventureWorks và Northwind của Microsoft . Bạn cần tải xuống các cơ sở dữ liệu này từ trang web của Microsoft, đính kèm các cơ sở dữ liệu này vào phiên bản SQL Server của bạn và tận dụng lợi ích từ dữ liệu được lưu trữ trong các cơ sở dữ liệu này để tạo tên ngẫu nhiên trong cơ sở dữ liệu phát triển của bạn. Ví dụ:bảng DimCustomer từ cơ sở dữ liệu AdventureworksDW2016CTP3 chứa khoảng 18 nghìn tên, tên đệm và họ mà bạn có thể sử dụng. Bạn cũng có thể sử dụng câu lệnh CROSS JOIN để tạo một số lượng lớn các tổ hợp tên này vượt quá giá trị 18K. Tập lệnh sau có thể được sử dụng để tạo 100 nghìn tên và họ:
INSERT INTO StudentsGrades (First_Name, Last_Name) SELECT TOP 100000 N.[FirstName],cN.[LastName] FROM AdventureworksDW2016CTP3.[dbo].[DimCustomer] N CROSS JOIN AdventureworksDW2016CTP3.[dbo].[DimCustomer] cN
Địa chỉ email và ngày tháng ngẫu nhiên cũng có thể được tạo từ cơ sở dữ liệu thử nghiệm của Microsoft. Ví dụ:cột Ngày sinh và cột Địa chỉ email từ cùng một bảng DimCustomer có thể cung cấp cho chúng tôi các ngày và địa chỉ email ngẫu nhiên. Tập lệnh dưới đây có thể được sử dụng để tạo 100 nghìn tổ hợp Ngày sinh và địa chỉ Email:
INSERT INTO StudentsGrades (BirthDate, EmailAddress) SELECT TOP 100000 N.BirthDate,cN.EmailAddress FROM AdventureworksDW2016CTP3.[dbo].[DimCustomer] N CROSS JOIN AdventureworksDW2016CTP3.[dbo].[DimCustomer] c
Các giá trị ngẫu nhiên của cột Quốc gia cũng có thể được tạo bằng bảng Person.CountryRegion từ cơ sở dữ liệu thử nghiệm AdventureWorks2016CTP3. Nó có thể cung cấp cho bạn hơn 200 tên và mã quốc gia mà bạn có thể tận dụng lợi ích từ cơ sở dữ liệu phát triển của mình. Ví dụ:bạn có thể coi nó như một bảng tra cứu để ánh xạ giữa tên và mã quốc gia, như trong tập lệnh bên dưới:
INSERT INTO MappedConutries (CountryRegionCode, Name) SELECT [CountryRegionCode],[Name] FROM [AdventureWorks2016CTP3].[Person].[CountryRegion] Then insert a random name or country code from these countries that has ID equal to a random ID generated between 1 and 238, as the script below: INSERT INTO StudentsGrades (Country_Name) values ( (SELECT NAME FROM MappedConutries WHERE ID=CAST(RAND(CHECKSUM(NEWID()))*238 as int))) GO 10000
Để tạo các giá trị Địa chỉ ngẫu nhiên, bạn có thể tận dụng lợi ích từ dữ liệu được lưu trữ trong Người. Bảng địa chỉ từ cơ sở dữ liệu thử nghiệm AdventureWorks2016CTP3. Nó chứa hơn 19K địa chỉ khác nhau với vị trí không gian của nó, mà bạn có thể dễ dàng sử dụng trong cơ sở dữ liệu phát triển của mình và kết hợp ngẫu nhiên từ các giá trị này, giống như cách chúng ta đã làm trong ví dụ trước. Tập lệnh dưới đây có thể dễ dàng được sử dụng để tạo 100K địa chỉ ngẫu nhiên từ bảng Person.Address:
INSERT INTO StudentsGrades (STD_Address) values ( (SELECT NAME FROM [AdventureWorks2016CTP3].[Person].[Address] WHERE [AddressID]=CAST(RAND(CHECKSUM(NEWID()))*19614 as int))) GO 100000
Để tạo mật khẩu ngẫu nhiên cho người dùng hệ thống cụ thể, chúng tôi có thể tận dụng lợi ích từ CRYPT_GEN_RANDOM Hàm T-SQL. Hàm này trả về một số thập lục phân được mã hóa, được tạo ngẫu nhiên với độ dài là một số byte được chỉ định, được tạo bởi API Crypto (CAPI). Giá trị trả về từ hàm đó có thể được chuyển đổi thành kiểu dữ liệu VARCHAR để có nhiều mật khẩu có ý nghĩa hơn, như trong tập lệnh bên dưới, tạo ra 100K mật khẩu ngẫu nhiên:
INSERT INTO SystemUsers (User_Password) SELECT CONVERT(varchar(20), CRYPT_GEN_RANDOM(20)) GO 100000
Việc tạo dữ liệu thử nghiệm để điền vào các bảng cơ sở dữ liệu phát triển cũng có thể được thực hiện dễ dàng và không tốn thời gian cho việc viết tập lệnh cho từng loại dữ liệu hoặc sử dụng các công cụ của bên thứ ba. Bạn có thể tìm thấy nhiều công cụ khác nhau trên thị trường có thể được sử dụng để tạo dữ liệu thử nghiệm. Một trong những công cụ tuyệt vời này là dbForge Data Generator dành cho SQL Server . Nó là một công cụ GUI mạnh mẽ để tạo nhanh dữ liệu thử nghiệm có ý nghĩa cho cơ sở dữ liệu phát triển. Công cụ tạo dữ liệu dbForge bao gồm hơn 200 trình tạo dữ liệu được xác định trước với các tùy chọn cấu hình hợp lý cho phép bạn mô phỏng dữ liệu ngẫu nhiên thông minh theo cột. Công cụ này cũng cho phép tạo dữ liệu demo cho cơ sở dữ liệu SQL Server đã chứa đầy dữ liệu và tạo trình tạo dữ liệu thử nghiệm tùy chỉnh của riêng bạn. dbForge Data Generator dành cho SQL Server có thể tiết kiệm thời gian và công sức của bạn vào việc tạo dữ liệu demo bằng cách điền vào bảng SQL Server với hàng triệu hàng dữ liệu mẫu giống như dữ liệu thực. dbForge Data Generator cho SQL Server giúp điền vào các bảng với các kiểu dữ liệu được sử dụng thường xuyên nhất như kiểu dữ liệu Basic, Business, Health, IT, Location, Payment và Person. Hình dưới đây cho thấy công cụ này hoạt động dễ dàng như thế nào:
Sau khi bạn cài đặt công cụ dbForge Data Generator cho SQL Server và chạy công cụ đó, bạn cần chỉ định tên máy chủ đích và tên cơ sở dữ liệu trong cửa sổ Kết nối như được hiển thị bên dưới:
Trong cửa sổ Tùy chọn, bạn có thể chỉ định số hàng sẽ được chèn vào bảng của mình và các tùy chọn khác nhau khác kiểm soát tiêu chí dữ liệu thử nghiệm được tạo, như được hiển thị bên dưới:
Sau khi tùy chỉnh các tùy chọn để phù hợp với yêu cầu dữ liệu thử nghiệm của bạn, hãy nhấp vào Nút và một cửa sổ mới với danh sách tất cả các bảng và cột trong cơ sở dữ liệu đã chọn sẽ được hiển thị, hỏi bạn chọn bảng nào để điền vào dữ liệu thử nghiệm, như được hiển thị bên dưới:
Chỉ cần chọn bảng mà bạn cần điền dữ liệu và công cụ sẽ tự động cung cấp cho bạn dữ liệu gợi ý trong phần Xem trước ở cuối cửa sổ và các tùy chọn có thể tùy chỉnh cho từng cột trong bảng đó mà bạn có thể dễ dàng tùy chỉnh, như hình minh họa bên dưới:
Ví dụ:bạn có thể chọn từ các kiểu dữ liệu trình tạo tích hợp có thể được sử dụng để tạo các giá trị cột ID như được mô tả trước đây:
Hoặc tùy chỉnh các đặc điểm của giá trị cột ID đó, chẳng hạn như Độ duy nhất, Tối thiểu, Tối đa và Mức tăng của các giá trị được tạo, như bên dưới:
Ngoài ra, cột First_Name có thể được giới hạn là nam hoặc nữ hoặc kết hợp của hai loại này. Ngoài ra, bạn có thể kiểm soát phần trăm giá trị NULL hoặc trống trong cột đó, như được hiển thị bên dưới:
Cột Ngày sinh cũng có thể được kiểm soát bằng cách chỉ định danh mục mà những sinh viên này sẽ thuộc, chẳng hạn như Sinh viên, Thanh thiếu niên, Người lớn hoặc Đã nghỉ hưu như được hiển thị bên dưới:
Bạn cũng có thể chỉ định trình tạo được mô tả đầy đủ có thể được sử dụng để tạo các giá trị cột Quốc gia như được hiển thị bên dưới:
Và tùy chỉnh phương trình sẽ được sử dụng để tạo các giá trị cột Địa chỉ Email như sau:
Ngoài sự phức tạp của phương trình có thể tùy chỉnh, chúng tôi tạo các giá trị cột Mật khẩu, như được hiển thị bên dưới:
Và cuối cùng, đối với ví dụ của tôi chứ không phải đối với công cụ kỳ diệu này, các trình tạo và phương trình được sử dụng để tạo các giá trị cột Địa chỉ bên dưới:
Sau chuyến tham quan này, bạn có thể tưởng tượng công cụ kỳ diệu này sẽ giúp bạn như thế nào trong việc tạo dữ liệu và mô phỏng các kịch bản thời gian thực để kiểm tra chức năng của ứng dụng của bạn. Cài đặt nó và tận hưởng những lợi ích từ tất cả các tính năng và tùy chọn có sẵn.
Công cụ hữu ích:
dbForge Data Generator dành cho SQL Server - công cụ GUI mạnh mẽ để tạo nhanh dữ liệu kiểm tra có ý nghĩa cho cơ sở dữ liệu SQL Server.