Maison > base de données > tutoriel mysql > Comment créer correctement des tables relationnelles sans identifiants à incrémentation automatique ?

Comment créer correctement des tables relationnelles sans identifiants à incrémentation automatique ?

Linda Hamilton
Libérer: 2025-01-06 07:54:40
original
816 Les gens l'ont consulté

How to Properly Create Relational Tables Without Auto-Increment IDs?

SQL : Création d'une table relationnelle avec 2 incréments automatiques différents

Présentation du problème

Il est courant d'avoir deux tables avec des ID auto-incrémentés comme principales clés. Cependant, créer une troisième table relationnelle pour établir une relation entre ces deux tables conduit souvent à des erreurs. En effet, soit une seule colonne incrémentée automatiquement est autorisée, soit la suppression de l'incrémentation automatique des tables initiales empêche la création de clés étrangères en raison de problèmes de correspondance de type.

Idées fausses sur les champs d'identification et les clés primaires

Il est important de dissiper certains malentendus fondamentaux :

  • Les identifiants auto-incrémentés ne sont pas synonymes de clés primaires dans le domaine technique ou sens relationnel. Une clé primaire doit être une clé logique non répétitive extraite des données, et non un nombre arbitraire généré par le système.
  • Déclarer un champ d'identification comme clé primaire ne le transforme pas comme par magie en une véritable clé primaire. . Cela garantit uniquement l'unicité au sein de la table, mais pas l'unicité entre les tables.

Exigences relatives aux tables relationnelles

Les tables relationnelles doivent avoir des lignes uniques, ce qui ne peut pas être garanti en utilisant des ID auto-incrémentés comme clés primaires. Pour créer une table relationnelle, nous devons identifier une véritable clé primaire composée d'attributs de données qui identifient de manière unique chaque ligne.

Action corrective

Étape 1 : Définir une vraie clé primaire

Identifiez les attributs de données qui, ensemble, distinguent de manière unique les lignes de chaque tableau. Déclarez une contrainte unique sur ces champs pour éviter les lignes en double.

Étape 2 : Éliminez le champ ID

Une fois les lignes uniques assurées, le champ ID superflu (et son index de support) devient inutile et peut être supprimé.

Étape 3 : Créer l'associatif Table

La troisième table, qui joint les deux tables primaires, doit avoir une clé primaire composite composée des clés primaires des deux tables parentes. Cela garantit des lignes uniques dans la table associative.

Exemple

Supposons que nous ayons deux tables : user et sport. Pour établir une relation entre eux, nous créons une troisième table user_sport :

CREATE TABLE user (
  user_name CHAR(16) NOT NULL PRIMARY KEY,
  name_first CHAR(30) NOT NULL,
  name_last CHAR(30) NOT NULL,
  birth_date DATE NOT NULL
);

CREATE TABLE sport (
  sport_code CHAR(4) NOT NULL PRIMARY KEY,
  name CHAR(30) NOT NULL
);

CREATE TABLE user_sport (
  user_name CHAR(16) NOT NULL,
  sport_code CHAR(4) NOT NULL,
  start_date DATE NOT NULL,
  PRIMARY KEY (user_name, sport_code),
  FOREIGN KEY (user_name) REFERENCES user (user_name),
  FOREIGN KEY (sport_code) REFERENCES sport (sport_code)
);
Copier après la connexion

Dans cet exemple :

  • user_name est la clé primaire de la table user.
  • sport_code est la clé primaire de la table sport.
  • (user_name, sport_code) est la clé primaire composite de user_sport table, qui identifie de manière unique chaque ligne.

En suivant ces principes, nous pouvons créer des tables relationnelles avec des lignes uniques, garantir l'intégrité des données et éviter les problèmes causés par l'utilisation d'ID auto-incrémentés comme clés primaires.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal