web-dev-qa-db-fra.com

Une clé primaire contient-elle exactement une valeur null ...?

Mon travail

  • Une clé primaire est unique et une seule contient pour une table.

  • Il existe de nombreuses clés uniques pouvant contenir dans une table.

  • Dans SQL Server, la clé primaire n'est pas nullable. Mais, une clé unique ne peut contenir qu'une seule valeur null.

Ma question:

Pratiquement dans SQL Server, la clé primaire n'est pas nullable. Mais quand il vient en théorie, pourquoi ne pouvons-nous pas avoir exactement une seule valeur null dans le primaire Touche lorsqu'il permet une valeur null dans la clé unique?

Merci d'avoir répondu à ma question

Désolé de poser une question générale après avoir lu la réponse, j'ai eu une idée claire sur les valeurs nulles dans dB.

De plus, j'ai confondu avec des langages de programmation comme en C++, Jave, où la valeur null peut être comparable. Après avoir fait du travail, je comprends que NULL n'est pas comparable dans SQL.

Dans les langages de programmation comme en C++, Jave ...

Null==Null 

retourne vrai

Mais, en SQL

Null==Null 

renvoie False, car la valeur null est inconnue et elle pourrait être une valeur.

1
Lokesh Reddy

Aucun attribut qui fait partie d'une clé peut contenir des nuls; Si une colonne est nullable, il ne fait partie d'aucune clé. Il est également le cas que l'ensemble de colonnes définies par une contrainte de clé unique ou primaire n'est pas une clé à moins que ce soit minimal Superkey et également non nullable.

Pourquoi NULLS ne peut pas permettre aux clés? Il y a beaucoup de raisons potentielles:

  1. Les clés sont un concept relationnel alors que les NULLS (comme nous les connaissons aujourd'hui) sont essentiellement une invention SQL qui est venue le long des années plus tard. Les SQL SDBMS sont différents pour les DBMS relationnels.
  2. Les nulls ne sont pas des valeurs, elles ne sont donc pas des valeurs clés. Les nulls sont des marqueurs pour des valeurs non spécifiées.
  3. Les touches sont censées être irréductibles (minimales) - en d'autres termes, tous les composants de la clé sont nécessaires pour créer un surbrillage. Puisque Null signifie que certains composants manquent, il contredit cette définition la plus élémentaire d'une clé.
  4. Dans la standard SQL, une contrainte d'unicité n'applique pas l'unicité si une colonne permet aux nuls.
  5. SQL Les DBMS permettent également des nulls dans d'autres contraintes (sauf la clé primaire): clé étrangère, chèque, assertion. Les NULLS ne violent jamais la contrainte afin que la null agisse comme une sorte de "clause de sortie" pour l'intégrité des données. Hypothétiquement, si les NULLS étaient autorisées dans les clés, cela semblerait impliquer une forme plus stricte d'intégrité référentielle qui n'autorisait pas les nulls dans des clés étrangères à moins que la clé nulle correspondante dans la table des parents. Dans ce cas, chaque clé étrangère nullable devrait faire référence à une clé nullable et ne pouvait pas faire référence à une non-nullable.
  6. Il n'y a pas de nulls en réalité, dans les mathématiques quotidiennes ou la logique; Ils ne sont qu'une fonctionnalité de programmation en SQL et ne sont pas particulièrement "mathématiques" ou même cohérentes de la manière dont ils travaillent. Ne cherchez pas plus de raisons: NULLS fonctionne comme ils le font simplement parce que les concepteurs de SQL le disent.
9
nvogel