PDA

View Full Version : null và not null, khóa chính và khóa ngoài khác nhau ở chỗ nào



never gone
29-12-2010, 12:52
Em mới học ở SQL server nhưng mà em đang thắc mắc, null và not null khác nhau ở chỗ nào? và khóa chính và khóa ngoài cách nhận biết, sử dụng cũng như điểm khác biệt giữa chúng. Em có tham khảo qua mấy quyển ebook nhưng họ nói rất chung chung. Mong anh chị gỡ rối giúp em! hjc hjc

bachnga
29-12-2010, 13:15
NULL là một khái niệm khá đặc biệt (tùy theo hoàn cảnh). Trong trường hợp của bạn thì NULL có thể hiểu nôm na là:
- Column đó (field) cho phép bạn không nhập bất cứ cái gì vào đấy
Khóa chính (PRIMARY KEY) được áp đặt lên 1 column (field) nào đó thì column (field) đó bắt buộc phải nhập dữ liệu khi bạn đưa dữ liệu vào 1 dòng. Dữ liệu trong column (field) này phải là duy nhất (nghĩa là giá trị nhập vào column này trên 1 dòng xác định chưa từng có trước đó trong column đấy). Nhiêm vụ chính của khóa chính là đảm bảo tính duy nhất của 1 dòng dữ liệu (nghĩa là phải phân biệt được 2 hay nhiều dòng dữ liệu bất kỳ trong cùng 1 bảng)
Khóa ngoài (ngoại???) - FOREIGN KEY áp đặt trên 1 column (field) mà giá trị trong cột này (nếu có) phải có trong 1 column (field) khác ở bảng khác (hay cùng bảng) được đặt khóa chính.
Ví dụ:
+ Thông tin sinh viên lưu vào 1 bảng sinhvien với mã sinh viên nằm ở cột có khóa chính. Trong bảng này còn có thể kèm theo các thông tin cá nhân khác chỉ có một: ngày sinh, họ tên,... Nhưng sinh viên này có thể được học nhiều môn khác nhau. Các thông tin về môn học này không thể lưu vào bảng sinhvien được, mà sẽ lưu vào bảng khác (bảng monhoc chẳng hạn).
Vậy sẽ tồn tại thêm 1 bảng nữa lưu trữ thông tin cho biết một sinh viên A học những môn nào, kết quả ra sao. Trong bảng này người ta chỉ cần có thêm 1 column (ngoài các column khác) để lưu mã sinh viên và column này sẽ được đặt khóa ngoài, giá trị trong column này sẽ tham chiếu đến mã sinh viên trong bảng sinhvien.
--------------------------
Híc... chắc càng giải thích càng rối,... :emlaugh:

s.code
29-12-2010, 13:17
null => là cho phép không nhập/lưu trữ khi insert 1 record mới, chú ý null và rỗng là khoác nhau nhé vì null thì trên vật lý field này không được khởi tạo bộ nhớ khi không insert dữ liệu. Nôm na thì như bạn ăn cơm thì mới đưa chén bát cho bạn.

còn not null thì bắt buộc phải nhập và bộ nhớ vậy lý luôn luôn được khởi tạo dù bạn có nhập một giá trị rỗng đi chăng nữa. Nôm na như kiểu dù bạn ăn hay không thì chén/bát của bạn vẫn được bày sẵn.

KHóa chính là thứ duy nhất để xác định một record nào đó. thường là field ID trong bản nó là Unique.

minhpham4r
29-12-2010, 13:58
Mình cũng đang học SQL nè. Nhiều rắc rối xảy ra. Và mình đang tìm hiểu tài liệu từ đây nè. Bạn down về thử xem nhé.
http://ddth.com/showthread.php?t=451331