Ràng buộc cơ sở dữ liệu là gì? [đóng cửa]


92

Định nghĩa rõ ràng về ràng buộc cơ sở dữ liệu là gì? Tại sao các ràng buộc lại quan trọng đối với cơ sở dữ liệu? Các loại ràng buộc là gì?


12
Câu hỏi này có một câu trả lời rõ ràng. Nó không phải là "quá rộng." Số lượng lớn các lượt ủng hộ và yêu thích của nó cho thấy nó hữu ích như thế nào đối với nhiều người. Tôi đã làm sạch từ ngữ và đề cử nó để mở lại.
La-comadreja

@BasilBourque câu hỏi này rất phù hợp với các Lập trình viên - nó sẽ nhanh chóng bị bỏ phiếu và đóng ở đó, hãy xem meta.programmers.stackexchange.com/questions/6483/… Bài đọc được đề xuất: Điều gì đang xảy ra với Lập trình
gnat

1
@gnat Mặc dù trang đó khiến tôi vẫn còn mơ hồ về chủ đề dành cho Lập trình viên Stack Exchange, tôi có thể hiểu và đồng ý với ngưỡng tối thiểu của tác giả bài đăng khi lần đầu tiên đọc một bài viết Wikipedia có liên quan trực tiếp cung cấp cùng một loại tổng quan cô đọng hoặc tóm tắt đang được yêu cầu trên Stack Exchange.
Basil Bourque vào

2
Tiêu đề là rộng, và các câu hỏi phụ đặt ra nhiều câu hỏi cùng một lúc -_- TomTom, P ரதீப், greg-449, bummi và Nit muốn nó như thế nào? Vui lòng giải thích. Có cách nào bạn có thể hỏi về các ràng buộc không ...?
Lealo

Mặc dù tôi hiểu tình cảm đối với các câu hỏi quá phiến diện và dựa trên quan điểm, tôi không đồng ý với yêu cầu đọc bài viết wikipedia đầu tiên. Nó KHÔNG cung cấp "cùng một loại tổng quan cô đọng hoặc tóm tắt". Câu trả lời được chấp nhận cung cấp câu trả lời cô đọng hơn nhiều so với liên kết wikipedia ở trên.
Chris

Câu trả lời:


117

Các ràng buộc là một phần của định nghĩa lược đồ cơ sở dữ liệu.

Một ràng buộc thường được liên kết với một bảng và được tạo bằng câu lệnh SQL CREATE CONSTRAINThoặc CREATE ASSERTION.

Chúng xác định các thuộc tính nhất định mà dữ liệu trong cơ sở dữ liệu phải tuân theo. Chúng có thể áp dụng cho một cột, toàn bộ bảng, nhiều bảng hoặc toàn bộ lược đồ. Một hệ thống cơ sở dữ liệu đáng tin cậy đảm bảo rằng các ràng buộc luôn giữ (ngoại trừ có thể bên trong một giao dịch, được gọi là các ràng buộc hoãn lại).

Các loại ràng buộc phổ biến là:

  • không null - mỗi giá trị trong một cột không được NULL
  • duy nhất - (các) giá trị trong (các) cột được chỉ định phải là duy nhất cho mỗi hàng trong bảng
  • khóa chính - (các) giá trị trong (các) cột được chỉ định phải là duy nhất cho mỗi hàng trong bảng và không được NULL ; thông thường mỗi bảng trong cơ sở dữ liệu phải có một khóa chính - nó được sử dụng để xác định các bản ghi riêng lẻ
  • khóa ngoại - (các) giá trị trong (các) cột được chỉ định phải tham chiếu đến bản ghi hiện có trong bảng khác (thông qua khóa chính của nó hoặc một số ràng buộc duy nhất khác )
  • kiểm tra - một biểu thức được chỉ định, phải đánh giá là true để thỏa mãn ràng buộc

3
+1 để bao gồm PK, không phải null, null
gbn

