Jakie są ograniczenia bazy danych? [Zamknięte]

93

Jaka jest jasna definicja ograniczenia bazy danych? Dlaczego ograniczenia są ważne dla bazy danych? Jakie są rodzaje ograniczeń?

bala3569
źródło
12
To pytanie ma jasną odpowiedź. Nie jest „zbyt szeroka”. Duża liczba głosów za i ulubionych pokazuje, jak przydatna była dla wielu osób. Poprawiłem sformułowanie i zgłosiłem do ponownego otwarcia.
La-comadreja
@BasilBourque to pytanie jest bardzo słabe dla programistów - zostanie szybko odrzucone i zamknięte, zobacz meta.programmers.stackexchange.com/questions/6483/ ... Zalecana lektura: Co się dzieje z Programmers.SE? Przewodnik po przepełnieniu stosu
komar
1
@gnat Mimo że ta strona wciąż mnie rozmyśla o tym, co jest, a co nie jest na temat wymiany stosów programistów, rozumiem i zgadzam się z minimalnym progiem autora postu, który najpierw przeczytał bezpośrednio związany artykuł w Wikipedii, który zawiera ten sam rodzaj skróconego lub podsumowania przeglądu jest wymagany na giełdzie stosów.
Basil Bourque
2
Tytuł jest za szeroki, a pytania podrzędne zawierają wiele pytań naraz -_- W jaki sposób TomTom, P ரதீப், greg-449, bummi i Nit chcą tego? Proszę wytłumacz. Czy w ogóle możesz zapytać o ograniczenia ...?
Lealo
Chociaż rozumiem sentyment do pytań, które są zbyt tablicowe i oparte na opiniach, nie zgadzam się z wymogiem dotyczącym pierwszego czytania artykułu na Wikipedii. NIE zapewnia „tego samego rodzaju skondensowanego lub podsumowującego przeglądu”. Zaakceptowana odpowiedź stanowi znacznie bardziej skondensowaną i konkretną odpowiedź niż powyższy link do Wikipedii.
Na zawsze

Odpowiedzi:

118

Ograniczenia są częścią definicji schematu bazy danych.

Ograniczenie jest zwykle powiązane z tabelą i jest tworzone za pomocą instrukcji CREATE CONSTRAINTlub CREATE ASSERTIONSQL.

Definiują pewne właściwości, które muszą spełniać dane w bazie danych. Mogą dotyczyć kolumny, całej tabeli, więcej niż jednej tabeli lub całego schematu. Niezawodny system bazodanowy zapewnia, że ​​ograniczenia są utrzymywane przez cały czas (z wyjątkiem ewentualnie wewnątrz transakcji, w przypadku tzw. Ograniczeń odroczonych).

Typowe rodzaje ograniczeń to:

  • not null - żadna wartość w kolumnie nie może mieć wartości NULL
  • unikalne - wartości w określonych kolumnach muszą być unikalne dla każdego wiersza w tabeli
  • klucz podstawowy - wartości w określonych kolumnach muszą być unikalne dla każdego wiersza w tabeli i nie mogą mieć wartości NULL ; zwykle każda tabela w bazie danych powinna mieć klucz podstawowy - służy do identyfikacji poszczególnych rekordów
  • klucz obcy - wartości w określonych kolumnach muszą odwoływać się do istniejącego rekordu w innej tabeli (za pośrednictwem jego klucza podstawowego lub innego unikalnego ograniczenia )
  • check - określono wyrażenie, które musi mieć wartość true, aby ograniczenie zostało spełnione
Ziga Kranjec
źródło
3
+1 za uwzględnienie PK, not null, null
gbn
+1, nadal możesz rozwinąć scenariusze z KLUCZEM OBCYM i podać kilka linków.
Unreason
2
Sprawdź ograniczenia nie mogą być oceniane jako fałszywe. Nie muszą być prawdziwe. Nieznane też jest w porządku.
Martin Smith
2
Czy ograniczenie typu nie byłoby również powszechnym rodzajem?
Martin
1
Chociaż zwykle nie nazywamy ich ograniczeniami, argumentowałbym, że typ danych jest formą ograniczenia. Jeśli zdefiniuję coś jako Int lub datetime, ogranicza to typ danych, które można umieścić w polu. Właściwy dobór typów danych jest kluczowym elementem zapewniania integralności danych.
HLGEM,
36

Aby zrozumieć, dlaczego potrzebujemy ograniczeń, musisz najpierw zrozumieć wartość integralności danych.

Integralność danych odnosi się do ważności danych. Czy Twoje dane są prawidłowe? Czy Twoje dane reprezentują to, do czego je zaprojektowałeś?

