Làm cách nào để hạn chế các mục trùng lặp trong cơ sở dữ liệu?

Bản sao là một vấn đề định kỳ đối với bất kỳ người dùng cơ sở dữ liệu nào. Có một số lý do tại sao một số bản sao có thể xuất hiện trong tập dữ liệu và kiểm tra độ chính xác thường là cần thiết trước khi có thể tiến hành bất kỳ phân tích nào đúng cách. Đây là lý do tại sao tôi muốn chia sẻ với bạn một số bài học rút ra từ kinh nghiệm của tôi trong việc xử lý các bản sao bằng SQL

Hãy thiết lập bối cảnh. Bạn vừa thực hiện một phân tích tuyệt vời để đánh giá số lượng khách hàng mà bạn hoặc công ty của bạn đã có được trong năm qua. Kết luận của bạn dường như xác nhận trực giác của bạn. số lượng khách hàng đã tăng gấp ba lần trong 12 tháng qua. Bạn rất tự hào về kết quả này - mặc dù hơi ngạc nhiên - đến nỗi bạn muốn kiểm tra lại nó trước khi trình bày với sếp của mình. Khi đào sâu vào dữ liệu, bạn chợt nhận ra rằng một số khách hàng đã được tính hai lần… điều này rõ ràng đặt câu hỏi cho phát hiện trước đó của bạn

Làm cách nào để xử lý các mục trùng lặp có thể xảy ra trong tập dữ liệu của bạn?

Dưới đây là bảng mẫu (khách hàng được đặt tên) mà tôi sẽ sử dụng trong suốt bài viết này để minh họa các quan điểm của mình

© Marie Lefevre1. Cách xác định các bản sao

Bất kể các bản sao được tạo như thế nào, bước đầu tiên là xác định chúng trong bảng dữ liệu của bạn. Phần khó nhất ở đây không phải là kỹ thuật. đó là về việc thừa nhận sự tồn tại của họ. Thông thường, người ta có thể muốn xem xét rằng một bảng dữ liệu (đặc biệt là trong một công ty) không chứa bất kỳ mục nhập trùng lặp nào theo mặc định. Mặc dù may mắn thay, đó là trường hợp của phần lớn trong số họ, nhưng đôi khi các bản sao được tạo ra một cách vô tình theo thời gian

Một truy vấn SQL đơn giản cho phép bạn truy xuất tất cả các bản sao có trong bảng dữ liệu. Xem xét một số ví dụ cụ thể về các hàng trùng lặp là một cách hay để bắt đầu. Năm đến mười ví dụ cụ thể sẽ cung cấp cho bạn ý tưởng đầu tiên về những gì đang diễn ra trong dữ liệu của bạn, để hiểu rõ hơn điều gì có thể dẫn đến việc tạo ra các bản sao

Dựa trên ví dụ đã giới thiệu trước đó, truy vấn sau đây cho phép xác định các khách hàng tiềm năng có mặt nhiều lần trong bảng dữ liệu customers. Trong ví dụ này, tôi muốn đảm bảo rằng tất cả các khách hàng đã đăng ký là duy nhất. Để làm như vậy, tôi sử dụng địa chỉ email và ngày sinh của khách hàng, vì chúng được cho là duy nhất đối với mỗi khách hàng

Để áp dụng truy vấn này cho bất kỳ bảng dữ liệu nào, bạn chỉ cần thay thế các trường sau

  • khách hàng nên được thay thế bằng bảng dữ liệu mà bạn đang tìm kiếm các bản sao có thể có
  • email_address và date_of_birth phải được thay thế bằng tất cả các trường (có thể có một hoặc nhiều trường) được coi là duy nhất cho mỗi đơn vị trong bảng dữ liệu của bạn

Nếu bạn nhận được một bảng trống làm đầu ra, xin chúc mừng. Điều đó có nghĩa là không tìm thấy bản sao nào trong bảng của bạn, dựa trên tiêu chí bạn đã chỉ định. Nếu bạn nhận được kết quả, bạn phải điều tra một số hàng trùng lặp

Ở đây, các cột không được coi là duy nhất (trong ví dụ này, một số khách hàng có thể có cùng_tên_khách_hàng và/hoặc_tên_khách_hàng) sẽ giúp bạn xác định các cột trùng lặp. Chúng sẽ mở đường cho bạn hiểu rõ hơn về lý do tại sao có các bản sao trong bảng của bạn. Trong ví dụ của tôi, tôi thấy rằng khách hàng Sarah Smith, có địa chỉ email là sarah. thợ rèn@email. com và người sinh ngày 23 tháng 5 năm 1983 đã được nhân đôi trong bảng dữ liệu của tôi

2. Làm thế nào để tránh trùng lặp

Như thường lệ, cách chữa bệnh tốt nhất là tránh bị bệnh. Do đó, trước khi chuyển sang phần “xóa các bản sao”, bạn nên hiểu điều gì có thể dẫn đến việc tạo các bản sao trong bảng dữ liệu. nguyên nhân có thể có thể hoạt động (e. g. một nhân viên bán hàng đã đăng ký cùng một khách hàng nhiều lần), kỹ thuật (e. g. lỗi CNTT dẫn đến tài khoản khách hàng được tạo hai lần) hoặc liên quan đến thao tác dữ liệu (e. g. một bảng dữ liệu trung gian được tạo theo cách có các hàng trùng lặp)

Xác định nguyên nhân gốc rễ của việc tạo ra các bản sao sẽ giúp bạn giải quyết vấn đề ở cấp độ phù hợp. Do đó, nếu vấn đề xuất phát từ các vấn đề vận hành hoặc kỹ thuật, bạn có thể chuyển sang bộ phận phụ trách (Vận hành hoặc CNTT cho hai trường hợp đầu tiên trong ví dụ của tôi). Nếu sự cố xuất phát từ thao tác dữ liệu, bạn có thể thực hiện một số hành động để tự mình khắc phục sự cố này. Bằng cách đó, phân tích của bạn không chỉ đáng tin cậy hơn mà còn nâng cao nhận thức của bạn — và có thể là nhận thức của đồng nghiệp — để tránh vấn đề này trong tương lai

Theo nguyên tắc chung, việc cấu trúc mã SQL của bạn tốt hơn sẽ ngăn chặn phần lớn các vấn đề trong việc vô tình tạo ra các hàng trùng lặp. Đặc biệt, nếu bạn hình dung rõ ràng đầu ra truy vấn của mình trước cả khi bắt đầu viết mã (như đã giải thích trong bài viết này), bạn sẽ có thể tránh được việc tạo các bản sao trước

3 thủ thuật đơn giản để cấu trúc tốt hơn các truy vấn SQL của bạn

Và một ví dụ thực hành để áp dụng chúng ngay lập tức

hướng tới khoa học dữ liệu. com

3. Cách xóa các bản sao

Bây giờ bạn đã xác định được các bản sao trong tập dữ liệu của mình và bạn đã hiểu cách chúng được tạo, bạn muốn xóa chúng khỏi bảng dữ liệu đầu ra của mình. Bằng cách đó, bạn sẽ có thể tiến hành phân tích chính xác và đảm bảo rằng những phát hiện của bạn là đáng tin cậy

Dựa trên kinh nghiệm của riêng tôi, đây là ba kỹ thuật để loại bỏ các bản sao khỏi một bảng dữ liệu nhất định. Sử dụng ví dụ trước, các đoạn mã này cho phép tôi loại bỏ các mã trùng lặp khỏi bảng khách hàng, giả sử rằng mỗi khách hàng được xác định bởi một tổ hợp duy nhất giữa địa chỉ email và ngày sinh của họ

Kỹ thuật “cấu trúc tốt”. DANH SÁCH

Một truy vấn sơ bộ được viết để truy xuất các trường duy nhất liên quan đến từng khách hàng (trong ví dụ này là email_address và date_of_birth). Sau đó, truy vấn phụ này được đặt trong mệnh đề CÓ và được gọi là danh sách. Điều này trở thành nguồn dữ liệu đầu tiên của truy vấn chính, được LEFT JOIN-ed trên bảng ban đầu customers

Kỹ thuật “định danh duy nhất”. VÁCH NGĂN

Kỹ thuật này sử dụng hàm FIRST_VALUE kết hợp với mệnh đề PARTITION BY. Đối với các trường được xác định ban đầu (ở đây, email_address và date_of_birth), các hàm này lấy giá trị đầu tiên của trường customer_first_name (tương ứng là customer_last_name) bắt gặp trong bảng dữ liệu customers

Tuyệt chiêu “siêu tốc”. NHÓM THEO

Tương tự như kỹ thuật trước đó, việc sử dụng mệnh đề GROUP BY cho phép người dùng xác định cách các trường không phải là duy nhất (ở đây, customer_first_name và customer_last_name) phải được tổng hợp cho mỗi khách hàng. Kỹ thuật này đặc biệt hữu ích cho các trường số, nhưng nó cũng hoạt động với các trường chuỗi

Cả ba kỹ thuật đều dẫn đến cùng một kết quả. các bản sao được xóa khỏi tập dữ liệu. Khi chúng sử dụng các đường dẫn logic và hàm SQL khác nhau, bạn có thể thấy một phương pháp rõ ràng hơn hoặc thực tế hơn phương pháp kia tùy thuộc vào nền tảng và mức độ thành thạo SQL của bạn. Hãy sử dụng cái mà bạn cảm thấy thoải mái nhất

Làm cách nào để ngăn nhập dữ liệu trùng lặp trong SQL?

Bạn có thể sử dụng KHÓA CHÍNH hoặc Chỉ mục DUY NHẤT trên bảng có các trường thích hợp để ngăn các bản ghi trùng lặp. Hãy để chúng tôi lấy một ví dụ - Bảng sau đây không chứa chỉ mục hoặc khóa chính như vậy, vì vậy nó sẽ cho phép các bản ghi trùng lặp cho first_name và last_name

Các phương pháp để ngăn chặn các mục trùng lặp là gì?

Ngăn chặn các mục nhập trùng lặp .
Chọn phạm vi A2. A20
Trên tab Dữ liệu, trong nhóm Công cụ Dữ liệu, bấm vào Xác thực Dữ liệu
Trong danh sách Cho phép, nhấp vào Tùy chỉnh
Trong hộp Công thức, nhập công thức hiển thị bên dưới và nhấp vào OK. .
Để kiểm tra điều này, hãy chọn ô A3 và nhấp vào Xác thực dữ liệu. .
Nhập số hóa đơn trùng lặp