+1, bạn vẫn có thể mở rộng các kịch bản NGOẠI KHÓA và cung cấp một số liên kết.
Unreason

2
Kiểm tra Các ràng buộc không được đánh giá thành false. Chúng không nhất thiết phải đúng. Không biết cũng tốt.
Martin Smith

2
Không phải ràng buộc loại cũng là một loại phổ biến?
Martin

1
Mặc dù chúng ta không thường gọi chúng là ràng buộc, nhưng tôi cho rằng kiểu dữ liệu là một dạng ràng buộc. Nếu tôi xác định một thứ gì đó là Int hoặc datetime, điều đó sẽ hạn chế loại dữ liệu có thể được đưa vào trường. Lựa chọn đúng kiểu dữ liệu là một phần quan trọng để đảm bảo tính toàn vẹn của dữ liệu.
HLGEM

36

Để hiểu tại sao chúng ta cần các ràng buộc, trước tiên bạn phải hiểu giá trị của tính toàn vẹn dữ liệu.

Tính toàn vẹn của dữ liệu đề cập đến tính hợp lệ của dữ liệu. Dữ liệu của bạn có hợp lệ không? Dữ liệu của bạn có đại diện cho những gì bạn đã thiết kế chúng không?

Bạn có thể nghĩ đến những câu hỏi kỳ lạ mà tôi hỏi, nhưng đáng buồn thay, cơ sở dữ liệu thường chứa đầy dữ liệu rác, tham chiếu không hợp lệ đến các hàng trong các bảng khác, đã biến mất từ ​​lâu ... và các giá trị không có ý nghĩa gì đối với logic nghiệp vụ giải pháp của bạn lâu hơn.

Tất cả những thứ rác rưởi này không chỉ có xu hướng làm giảm hiệu suất của bạn mà còn là một quả bom hẹn giờ theo logic ứng dụng của bạn mà cuối cùng sẽ truy xuất dữ liệu mà nó không được thiết kế để hiểu.

Ràng buộc là các quy tắc bạn tạo tại thời điểm thiết kế để bảo vệ dữ liệu của bạn không bị hỏng. Điều cần thiết cho sự tồn tại lâu dài của đứa con trái tim của bạn là một giải pháp cơ sở dữ liệu. Nếu không có ràng buộc, giải pháp của bạn chắc chắn sẽ giảm dần theo thời gian và mức độ sử dụng nhiều.

Bạn phải thừa nhận rằng thiết kế cơ sở dữ liệu của bạn chỉ là sự ra đời của giải pháp của bạn. Ở đây sau khi nó phải tồn tại (hy vọng) một thời gian dài, và chịu đựng tất cả các loại hành vi (kỳ lạ) của người dùng cuối của nó (tức là các ứng dụng khách). Nhưng giai đoạn phát triển thiết kế này là rất quan trọng cho sự thành công lâu dài của giải pháp của bạn! Hãy tôn trọng nó, dành thời gian và sự chú ý mà nó cần.

Một nhà thông thái từng nói: "Dữ liệu phải tự bảo vệ mình!" . Và đây là những gì ràng buộc làm. Đó là các quy tắc giữ cho dữ liệu trong cơ sở dữ liệu của bạn hợp lệ nhất có thể.

Có nhiều cách để thực hiện việc này, nhưng về cơ bản, chúng chủ yếu là:

  • Ràng buộc khóa ngoại có lẽ là ràng buộc được sử dụng nhiều nhất và đảm bảo rằng các tham chiếu đến các bảng khác chỉ được phép nếu thực sự tồn tại một hàng đích để tham chiếu. Điều này cũng làm cho không thể phá vỡ mối quan hệ như vậy bằng cách xóa hàng được tham chiếu tạo ra một liên kết chết.
  • Ràng buộc kiểm tra có thể đảm bảo rằng chỉ các giá trị cụ thể mới được phép trong một cột nhất định. Bạn có thể tạo ràng buộc chỉ cho phép từ 'Vàng' hoặc 'Xanh lam' trong cột VARCHAR. Tất cả các giá trị khác sẽ gây ra lỗi. Lấy ý tưởng để sử dụng các ràng buộc kiểm tra kiểm tra sys.check_constraintschế độ xem trong cơ sở dữ liệu mẫu AdventureWorks
  • Các quy tắc trong SQL Server chỉ là các Ràng buộc Kiểm tra có thể sử dụng lại (cho phép bạn duy trì cú pháp từ một nơi duy nhất và giúp việc triển khai các ràng buộc của bạn đến các cơ sở dữ liệu khác dễ dàng hơn)

Như tôi đã gợi ý ở đây, cần có một số cân nhắc kỹ lưỡng để xây dựng phương pháp hạn chế tốt nhất và phòng thủ nhất cho thiết kế cơ sở dữ liệu của bạn. Trước tiên, bạn cần biết các khả năng và hạn chế của các loại ràng buộc khác nhau ở trên. Đọc thêm có thể bao gồm:

Các ràng buộc chính đối với nước ngoài - Microsoft

Ràng buộc khóa ngoại - w3schools

Ràng buộc KIỂM TRA

Chúc may mắn! ;)


Như một nhận xét chưa đúng, có vẻ như các quy tắc hiện đang được Microsoft đào thải.
gary

6

Ràng buộc không là gì khác ngoài các quy tắc trên dữ liệu. Dữ liệu nào là hợp lệ và dữ liệu nào không hợp lệ có thể được xác định bằng các ràng buộc. Vì vậy, tính toàn vẹn của dữ liệu có thể được duy trì. Sau đây là các ràng buộc được sử dụng rộng rãi:

  1. Khóa chính : xác định duy nhất dữ liệu. Nếu ràng buộc này đã được chỉ định cho một cột nhất định thì chúng tôi không thể nhập dữ liệu trùng lặp vào cột đó
  2. Kiểm tra : Chẳng hạn như NOT NULL. Ở đây chúng ta có thể chỉ định dữ liệu nào chúng ta có thể nhập cho cột cụ thể đó và dữ liệu nào không được mong đợi cho cột đó.
  3. Khóa ngoại : Tham chiếu khóa ngoại đến hàng của bảng khác. Vì vậy, dữ liệu được tham chiếu trong một bảng từ một bảng khác luôn có sẵn cho bảng tham chiếu.

3

Các ràng buộc có thể được sử dụng để thực thi các thuộc tính cụ thể của dữ liệu. Một ví dụ đơn giản là giới hạn một cột int trong các giá trị [0-100000]. Phần giới thiệu này có vẻ tốt.


3

Các ràng buộc quy định giá trị nào là hợp lệ cho dữ liệu trong cơ sở dữ liệu. Ví dụ: bạn có thể thực thi một giá trị không phải là null (một NOT NULLràng buộc) hoặc nó tồn tại dưới dạng một ràng buộc duy nhất trong một bảng khác (một FOREIGN KEYràng buộc) hoặc giá trị đó là duy nhất trong bảng này (một UNIQUEràng buộc hoặc có thể là PRIMARY KEYràng buộc tùy thuộc vào yêu cầu của bạn ). Các ràng buộc chung hơn có thể được thực hiện bằng cách sử dụng các CHECKràng buộc.

Các tài liệu MSDN cho năm 2008 trở ngại SQL Server có lẽ là nơi khởi đầu tốt nhất của bạn.


2
  1. UNIQUEràng buộc (trong đó PRIMARY KEYràng buộc là một biến thể). Kiểm tra xem tất cả các giá trị của một trường đã cho là duy nhất trên bảng. Đây là Xràng buộc -axis (bản ghi)

  2. CHECKràng buộc (trong đó NOT NULLràng buộc là một biến thể). Kiểm tra xem một điều kiện nhất định có giữ cho biểu thức trên các trường của cùng một bản ghi hay không. Đây là Yràng buộc -axis (các trường)

  3. FOREIGN KEYhạn chế. Kiểm tra xem giá trị của trường có được tìm thấy trong số các giá trị của trường trong bảng khác không. Đây là Zràng buộc -axis (bảng).


