Nếu tên của một người là Null thì nó sẽ phá vỡ cơ sở dữ liệu như thế nào?


55

Tôi đang đọc này bài viết trên BBC. Nó kể một câu chuyện về một người tên Jenifer Null và cách cô ấy đối mặt với các vấn đề hàng ngày trong khi sử dụng cơ sở dữ liệu trực tuyến như đặt vé máy bay, ngân hàng ròng, v.v.

Tôi không rành về cơ sở dữ liệu và tôi không sử dụng nó thường xuyên. Khi tôi tạo một trang web để học, xác thực mẫu máy chủ đã sử dụng các biểu thức thông thường. Từ những gì tôi nhớ, nó sẽ vui vẻ chấp nhận cái tên "Null". Tôi đã không thử nó mặc dù.

Ai đó có thể giải thích các kỹ thuật khi tình huống này sẽ xảy ra? Là xác nhận mẫu chỉ làm một string == NULLhoặc một cái gì đó? Mặc dù vậy tôi không nghĩ NULL is same as "NULL".


32
Bài báo rõ ràng được viết bởi một nhà báo. Nulls là nguyên nhân của nhiều nhầm lẫn, bạn sẽ không mong muốn một nhà báo sẽ bớt bối rối.
ypercubeᵀᴹ

2
Mọi người: Nhận xét có liên kết đến các câu hỏi hoặc bài viết liên quan đã được chuyển đến câu trả lời của Wiki cộng đồng bên dưới. Vui lòng chỉnh sửa (hoặc đề xuất chỉnh sửa) cho câu trả lời đó thay vì thêm các liên kết khác trên trang này.
Paul White

Câu trả lời:


42

Tôi đã thấy các giao diện cơ sở dữ liệu (ví dụ: thư viện khung) trả về 'null' dưới dạng chuỗi cho các cột null. Tôi tin rằng có một lá cờ sẽ bật hoặc tắt cái này để gỡ lỗi. Cờ này cho phép các nhà phát triển dễ dàng xác định xem trường trống là kết quả của giá trị null hay giá trị trống. Đây là một thiết lập xấu, đặc biệt là trong sản xuất, và sẽ giải thích các vấn đề được giải thích trong bài viết.

Việc xử lý ngược lại việc chuyển đổi 'null' thành giá trị null sẽ tạo ra lỗi ứng dụng cho trường tên. Tôi hy vọng điều này sẽ được giải quyết khá nhanh chóng.


Thật vậy - điều này khá phổ biến trong các khung cho các ngôn ngữ chưa được chỉnh sửa trong đó tất cả dữ liệu được chuyển đổi thành một chuỗi. Đã vài năm kể từ khi tôi làm việc với nó, nhưng tôi tin rằng các phiên bản đầu tiên của ColdFusion có vấn đề này chẳng hạn.
Jules

25

Có một cơ hội tốt rằng một phần tốt của sự nhầm lẫn của bạn bắt nguồn từ các nhà báo. Bài báo nói về các vấn đề sử dụng toàn bộ hệ thống ứng dụng, không chỉ cơ sở dữ liệu. Hoàn toàn hợp lý vì đây là một tác phẩm nhằm mục đích tiêu thụ hàng loạt, nhưng các chi tiết kỹ thuật bị che đậy hoặc hiểu lầm bởi tác giả.

Có khả năng một số vấn đề này xảy ra ở lớp ứng dụng, thay vì API của DB. Giá trị ma thuật là một mô hình chống cực kỳ khó bị dập tắt khỏi ngành. Rất dễ dàng, một số lập trình viên có thể đã viết một điều kiện dọc theo dòng chữ "ai đó đã gõ 'null'? Họ phải có nghĩa là không có giá trị, bởi vì đó là ý nghĩa của null!" Một nỗ lực sai lầm trong việc ngăn chặn việc tiêm SQL cũng có thể là nguyên nhân gây ra sự ngược đãi đã đề cập của Null hoặc tên cuối cùng của Hawaii có chứa một trích dẫn, cũng là dấu phân cách chuỗi SQL tiêu chuẩn.