Jakie dziwne pytania, które zadaję, mogą pomyśleć, ale niestety zbyt często bazy danych są wypełnione śmieciowymi danymi, nieprawidłowymi odwołaniami do wierszy w innych tabelach, które już dawno minęły ... i wartości, które nie mają żadnego znaczenia dla logiki biznesowej Twojego rozwiązania.

Wszystkie te śmieci nie są same w sobie podatne na obniżenie wydajności, ale są również bombą czasową w logice aplikacji, która ostatecznie pozwoli odzyskać dane, których nie jest zaprojektowana.

Ograniczenia to reguły tworzone w czasie projektowania, które chronią dane przed uszkodzeniem. Jest to niezbędne do przetrwania Twojego serca dziecka rozwiązania bazodanowego. Bez ograniczeń Twoje rozwiązanie z pewnością ulegnie zniszczeniu wraz z upływem czasu i intensywnym użytkowaniem.

Musisz przyznać, że zaprojektowanie projektu bazy danych to tylko narodziny rozwiązania. Tutaj potem musi żyć (miejmy nadzieję) długo i znosić wszelkiego rodzaju (dziwne) zachowania swoich użytkowników końcowych (tj. Aplikacji klienckich). Ale ta faza projektowania jest kluczowa dla długotrwałego sukcesu Twojego rozwiązania! Szanuj go i poświęcaj mu czas i uwagę, jakiego wymaga.

Pewien mądry człowiek powiedział kiedyś: „Dane muszą się chronić!” . I to właśnie robią ograniczenia. Są to reguły, które utrzymują jak najbardziej aktualne dane w Twojej bazie danych.

Można to zrobić na wiele sposobów, ale zasadniczo sprowadzają się one do:

  • Ograniczenia klucza obcego są prawdopodobnie najczęściej używanymi ograniczeniami i zapewniają, że odwołania do innych tabel są dozwolone tylko wtedy, gdy rzeczywiście istnieje wiersz docelowy, do którego można się odwołać. Uniemożliwia to również przerwanie takiej relacji przez usunięcie wiersza, do którego się odwołuje, tworząc martwe łącze.
  • Ograniczenia sprawdzania mogą zapewnić, że w określonej kolumnie są dozwolone tylko określone wartości. Możesz utworzyć ograniczenie zezwalające tylko na słowo „żółty” lub „niebieski” w kolumnie VARCHAR. Wszystkie inne wartości powodowałyby błąd. Zapoznaj się z pomysłami na użycie ograniczeń sprawdzających, sprawdź sys.check_constraintswidok w przykładowej bazie danych AdventureWorks
  • Reguły w SQL Server są po prostu wielokrotnego użytku Sprawdź ograniczenia (pozwala zachować składnię z jednego miejsca i ułatwia wdrażanie ograniczeń w innych bazach danych)

Jak już tu zasugerowałem, potrzeba dogłębnych rozważań, aby zbudować najlepsze i najbardziej defensywne podejście do ograniczeń w projekcie bazy danych. Najpierw musisz poznać możliwości i ograniczenia różnych typów ograniczeń powyżej. Dalsze czytanie może obejmować:

Ograniczenia dotyczące klucza obcego - Microsoft

Ograniczenie klucza obcego - w3schools

SPRAWDŹ ograniczenia

Powodzenia! ;)

Alex
źródło
Jako komentarz nekro, wydaje się, że zasady są teraz defekowane przez Microsoft.
gary
6

Ograniczenia to nic innego jak reguły dotyczące danych. Jakie dane są prawidłowe, a które nie, można zdefiniować za pomocą ograniczeń. Dzięki temu można zachować integralność danych. Poniżej przedstawiono powszechnie stosowane ograniczenia:

  1. Klucz podstawowy : jednoznacznie identyfikujący dane. Jeśli to ograniczenie zostało określone dla określonej kolumny, nie możemy wprowadzić zduplikowanych danych w tej kolumnie
  2. Sprawdź : Na przykład NOT NULL. Tutaj możemy określić, jakie dane możemy wprowadzić dla tej konkretnej kolumny, a czego nie oczekuje się w tej kolumnie.
  3. Klucz obcy : odniesienia do klucza obcego do wiersza innej tabeli. Dzięki temu dane odnoszące się do jednej tabeli z innej tabeli są zawsze dostępne dla tabeli odwołań.
user3107247
źródło
3

Ograniczenia mogą służyć do wymuszania określonych właściwości danych. Prostym przykładem jest ograniczenie kolumny int do wartości [0-100000]. To wprowadzenie wygląda dobrze.