Các ràng buộc duy nhất và ràng buộc khóa ngoại có thể được viết bằng cách sử dụng các CHECKràng buộc, vậy tại sao lại phân loại nó thành khác nhau? tức là " Y-axis" (bất kể điều đó có nghĩa là gì).
onedaywhen

2
@onedaywhen: làm cách nào để bạn triển khai FOREIGN KEYmột CHECKràng buộc?
Quassnoi,

1
@onedaywhen: hãy thử tạo bảng với ràng buộc này.
Quassnoi,

1
@onedaywhen: có khó quá không? Gợi ý: điều này sẽ không hoạt động.
Quassnoi 31/10/11

3
@onedaywhen: truy vấn bạn đã viết không tạo ràng buộc kiểm tra. Đó là một SELECTtruy vấn đơn thuần . Bạn không thể sử dụng truy vấn con (hoặc bất kỳ cấu trúc nào khác tham chiếu đến các giá trị bên ngoài bản ghi hiện tại) trong các CHECKràng buộc trong SQL Server.
Quassnoi 31/10/11

2

Cơ sở dữ liệu là sự trình bày lôgic trên máy tính của một mô hình khái niệm (hoặc kinh doanh), bao gồm một tập hợp các quy tắc kinh doanh không chính thức. Các quy tắc này là ý nghĩa mà người dùng hiểu được của dữ liệu. Bởi vì máy tính chỉ hiểu được các biểu diễn chính thức, các quy tắc nghiệp vụ không thể được biểu diễn trực tiếp trong cơ sở dữ liệu. Chúng phải được ánh xạ tới một biểu diễn chính thức, một mô hình logic, bao gồm một tập hợp các ràng buộc toàn vẹn. Các ràng buộc này - lược đồ cơ sở dữ liệu - là biểu diễn logic trong cơ sở dữ liệu của các quy tắc nghiệp vụ và do đó, là ý nghĩa được DBMS hiểu của dữ liệu. Theo đó, nếu DBMS không biết và / hoặc không thực thi toàn bộ các ràng buộc đại diện cho các quy tắc kinh doanh, thì nó sẽ không hiểu đầy đủ về ý nghĩa của dữ liệu và do đó,

Lưu ý: Ý nghĩa “được hiểu” của DBMS - các ràng buộc về tính toàn vẹn - không giống với ý nghĩa mà người dùng hiểu - các quy tắc nghiệp vụ - nhưng, mặc dù mất đi một số ý nghĩa, chúng tôi có được khả năng cơ giới hóa các suy luận logic từ dữ liệu.

"Một lớp lỗi cũ" của Fabian Pascal


2

Về cơ bản có 4 loại ràng buộc chính trong SQL:

  • Ràng buộc miền: nếu một trong các giá trị thuộc tính được cung cấp cho một bộ giá trị mới không thuộc miền thuộc tính được chỉ định

  • Ràng buộc khóa: nếu giá trị của thuộc tính khóa trong một bộ mới đã tồn tại trong bộ khác trong quan hệ

  • Tính toàn vẹn tham chiếu: nếu giá trị khóa ngoại trong một bộ giá trị mới tham chiếu đến giá trị khóa chính không tồn tại trong quan hệ được tham chiếu

  • Tính toàn vẹn của thực thể: nếu giá trị khóa chính là rỗng trong một bộ giá trị mới


-1

ràng buộc là điều kiện, có thể xác nhận điều kiện cụ thể. Các ràng buộc liên quan đến cơ sở dữ liệu là tính toàn vẹn của miền, tính toàn vẹn của thực thể, tính toàn vẹn của tham chiếu, ràng buộc về tính toàn vẹn do người dùng xác định, v.v.

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.