2010-01-24 12 views
22

Chúng tôi muốn ngăn sao chép bản ghi trong cơ sở dữ liệu truy cập MS của chúng tôi bằng cách sử dụng chỉ mục duy nhất nhiều cột. Vì cách dữ liệu được gửi (qua mạng), đôi khi dữ liệu trùng lặp được nhận. Nguồn dữ liệu không gửi một ID duy nhất, do đó, tùy chọn đơn giản nhất là ngăn các bản ghi trùng lặp được chèn vào.Chúng ta có thể tạo các chỉ mục duy nhất đa số trên cơ sở dữ liệu truy cập MS không?

Theo Unique Index Design Guidelines:

Với chỉ số độc đáo multicolumn, các chỉ số đảm bảo rằng mỗi sự kết hợp các giá trị trong khóa index là duy nhất. Ví dụ: Ví dụ: nếu chỉ mục duy nhất là được tạo trên kết hợp các cột LastName, FirstName và MiddleName, không có hai hàng trong bảng có thể có sự kết hợp các giá trị tương tự cho các cột này.

Điều này là dành cho SQL 2005 tuy nhiên, vì vậy tôi không chắc chắn có thể sử dụng truy cập MS.

Tôi đoán một sự thay thế có lẽ là để sử dụng truy vấn (pseudo code):

insert into foobar (a, b, c) values ('x', 'y', 'z') 
where (a <> 'x') and (b <> 'y') and (c <> 'z') 

... nhưng tôi cảm thấy như một chỉ số sẽ tốt hơn.

+0

Tại sao không đưa ra các bảng trong câu hỏi một chỉ số duy nhất? Tôi không thấy những gì này đã làm cụ thể với C + +, BTW. –

+0

Vâng, tôi không chắc nó có liên quan không. Chúng tôi đã có một chỉ mục duy nhất; nhưng nguồn dữ liệu không cung cấp dữ liệu này. Tôi sẽ cập nhật câu hỏi của mình. –

+0

Chỉ mục duy nhất của bạn cần phải có trên dữ liệu thực tế. –

Trả lời

7

Mở bảng trong dạng xem thiết kế trong MS Access, chọn ba cột bạn muốn tạo thành chỉ mục duy nhất, sau đó bấm phím nhỏ trên thanh công cụ. Bạn không thể có giá trị null trong khóa chính (bộ).

+0

Vấn đề Null là quan trọng - nếu bất kỳ trường nào có thể là Null, thì bạn không thể thực thi tính duy nhất trên chỉ mục (vì không có hai Null nào bằng nhau, hai bản ghi với 5 trường giống hệt nhau và trường Null 6 trong cả hai sẽ không được coi là trùng lặp). –

+3

Câu trả lời này là đúng. Nhưng ai đó nên nói với Nick rằng những gì anh ấy thực sự tìm kiếm là một CONSTRAINT độc đáo, không phải là một chỉ mục duy nhất. Nếu anh ta creaes một hạn chế PK đa lõi, anh ta sẽ nhận được một chỉ số duy nhất nhiều cột cùng với nó. Nhưng chỉ số chỉ là một công cụ. Tính năng logic mà anh ta đang tìm kiếm là ràng buộc. –

+0

@Walter Mitty Tôi nghĩ bạn đúng - hãy xem nhận xét về câu trả lời của tôi. –

39

Biến bạn có thể tạo chỉ mục nhiều cột duy nhất trên cơ sở dữ liệu truy cập MS, nhưng sẽ hơi điên nếu bạn muốn thực hiện điều này thông qua GUI. Ngoài ra còn có một giới hạn; bạn chỉ có thể sử dụng 10 cột cho mỗi chỉ mục.

Dù sao, đây là cách bạn tạo chỉ mục duy nhất nhiều cột trên cơ sở dữ liệu truy cập MS.

  1. Mở bảng ở chế độ thiết kế, và Thiết kế, chọn Chỉ số.
  2. Tạo hàng mới và nhập giá trị vào các ô Tên chỉ mục ô,
  3. Chọn cột đầu tiên từ trình đơn thả xuống.
  4. Thêm hàng mới và để trống ô Tên chỉ mục.
  5. Chọn cột thứ hai, v.v.

Đây là những gì nó sẽ giống như thế:

multicolumn index in MS access

+0

Hmm, vì lý do nào đó, điều này làm cho 'Foo' độc đáo với quyền riêng của nó, thay vì kết hợp với 'Foo',' Bar', v.v .. tôi cần cho phép '(" a "," b "," c ", "d") 'chỉ một lần, nhưng cũng cho phép' ("x", "b", "c", "d") '- và sắp xếp các chỉ mục này dường như không cho phép điều này vì 3 giá trị cuối cùng đã hiện hữu. –

+0

@Remou cho bạn một cách dễ dàng hơn để thực hiện điều đó, tức là, chọn nhiều hàng và nhấn nút PK trên thanh công cụ. Điều này có vẻ khá trực quan với tôi, vì đó là cách GUI để thiết lập bất kỳ khóa chính nào. –

+0

@ David-W-Fenton Yup, như Remou nói. –

1

Chúng ta có thể làm cho dữ liệu đa là dữ liệu độc đáo mà không cần cài đặt chúng như khóa chính.

(Note: chỉ có 1 dữ liệu trong bảng có thể là chìa khóa chính)

Bước để thiết lập giá trị dữ liệu dữ liệu như là duy nhất (ví MS Access 2007 - 2010)

  1. Mở bảng được chọn trong Thiết kế Xem
  2. Nhấp vào (Đánh dấu) cột/thuộc tính cụ thể mà bạn muốn đặt làm duy nhất
  3. Ở dưới cùng của bảng bạn sẽ thấy "Index Thuộc tính" cho rằng cột cụ thể
  4. Find "Indexed" cột, hiện dữ liệu trong hộp văn bản chỉ mục là "Không", thay đổi dữ liệu bằng cách nhấp chuột vào cuối hộp văn bản, chọn "Có (Không trùng lặp)"

Thực sự hy vọng phương pháp này có thể giúp tất cả các bạn! :)

+1

Tính năng này chỉ hoạt động đối với các cột đơn. Câu hỏi đặt ra là về nhiều cột. – Andre

+0

@ Andre451 bạn có thể sử dụng phương pháp này cho nhiều cột Andre. Chỉ cần đặt phương thức này cho mỗi cột bạn muốn đặt là duy nhất. Bạn đã cố gắng đặt nhiều hơn một cột chưa? Bởi vì nó hoạt động trên của tôi. – finazrosli

+1

Có, tất nhiên bạn có thể đặt một chỉ mục duy nhất cho nhiều cột riêng biệt. Nhưng câu hỏi là đặt một chỉ mục duy nhất bao gồm nhiều cột. – Andre

-1

Unique key

Nó sẽ đóng vai trò quan trọng duy nhất trong Ms Access 2007/2010

Các vấn đề liên quan