Một ứng dụng chuyển đổi không đúng các giá trị này thành NULL hoặc một chuỗi rỗng có thể dễ dàng tạo ra lỗi nếu các ràng buộc logic nghiệp vụ hoặc DB mong muốn một cái gì đó khác nhau. Điều này tự nhiên dẫn đến chính xác trải nghiệm người dùng bực bội được mô tả trong bài viết.


5
Tôi không biết O'Brian là người Hawaii.
glglgl

19

Bản thân bài viết bao gồm một liên kết đến câu hỏi Stack Overflow thể hiện vấn đề; đó là trong một ứng dụng Flex có mã:

currentChild.appendChild("Fred");

sẽ nối thêm một phần tử chứa từ đó Fredvào tài liệu XML nhưng mã:

currentChild.appendChild("null");

sẽ nối thêm một phần tử trống, không phải phần tử chứa văn bản "null".

XML, không có vấn đề gì với giá trị văn bản "NULL", do đó, bao gồm cả văn bản như vậy sẽ không có vấn đề gì. Trong thực tế, NULLkhông có ý nghĩa đặc biệt nào trong XML cả.


13

Một điều tôi không nghĩ rằng tôi đã thấy đề cập: Chúng ta không chỉ nói về SQL.

Tên có thể bắt đầu / kết thúc trong cơ sở dữ liệu ... nhưng để đạt được điều đó thường liên quan đến các kênh NHIỀU. Cơ sở dữ liệu, Sql, php, html, javascript ... Java, C #, VB, Perl, Phython, Ruby, bash, batch, v.v., v.v.

Mỗi bước trong đường ống có thể liên quan đến việc chuyển đổi dữ liệu từ định dạng này sang định dạng khác. Từ các bảng Sql, đến json, đến xml, sang CSV, v.v ...

Tại bất kỳ thời điểm nào trong chuỗi phức tạp này, nó sẽ chỉ mất một điểm lập trình xấu hoặc ngôn ngữ lập trình mờ ( ví dụ xử lý null Javascript ) ...

Vì vậy, đừng giới hạn bản thân trong vấn đề nằm trong cơ sở dữ liệu ... bởi vì nó có thể ở bất kỳ đâu trong "ngăn xếp".


8

Cộng đồng Wiki trả lời cho các liên kết khác nhau ban đầu để lại là nhận xét về câu hỏi phổ biến này


4

Cơ sở dữ liệu quan hệ phải chứa các giá trị thiếu hoặc không liên quan. Ví dụ: danh sách khách hàng có thể bao gồm số điện thoại di động hoặc giới tính. Điều gì sẽ xảy ra nếu một công ty muốn trở thành khách hàng - nên có giới tính gì?

Một chỉ báo đặc biệt được sử dụng để hiển thị một giá trị bị thiếu. Lá cờ đặc biệt này là NULL. Vì vậy, lập trình cẩu thả có thể khiến chỉ báo giá trị bị thiếu - NULL - bị nhầm lẫn với họ của Jennifer Null, có lẽ hiểu họ của cô là dữ liệu bị thiếu thay vì giá trị thực.

Nó giống như mở một tài khoản ngân hàng nhưng không gửi bất kỳ khoản tiền nào. Số dư bằng không. Điều này không có nghĩa là bạn không có sự cân bằng. Nó có nghĩa là bạn có số dư và giá trị của nó là "0". Nhưng lập trình cẩu thả có thể hiểu sai số 0 là "không tồn tại" và xác định rằng bạn hoàn toàn không có tài khoản.


2

Có rất nhiều phần mềm được viết kém, và thậm chí cả các khung, sẽ hoạt động kỳ quặc với ai đó tên là Null.

Nhưng chúng ta đừng quên yếu tố con người: có lẽ con người nhìn thấy tên trên màn hình và bản in và nghĩ rằng đó là một sai lầm và xóa người là một nguyên nhân có thể khác?

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.