Anders Abel
źródło
3

Ograniczenia określają, jakie wartości są prawidłowe dla danych w bazie danych. Na przykład możesz wymusić, że wartość a nie jest null ( NOT NULLograniczenie) lub że istnieje jako unikalne ograniczenie w innej tabeli ( FOREIGN KEYograniczenie) lub że jest unikalne w tej tabeli ( UNIQUEograniczenie lub być może PRIMARY KEYograniczenie w zależności od twoich wymagań ). Bardziej ogólne ograniczenia można zaimplementować za pomocą CHECKograniczeń.

Dokumentacja MSDN dotycząca ograniczeń programu SQL Server 2008 jest prawdopodobnie najlepszym miejscem na rozpoczęcie.

Jon Skeet
źródło
2
  1. UNIQUEograniczenie (którego PRIMARY KEYwariantem jest ograniczenie). Sprawdza, czy wszystkie wartości danego pola są unikalne w całej tabeli. To jest Xograniczenie osi (rekordy)

  2. CHECKograniczenie (którego NOT NULLwariantem jest ograniczenie). Sprawdza, czy określony warunek jest spełniony dla wyrażenia w polach tego samego rekordu. To jest Yograniczenie osiowe (pola)

  3. FOREIGN KEYprzymus. Sprawdza, czy wartość pola została znaleziona wśród wartości pola w innej tabeli. To jest Zograniczenie -osiowe (tabele).

Quassnoi
źródło
Unikalne ograniczenia i ograniczenia klucza obcego można zapisać za pomocą CHECKograniczeń, więc po co klasyfikować je jako inne? tj. „ Y-osi” (cokolwiek to znaczy).
onedaywhen
2
@onedaywhen: jak zaimplementować FOREIGN KEYużycie CHECKograniczenia?
Quassnoi
1
@onedaywhen: spróbuj utworzyć tabelę z tym ograniczeniem.
Quassnoi
1
@onedaywhen: czy tak trudno jest spróbować? Wskazówka: to nie zadziała.
Quassnoi
3
@onedaywhen: zapytanie, które napisałeś, nie tworzy ograniczenia sprawdzającego. To zwykłe SELECTzapytanie. Nie można używać podzapytań (ani żadnych innych konstrukcji, które odwołują się do wartości poza bieżącym rekordem) w CHECKograniczeniach w programie SQL Server.
Quassnoi
2

Baza danych to skomputeryzowana logiczna reprezentacja modelu koncepcyjnego (lub biznesowego), składająca się z zestawu nieformalnych reguł biznesowych. Te zasady to zrozumiałe dla użytkownika znaczenie danych. Ponieważ komputery obejmują tylko formalne reprezentacje, reguły biznesowe nie mogą być reprezentowane bezpośrednio w bazie danych. Muszą być odwzorowane na formalną reprezentację, model logiczny, który składa się z zestawu ograniczeń integralności. Te ograniczenia - schemat bazy danych - są logiczną reprezentacją reguł biznesowych w bazie danych, a zatem stanowią rozumiane przez DBMS znaczenie danych. Wynika z tego, że jeśli DBMS jest nieświadomy i / lub nie egzekwuje pełnego zestawu ograniczeń reprezentujących reguły biznesowe, ma niepełne zrozumienie tego, co oznaczają dane, a zatem

Uwaga: DBMS - „zrozumiałe” znaczenie - ograniczenia integralności - nie jest identyczne z rozumianym przez użytkownika znaczeniem - regułami biznesowymi - ale pomimo utraty jakiegoś znaczenia uzyskujemy możliwość mechanizacji logicznych wniosków z danych.

„Stara klasa błędów” Fabiana Pascala

onedaywhen
źródło
2

Zasadniczo istnieją 4 typy głównych ograniczeń w SQL:

  • Ograniczenie domeny: jeśli jedna z wartości atrybutów podanych dla nowej krotki nie należy do określonej domeny atrybutów

  • Kluczowe ograniczenie: jeśli wartość atrybutu klucza w nowej krotce już istnieje w innej krotce w relacji

  • Więzy integralności: jeśli wartość klucza obcego w nowej krotce odwołuje się do wartości klucza podstawowego, która nie istnieje w relacji, do której się odwołuje

  • Integralność jednostki: jeśli wartość klucza podstawowego jest null w nowej krotce

Ragu
źródło
-1

ograniczenia to warunki, które mogą zweryfikować określony warunek. Ograniczenia związane z bazą danych to integralność domeny, integralność jednostki, integralność referencyjna, ograniczenia integralności zdefiniowanej przez użytkownika itp.

Prashant Kumbharkar
źródło