- 04/04/2008 02:06 AM #1Tham gia: 15/10/2003Bài gửi: 1,765Được cảm ơn: 415 lầnTên bé: Andy ÂnNgày sinh: 15/5/2002
Khoá chính (primary key) trong Access
Mình mới bắt đầu học Access nên không hiểu lắm về khóa Primary key. Cho mình hỏi Primary key là để làm gì ? và khi nào thì cài khi nào thì không cần cài ? (vì mình thấy trong 1 table có cái cài , ví dụ như họ, tên, ngày sinh; nhưng code thành phố thì không cần cài) .
Xin cám ơn.Xem các chủ đề mới nhất:
- Game trượt tuyết - Tải game trượt tuyết miễn phí (19/06/2013)
- Tổng hợp các cách vào facebook mới và nhanh nhất (19/06/2013)
- Cách vào facebook mới nhất tháng 6/2013, facebook bị chặn 18/6/2013 (19/06/2013)
- Bộ sưu tập game online ,offline ,ảnh,video clip dành cho mobile hàng đầu 2013. (19/06/2013)
- có chị em nào vào được facebook không - cách vào cho chị em (18/06/2013)
- Phần mềm hữu ích nên có trong điện thoại (18/06/2013)
- HPT là đối tác giải pháp chiến lược NSI của Microsoft (18/06/2013)
- Khi Iphone bị lỗi??? (18/06/2013)
- Game đua xe 3d cho điện thoại - Need for Speed (17/06/2013)
- Cài Win ư, điều gì làm bạn lo nhất?... đừng lo!!! (17/06/2013)
Andy Ân
- 04/04/2008 08:24 AM #2Tham gia: 06/12/2007Bài gửi: 3,745Được cảm ơn: 11,158 lầnTên bé: Hỉn còiNgày sinh: 21/11/2008Tên bé: Kuku xinhNgày sinh: 10/05/2012
Ðề: Khoá chính (primary key) trong Access
Xin mạn phép trả lời trong tầm hiểu biết của mình.
Primary Key là khóa dùng để phân biệt các bản ghi với nhau, và đảm bảo mỗi giá trị Primary Key là duy nhất. Trong ví dụ của AndyAn thì theo mình k đúng lắm vì thường người ta k dùng họ, tên, ngày sinh làm Primary Key do những thông tin này có thể bị trùng nhau.
Thông thường trong 1 table VD có những thông tin sau: Họ, tên, ngày sinh, code thành phố, ghi chú chẳng hạn, người ta sẽ thêm thông tin mã nhân viên và mã nhân viên này sẽ được set làm Primary Key.
Cũng có đôi khi người ta sẽ set 1 trường mới tự động AutoID chẳng hạn làm Primary Key.
- 04/04/2008 07:56 PM #3
Ðề: Khoá chính (primary key) trong Access
Trong tất cả các hệ quản trị cơ sở dữ liệu nói chung, thì Primary key đều được sử dụng để phân biệt các bộ trong table với nhau. Nghĩa là các bộ khác nhau, thì chắc chắn phải có Primary key khác nhau.
VD: KHi quản lý sinh viên, thì Mã sinh viên sẽ là Primary key: Đảm bảo yêu cầu, mỗi sinh viên chỉ có duy nhất 1 mã sinh viên. Ko bao giờ có chuyện 2 sinh viên khác nhau lại giống nhau về MSSV
Việc xác định có cài primary key hay ko thì hoàn toàn phụ thuộc vào Table mà mình thiết kế. Họ, tên, ngày sinh ko thể dùng làm Primary key, vì nó ko đảm bảo tính duy nhấtSống như thể ngày mai phải chết!....
- 04/04/2008 10:29 PM #4
Ðề: Khoá chính (primary key) trong Access
Đơn giản là khóa này để phân biệt các bàn ghi với nhau để khi truy vấn dữ liệu chương trình biết để lấy thông tin
Mỗi bảng sẽ phải có ít nhất là một trường khóa chính như vậy
Các bảng sẽ được liên kết với nhau nhiều thông tin nhưng nó sẽ tìm và liên kết bởi trường khóa chính này
Trong một bảng chỉ có một mã cho 1 bản ghi trong trường khóa chính, không thể trùng lặpKhông ký cót gì hết, ai muốn hỏi gì mittit2 thì vào đây nhé
- 07/04/2008 03:49 AM #5Tham gia: 15/10/2003Bài gửi: 1,765Được cảm ơn: 415 lầnTên bé: Andy ÂnNgày sinh: 15/5/2002
Ðề: Khoá chính (primary key) trong Access
Oh chắc tại mới bắt đầu nên mình thấy cô cho 1 bảng danh sách ngắn và đơn giản gồm vài tên , họ, code thành phố, ngày sinh . Và cô cài khóa chính cho 2 cột họ và tên mà. Đến khi 2 cột này có tên trùng nhau thì cô cài thêm 1 khóa nữa ở cột code thành phố. Cô nói là nếu cài như thế thì sau đó mình có thể chỉnh danh sách tên họ theo alphabet được. Còn cài số thứ tự thì sau khi lập danh sách xong không sửa theo alphabet được . Không biết mình hiểu đúng không?
Mà mình cũng thấy như các bạn nói ở trên, cài ở cột số thứ tự là logic nhất nhỉ vì stt là duy nhất rồi, đâu trùng được.
Nhưng mìnhh vẫn không hiểu sao để cho chắc ăn không cài khóa cho mỗi cột, nếu mỗi cột đều cài thì ... có sao không ? Mà thật ra trong 1 bảng danh sách, cần cài làm gì cơ chứ, nếu sau này mình gọi 1 tên ra, nếu có trùng nhau thì cũng còn ngày tháng năm sinh hay địa chỉ, khác nhau trong hành đó mà, đâu có 2 hàng (2 người) trùng nhau hết ở mỗi cột được. Vậy thì không cài cũng ... đâu có sao . Ôi mình mù mờ quá vì mình hoc bằng tiếng Đức, đọc không hiểu thấu hết. Mà mình vào các trang VN thì dùng từ chuyên ngành mình cũng rối luôn (ví dụ như chữ "trường" , không hiểu là gì).Andy Ân
- 07/04/2008 11:07 AM #6
Ðề: Khoá chính (primary key) trong Access
1 phần vì chị mới học, 1 phần vì cô giáo chị dạy .... lúa quá!
Ko ai sử dụng Họ tên + Code thành phố làm khóa chính cả (Trừ cái cô giáo kì cục đóOh chắc tại mới bắt đầu nên mình thấy cô cho 1 bảng danh sách ngắn và đơn giản gồm vài tên , họ, code thành phố, ngày sinh . Và cô cài khóa chính cho 2 cột họ và tên mà. Đến khi 2 cột này có tên trùng nhau thì cô cài thêm 1 khóa nữa ở cột code thành phố. Cô nói là nếu cài như thế thì sau đó mình có thể chỉnh danh sách tên họ theo alphabet được. Còn cài số thứ tự thì sau khi lập danh sách xong không sửa theo alphabet được . Không biết mình hiểu đúng không?
), hình dung đơn giản ngoài thực tế: HCM & HN có bao nhiêu người cùng tên Phạm Đăng Khoa? Mà nguyên tắc lưu trữ là tuyệt đối ko có những bộ dữ liệu khác nhau khi khóa chính giống nhau => Có thể trong bảng dữ liệu (1 vài record) của cô giáo chị lấy ra làm ví dụ, thì khóa đó sẽ đúng, nhưng mà thực tế áp dụng thì nó sai bét
Cũng với ví dụ đó, người ta sẽ quản lý bằng "Mã" (VD: với sinh viên thì là Mã SV, với nhâu khẩu thì là Số CMND, với nhân viên công ty thì là Mã nhân viên .... đảm bảo tính duy nhất)
Số thứ tự cũng là 1 dạng biến hóa của Mã như e vừa nói ở trên thôi, nhưng ko phải đánh số thứ tự = cách thông thường (1,2,3,4....n), mà trong số thứ tự đó sẽ phải bao gồm thêm 1 thông tin gì đó:Mà mình cũng thấy như các bạn nói ở trên, cài ở cột số thứ tự là logic nhất nhỉ vì stt là duy nhất rồi, đâu trùng được.
VD:
Số điện thoại: 0901234567 : Nhìn vào 3 số đầu là ta biết của mạng điện thoại nào
Số CMND: 151123456: Nhìn vào 3 số đầu là biết CMND đó thuộc tỉnh nào ....
[quote]Nhưng mìnhh vẫn không hiểu sao để cho chắc ăn không cài khóa cho mỗi cột, nếu mỗi cột đều cài thì ... có sao không [/quote
Chắc ăn thì chắc ăn thật, nhưng mà nó vi phạm định nghĩa của Primary key. Hơn nữa, với 1 bộ cơ sở dữ liệu lớn, thì cách truy xuất này sẽ giết chết Server đấy ạ
Đúng là có những trường hợp ko cần cài khóa chính như chị nói, nhưng để xử lý được các thông tin truy xuất đó lại là cả 1 vấn đề.Mà thật ra trong 1 bảng danh sách, cần cài làm gì cơ chứ, nếu sau này mình gọi 1 tên ra, nếu có trùng nhau thì cũng còn ngày tháng năm sinh hay địa chỉ, khác nhau trong hành đó mà, đâu có 2 hàng (2 người) trùng nhau hết ở mỗi cột được. Vậy thì không cài cũng ... đâu có sao .
Vấn đề 1:Nếu như chị nói, thì chị chỉ có thể xử lý thông tin lấy ra = tư duy của con ngườii, chứ đưa vào chương trình để nó xử lý thì bó tay.
Vấn đề 2: khi truy xuất dữ liệu ko khóa: Vẫn lấy VD là quản lý nhân khẩu, bây giờ có 1 ng nào đó muốn xem thông tin hộ khẩu của em:
- Nếu quản lý = khóa chính (Số CMND), thì gõ số CMND => Ok => Ra được 1 record duy nhất là em
- Nếu ko có khóa chính: Giả sử trong khoảng hơn 80tr dân số VN, có khoảng 1000 ng cùng tên "Phạm Đăng Khoa" => Chị ngồi đó lần mò ra được đúng là em cũng bở hơi tai
, chưa kể đến việc, hiện ra 1000 recode thì cái máy có khi nó cũng treo cứng
Vấn đề 3: Truy xuất dữ liệu của Database Server, khi xử lý bảng ko khóa chính, thì nó sẽ phải search mọi hàng & mọi cột => Tài nguyên tiêu tốn là nhiều vô kể
==> Túm lại là phải có khóa chính & ko lấy ví dụ về khóa chính giống như cô giáo của chị
Sống như thể ngày mai phải chết!....
- 07/04/2008 11:08 AM #7
Ðề: Khoá chính (primary key) trong Access
Quên, nói thêm, kinh nghiệm của e là ko nên sử dụng những từ dịch tiếng Việt dịch ra từ các từ chuyên ngành (Nghe còn khó hiểu hơn là dùng chính từ đó
)
Sống như thể ngày mai phải chết!....
- 07/04/2008 12:03 PM #8Tham gia: 22/08/2005Bài gửi: 653Được cảm ơn: 157 lầnTên bé: Minh ChâuTên bé: Minh Ngọc
Ðề: Khoá chính (primary key) trong Access
Khóa chính có thể là :
-1 trường (VD : Số HC, Số CMDD...)
-Hoặc tập hợp các trường (Họ + Tên + Ngày Sinh + Địa Phương+...)
Với điều kiện trong 1 bảng, thì khóa chính chỉ là duy nhất .
Tóm lại với khóa chính trong 1 bảng không có 2 bộ dữ liệu khóa chính giống hệt nhau .
Tức là có thể là (Họ + Tên) -> Bộ Khóa chính -> Không sai, chỉ là sẽ có khả năng trùng nhau, chứ không sai .
- 07/04/2008 07:44 PM #9
Ðề: Khoá chính (primary key) trong Access
Sống như thể ngày mai phải chết!....
- 08/04/2008 12:30 PM #10Tham gia: 22/08/2005Bài gửi: 653Được cảm ơn: 157 lầnTên bé: Minh ChâuTên bé: Minh Ngọc
Ðề: Khoá chính (primary key) trong Access
Trường hợp trùng nhau đó chính là đã vi phạm vào khóa chính rồi: Khóa chính giống nhau, nhưng bộ dữ liệu khác nhau => Vi phạm[/QUOTE]
Không vi phạm , có thể nó trùng nhau chỉ khi nhập dữ liệu mới xảy ra . Nếu nhập dữ liệu xảy ra lỗi (khóa chính không chấp nhận nhập trùng dữ liệu)-> Cần thay đổi bộ khóa chính -> Sẽ thêm trường [Năm Sinh] vào để mở rộng bộ khóa chính-> có thể nhập tiếp dữ liệu -> Vẫn có thể trùng -> Thay đổi tiếp bộ khóa chính bằng cách thêm trường [Địa Phương] đó cũng chỉ là 1 cách làm tạm thời .
Giải pháp triệt để là chương trình tự tạo ra số tự nhiên tăng để làm khóa chính, luôn tăng thì sẽ không trùng , chứ nếu lấy ID (không tự động sinh ra từ chương trình) cũng chỉ nhập dữ liệu bằng tay -> Vẫn có thể trùng số ID .
Nếu bạn đã học lập trình thì vấn đề này trong bài Cơ Sở Dữ Liệu có nói khá kỹ . Nếu đã từ làm phân tích thiết kế hệ thông CSDL thì càng va vấp nhiều hơn .




Trả lời với trích dẫn
Minh Châu :1: Minh Ngọc 