Khi thiết kế cơ sở dữ liệu, các bảng hầu hết đều có cái gọi là khóa chính (PRIMARY KEY). Một số bảng khóa chính là 2 trường kết hợp tạo thành, còn đa phần là một trường. Khi một trường là khóa chính, trường đó đóng vai trò là ID (Identification), hiểu nôm na là từ cái ID này ta có thể biết được ai là ai. ID – object là quan hệ 1-1
Nói về ID lại nói tới Việt Nam thân yêu một chút. Đáng lẽ ra số chứng minh thư nhân dân (CMND) phải đóng vai ID cho mỗi người, nhưng ở Việt Nam thì rất hay, một người có thế có nhiều số CMND (cái này là theo lời kể thằng bạn em hồi học đại học – khánh Khìn – nó bảo nó làm ở hai tỉnh!!!) và một số CMND có thể được cấp cho nhiều người (theo VnExpress.Net)
Đấy, suýt thì lại lạc đề, thôi quay lại bài viết chính nào. ID trong bảng có nhiều bản ghi thì thông thường sẽ được set là INT và tự động tăng dần auto_increment (Hồi vọc MS Access thì là Long và Auto Number thì phải :-??, còn cái nói trogn đây là MySQL nhá). Ví dụ như trường id của bảng member sử dụng trong cơ sở dữ liệu diễn đàn!
Một cách đơn giản quá trình truy cập thông tin của đối tượng (row – record) qua id từ web diễn ra như sau:
– id được lấy từ URL ($_REQUEST hay gì gì đó): ví dụ: http://xxx.com/member/?id=13
– server thực hiện truy vấn SQL: ví dụ SELECT name, location, email from member where id=13
– server trả về kết quả nếu thấy, và báo lỗi nếu không thấy
Ừm, nhưng quái, sao một số trang web vào nó có ID không phải là số 13 mà là chuỗi kí tự aZwV– gì gì đó, lạ gớm. Không lẽ nó nhập tay ID bằng những xâu xấu xí đó 8-x. Vỡ mặt chấm com!
Ôi dào, ID nó số hay xâu thì quan tâm làm gì. Mặc xác nó đi. Không, ID là số và xâu trên URL có nhiều cái để nói chứ. Là số nhìn nó thô, là xâu nhìn nó ngon! Là số thằng nào nó dỗi hơi nó cứ FOR id nó crawl dữ liệu về lẹ làng, nhanh chóng. Là xâu nó biết xâu éo nào mà FOR :)). Còn gì nữa không nhờ. Thôi chỉ ra thế thôi. Phân tích tiếp nhé…
Thực ra id gốc trong database vẫn là số tự động tăng dần thôi. Còn cái xâu chẳng qua là một dạng mã hóa của cái số đó. Như vậy developer (coder) đã xây dựng một hàm encodeID và decodeID để biến xấu thành đẹp khi show ra URL và biến đẹp thành xấu khi kéo từ request về.
Có nhiều cách xây dựng hàm encodeID và decodeID. Bạn hoàn toàn có thể tự mình build. Điều cốt yếu bạn phải đảm bảo tính chất sau khi tạo hàm:
– id vào thì hàm encodeID phải cho ra và cho ra chỉ một id’
– Nếu id’ = encodeID(id) thì decodeID(id’) phải luôn luôn trả về id
Ngày xưa tớ học chuyên Toán đấy, cái hàm kiểu như này gọi là gì ý nhỉ? Đơn ánh hay song ánh ý? Quên bố nó rồi :(
Một ví dụ đơn giản cho hàm kiểu như thế nhé:
function encodeId($id) {
$id = strval($id);
$digit = array(0,1,2,3,4,5,6,7,8,9);
$char = array(‘p’,’v’,’H’,’r’,’a’,’T’,’g’,’-‘,’j’,’y’);
return str_replace($digit, $char, $id);
}function decodeId($id) {
$id = strval($id);
$digit = array(0,1,2,3,4,5,6,7,8,9);
$char = array(‘p’,’v’,’H’,’r’,’a’,’T’,’g’,’-‘,’j’,’y’);
return str_replace($char, $digit, $id);
}
Thích xịn hơn, oai hơn thì đọc tìm hiểu chút về các phép AND, OR, XOR, NOR, NOT… nhá :p