CRÉER UNE TABLE en SQL : Conception de schémas maîtres et meilleures pratiques
Comprenez comment CREATE TABLE structure votre base de données. Apprenez la syntaxe clé, les types de données, les contraintes et les techniques d'optimisation pour créer des schémas évolutifs.
L'instruction « CREATE TABLE » constitue la base de toute conception de base de données relationnelle. Il définit les données que vous stockez, leur structure et les règles qui garantissent leur exactitude.
Dans ce tutoriel, je vous présenterai les bases de la syntaxe d'CREATE TABLE, des choix de conception pratiques et des exemples concrets afin de vous aider à créer des tableaux intuitifs et efficaces qui répondent à la fois aux besoins actuels et à la croissance future.
Si vous débutez avec SQL, nous vous recommandons de commencerpar notre cours Introduction à SQL ou notre cours SQL intermédiaire afin d'acquérir des bases solides. De plus, je trouve que le document SQL Basics Cheat Sheet, que vous pouvez télécharger, est une référence utile car il contient toutes les fonctions SQL les plus courantes.
Le rôle de CREATE TABLE dans la conception de bases de données
L'instruction « CREATE TABLE » est lacommande principale du langage de définition des données (DDL) qui défine la manière dont vos données sont stockées, organisées et accessibles. Avant de la créer, il est important de déterminer ce que la table représente, comment elle est reliée aux autres tables et comment sa structure facilitera les requêtes futures.
La syntaxe de base comprend le nom de la table suivie d'une liste de colonnes, chacune étant définie avec un type de données et des contraintes facultatives. Veuillez examiner la syntaxe ci-dessous :
schema_name: Espace de noms facultatif pour organiser les tables.
table_name: Nom clair et descriptif pour l'entité.
column_name: Le nom d'un champ (attribut) dans le tableau.
data_type: Définit le format, tel que INT, VARCHAR ou DATE.
constraint: Règles facultatives telles que PRIMARY KEY, NOT NULL ou UNIQUE.
Cette syntaxe est cohérente sur les principales plateformes SQL telles que MySQL, PostgreSQL et SQL Server, avec seulement quelques différences mineures dans les options avancées. Par conséquent, il est recommandé de respecter des conventions de nommage claires pour les noms de tables et de colonnes afin de garantir la cohérence entre ces plateformes.
Définition des colonnes, des types de données et des contraintes
Après avoir examiné comment créer la structure de la table, nous allons maintenant voir comment définir les colonnes qui structurent les données. Une définition de colonne est composée de trois éléments : le nom de la colonne, son type de données et ses contraintes.
Le choix des types de données appropriés permet d'optimiser les performances de stockage et de requête, par exemple en utilisant le type de données « INT » pour les identifiants numériques ou le type de données « VARCHAR » pour les textes de longueur variable. Des choix inappropriés, tels que l'utilisation inutile de types de données volumineux, peuvent entraîner un gaspillage d'espace et ralentir les requêtes.
Les contraintes garantissent le respect des règles qui assurent la fiabilité et la connectivité de vos données. Par exemple, l'PRIMARY KEY identifie de manière unique chaque ligne, et l'FOREIGN KEY relie les tables afin de maintenir les relations. La contrainte DEFAULT définit des valeurs automatiques, tandis que CHECK garantit que les valeurs répondent à des critères spécifiques.
Veuillez examiner l'exemple ci-dessous, qui présente des contraintes et des types de données clairement définis.
-- Create table syntax with data types and constraints definedCREATETABLE orders (
order_id INTPRIMARYKEY,-- Proper PK
user_id INTNOTNULL,-- Required relationship
total DECIMAL(10,2)NOTNULL,-- Exact monetary valuestatusVARCHAR(20)DEFAULT'new',-- Controlled defaultFOREIGNKEY(user_id)REFERENCES users(user_id)-- Enforce relationship);Propulsé par
La requête suivante présente un exemple de conception de table inadéquate où l'absence de clés et de contraintes, les types surdimensionnés et les choix de données imprécis peuvent entraîner un stockage incohérent ou inefficace.
CREATETABLE orders (
id VARCHAR(50),-- Unnecessary string PKuserVARCHAR(255),-- No relationship enforced
total FLOAT,-- Risky for money calculationsstatusTEXT-- No constraints or defaults);Propulsé par
Il est recommandé de toujours définir explicitement les types de données et les contraintes en fonction de la conception de votre table et des exigences de votre entreprise.
Une fois que vous aurez compris la syntaxe d'CREATE TABLE, je vous montrerai comment concevoir des tableaux qui correspondent aux flux de travail réels.
Exemple de commerce électronique
Supposons que vous souhaitiez créer un système de commerce électronique. Vous disposerez des tables customers, orders et products avec des clés étrangères reliant ces tables afin de garantir les relations et l'intégrité référentielle.
Tout d'abord, veuillez créer la table customers avec le schéma suivant afin de stocker les profils utilisateur :
-- Create customers table to store user profilesCREATETABLE customers (
customer_id INTPRIMARYKEY,
name VARCHAR(150)NOTNULL,
email VARCHAR(255)UNIQUENOTNULL,
created_at TIMESTAMPDEFAULTNOW());Propulsé par
Deuxièmement, la table products aura le schéma suivant pour stocker chaque élément de la plateforme.
-- Create products table for catalog of items for saleCREATETABLE products (
product_id INTPRIMARYKEY,
name VARCHAR(200)NOTNULL,
price DECIMAL(10,2)NOTNULL,-- Accurate money type
stock INTCHECK(stock >=0),-- Prevent negative inventory
created_at TIMESTAMPDEFAULTNOW());Propulsé par
Enfin, vous disposerez de la table orders pour enregistrer les achats effectués par les clients.
-- Create orders tableCREATETABLE orders (
order_id INTPRIMARYKEY,
customer_id INTNOTNULL,-- Link order → customer
order_date TIMESTAMPDEFAULTNOW(),
total_amount DECIMAL(10,2)NOTNULL,FOREIGNKEY(customer_id)REFERENCES customers(customer_id)-- Enforce relationship and ensure customer exists);Propulsé par
Lors de la création de plusieurs tables, veuillez toujours utiliser la contrainte d'intégrité référentielle ( FOREIGN KEY ) pour définir la relation entre une colonne de la table enfant et l'PRIMARY KEY de la table parent afin de garantir l'intégrité référentielle. Dans notre exemple, cette relation garantit qu'il n'est pas possible de passer une commande pour un client qui n'existe pas.
Tables temporaires et tables clonées
Il peut arriver que vous souhaitiez créer un tableau pour une utilisation rapide ou pour tester une transformation de données sans affecter le schéma en production. Dans ce cas, vous pouvez créer une table temporaire ou une table clonée. Examinons comment créer chacun d'entre eux :
Tables temporaires : Il s'agit de tables temporaires, souvent visibles uniquement pour la session de base de données en cours, qui sont automatiquement supprimées à la fin de la session. Ils sont utiles pour les transformations de données complexes, le traitement de données en plusieurs étapes ou les tests. La requête ci-dessous illustre comment créer une table temporaire dans PostgreSQL.
-- Temporary copy for short-term analysisCREATETEMPORARYTABLE temp_sales ASSELECT*FROM sales
WHERE sale_date >=CURRENT_DATE-INTERVAL'7 days';Propulsé par
Tableaux clonés : Il s'agit de copies exactes des tables existantes, y compris les index et les contraintes. Ils sont utiles pour les transactions sensibles où l'intégrité des données doit être préservée lors des modifications.
-- Create quick structural clone for testing or recoveryCREATETABLE orders_backup ASSELECT*FROM orders;Propulsé par
Normalisation et dénormalisation
Lors de la conception de tables, l'équilibre entre normalisation et dénormalisation dépend des cas d'utilisation spécifiques, du volume de données et des modèles de requête afin d'optimiser l'efficacité et la maintenabilité du système. Vous trouverez ci-dessous un résumé des cas dans lesquels chaque méthode doit être utilisée :
Normalisation: Cette méthode consiste à diviser les grandes tables en tables plus petites et liées entre elles, de sorte que chaque élément de données non clé ne soit stocké qu'une seule fois. Ses avantages sont une efficacité améliorée, une redondance minimisée et une maintenance simplifiée.
Dénormalisation: Cela implique l'ajout stratégique de redondances, comme l'inclusion du nom du client sur chaque ligne de commande. Cette méthode améliore les performances de lecture pour des besoins spécifiques en matière de rapports ou d'analyses, en particulier lorsque les jointures sont lentes.
Optimisation et automatisation de la création de tables
Lorsque vous créez des tables pour votre base de données, il est important de tenir compte des performances et de la facilité de maintenance future. D'après ma vaste expérience en conception de bases de données, je considère que les techniques d'optimisation suivantes sont utiles :
Indexation : L'ajout d'index sur les colonnes fréquemment utilisées dans les recherches accélère les requêtes. Lorsque vous définissez l'PRIMARY KEY, un index unique est automatiquement créé.
Partitionnement : Pour les tables volumineuses, le partitionnement divise les données en segments plus petits et plus faciles à gérer, en fonction de critères tels que la date, ce qui améliore l'efficacité des requêtes en limitant la portée de l'analyse.
Colonnes calculées : Certaines bases de données, telles que SQL Server et PostgreSQL, permettent de définir des colonnes calculées qui calculent dynamiquement des valeurs à partir d'autres colonnes. Cette approche peut réduire le stockage redondant des données et améliorer la vitesse des requêtes.
Dans les flux de travail modernes, l'automatisation joue un rôle important dans la conception et la gestion des schémas. Vous pouvez utiliser les outils et requêtes suivants pour documenter, reproduire ou automatiser le processus :
Outil/Méthode
Objectif
Exemple d'application
pg_dump/ Sauvegardes de bases de données
Permet de générer des scripts d'CREATE TABLE à partir d'une base de données existante.
Répliquer un environnement de production à des fins de test ou de migration.
Requêtes sur le schéma d'information
Interroger directement les vues de base de données intégrées INFORMATION_SCHEMA.COLUMNS pour récupérer les métadonnées du schéma.
Automatisation de la documentation ou génération dynamique de code d'application basée sur les définitions de colonnes.
Écrire des routines de base de données qui vérifient si une table existe, la suppriment, puis la recréent (souvent appelé modèle « IF EXISTS » / « CREATE TABLE »).
Automatisation des scripts de déploiement ou de configuration
Pour la planification visuelle, vous pouvez utiliser des outils GUI,tels que pgAdmin, MySQL Workbench ou SQL Server Management Studio, afin de générer des scripts DDL, dessiner des diagrammes de relations et améliorer la collaboration entre les membres techniques et non techniques de l'équipe.
Erreurs courantes et meilleures pratiques
La conception de tables efficaces et faciles à maintenir dans SQL garantit des performances optimales de votre base de données. Voici les conseils que je recommande lors de la création de tables en SQL :
Sur-normalisation : Le fractionnement des tables en plusieurs petits éléments peut compliquer les jointures et ralentir les requêtes, tandis qu'une sous-normalisation peut entraîner une redondance des données. Pour éviter cela, veuillez toujours utiliser initialement la norme 3NF, puis recourir à la dénormalisation uniquement pour les tableaux de rapports spécifiques où la vitesse de lecture est prioritaire par rapport à la simplicité de mise à jour.
Conception inadéquate des contraintes : Si vous ne définissez pas vos contraintes, comme les clés étrangères manquantes, cela peut entraîner des enregistrements orphelins ou des données incohérentes difficiles à nettoyer. Veuillez toujours spécifier un index sur chaque colonne servant d'FOREIGN KEY e afin de garantir la rapidité des jointures.
Dénomination et documentation claires : Veuillez toujours utiliser des noms de tableaux et de colonnes descriptifs et prévisibles. Veuillez maintenir un journal des modifications simple pour les mises à jour du schéma et éviter d'utiliser des abréviations que les futurs développeurs pourraient ne pas comprendre.
Autorisations et considérations relatives à la sécurité : Lors de la conception de tables pour des environnements de production, veuillez n'accorder que les privilèges nécessaires, tels que ceux permettant de créer, modifier ou supprimer des tables, et séparez les accès en lecture et en écriture afin de protéger les données critiques. De plus, mettez en place des contrôles au niveau du schéma et des journaux d'audit pour suivre les modifications, empêcher tout accès non autorisé tout en garantissant la conformité et la sécurité des données.
Conclusion
Grâce aux progrès réalisés dans le domaine des plateformes cloud, l'énoncé « CREATE TABLE » (le monde est notre laboratoire) gagne en flexibilité. Les outils d'automatisation et les fonctionnalités sans serveur simplifient désormais la gestion des schémas et les migrations. Je vous recommande d'approfondir des sujets tels que les frameworks de migration de schémas (Flyway, Liquibase), la modélisation dimensionnelle et les stratégies avancées de normalisation et de dénormalisation afin de vous aider à créer des bases de données évolutives.
Je vous recommande également de suivre notre cours sur la conception de bases de données, dans lequel vous apprendrez à créer et à gérer des bases de données, ainsi qu'à sélectionner le SGBD le mieux adapté à vos besoins. Enfin, nous vous invitons à découvrir notre poste de parcours de carrière d'ingénieur de données associé en SQL cursus pour acquérir les bases de l'ingénierie des données et du stockage des données.
Apprenez l'essentiel de l'architecture d'un entrepôt de données, des composants clés aux meilleures pratiques, pour construire un système de données évolutif et efficace !
Initiez-vous aux structures de données de Python : apprenez-en plus sur les types de données et les structures de données primitives et non primitives, telles que les chaînes de caractères, les listes, les piles, etc.
Gagnez en confiance dans la régression par les MCO en maîtrisant ses fondements théoriques. Découvrez comment réaliser des mises en œuvre simples dans Excel, R et Python.
Découvrez les principales différences, les applications et la mise en œuvre de la normalisation et de la standardisation dans le prétraitement des données pour l’apprentissage automatique.
L'instruction «
CREATE TABLE» constitue la base de toute conception de base de données relationnelle. Il définit les données que vous stockez, leur structure et les règles qui garantissent leur exactitude.Dans ce tutoriel, je vous présenterai les bases de la syntaxe d'
CREATE TABLE, des choix de conception pratiques et des exemples concrets afin de vous aider à créer des tableaux intuitifs et efficaces qui répondent à la fois aux besoins actuels et à la croissance future.Si vous débutez avec SQL, nous vous recommandons de commencerpar notre cours Introduction à SQL ou notre cours SQL intermédiaire afin d'acquérir des bases solides. De plus, je trouve que le document SQL Basics Cheat Sheet, que vous pouvez télécharger, est une référence utile car il contient toutes les fonctions SQL les plus courantes.
Le rôle de CREATE TABLE dans la conception de bases de données
L'instruction «
CREATE TABLE» est la commande principale du langage de définition des données (DDL) qui défine la manière dont vos données sont stockées, organisées et accessibles. Avant de la créer, il est important de déterminer ce que la table représente, comment elle est reliée aux autres tables et comment sa structure facilitera les requêtes futures.La syntaxe de base comprend le nom de la table suivie d'une liste de colonnes, chacune étant définie avec un type de données et des contraintes facultatives. Veuillez examiner la syntaxe ci-dessous :
Où :
schema_name: Espace de noms facultatif pour organiser les tables.table_name: Nom clair et descriptif pour l'entité.column_name: Le nom d'un champ (attribut) dans le tableau.data_type: Définit le format, tel queINT,VARCHARouDATE.constraint: Règles facultatives telles quePRIMARY KEY,NOT NULLouUNIQUE.Cette syntaxe est cohérente sur les principales plateformes SQL telles que MySQL, PostgreSQL et SQL Server, avec seulement quelques différences mineures dans les options avancées. Par conséquent, il est recommandé de respecter des conventions de nommage claires pour les noms de tables et de colonnes afin de garantir la cohérence entre ces plateformes.
Définition des colonnes, des types de données et des contraintes
Après avoir examiné comment créer la structure de la table, nous allons maintenant voir comment définir les colonnes qui structurent les données. Une définition de colonne est composée de trois éléments : le nom de la colonne, son type de données et ses contraintes.
Le choix des types de données appropriés permet d'optimiser les performances de stockage et de requête, par exemple en utilisant le type de données «
INT» pour les identifiants numériques ou le type de données «VARCHAR» pour les textes de longueur variable. Des choix inappropriés, tels que l'utilisation inutile de types de données volumineux, peuvent entraîner un gaspillage d'espace et ralentir les requêtes.Les contraintes garantissent le respect des règles qui assurent la fiabilité et la connectivité de vos données. Par exemple, l'
PRIMARY KEYidentifie de manière unique chaque ligne, et l'FOREIGN KEYrelie les tables afin de maintenir les relations. La contrainteDEFAULTdéfinit des valeurs automatiques, tandis queCHECKgarantit que les valeurs répondent à des critères spécifiques.Veuillez examiner l'exemple ci-dessous, qui présente des contraintes et des types de données clairement définis.
La requête suivante présente un exemple de conception de table inadéquate où l'absence de clés et de contraintes, les types surdimensionnés et les choix de données imprécis peuvent entraîner un stockage incohérent ou inefficace.
Il est recommandé de toujours définir explicitement les types de données et les contraintes en fonction de la conception de votre table et des exigences de votre entreprise.
Je vous recommandede suivre notre cours Introduction aux bases de données relationnelles en SQL afind'apprendre à créer des tables, à appliquer des relations et des contraintes entre les tables.
Conception de tables pour des scénarios réels
Une fois que vous aurez compris la syntaxe d'
CREATE TABLE, je vous montrerai comment concevoir des tableaux qui correspondent aux flux de travail réels.Exemple de commerce électronique
Supposons que vous souhaitiez créer un système de commerce électronique. Vous disposerez des tables
customers,ordersetproductsavec des clés étrangères reliant ces tables afin de garantir les relations et l'intégrité référentielle.Tout d'abord, veuillez créer la table
customersavec le schéma suivant afin de stocker les profils utilisateur :Deuxièmement, la table
productsaura le schéma suivant pour stocker chaque élément de la plateforme.Enfin, vous disposerez de la table
orderspour enregistrer les achats effectués par les clients.Lors de la création de plusieurs tables, veuillez toujours utiliser la contrainte d'intégrité référentielle (
FOREIGN KEY) pour définir la relation entre une colonne de la table enfant et l'PRIMARY KEYde la table parent afin de garantir l'intégrité référentielle. Dans notre exemple, cette relation garantit qu'il n'est pas possible de passer une commande pour un client qui n'existe pas.Tables temporaires et tables clonées
Il peut arriver que vous souhaitiez créer un tableau pour une utilisation rapide ou pour tester une transformation de données sans affecter le schéma en production. Dans ce cas, vous pouvez créer une table temporaire ou une table clonée. Examinons comment créer chacun d'entre eux :
Normalisation et dénormalisation
Lors de la conception de tables, l'équilibre entre normalisation et dénormalisation dépend des cas d'utilisation spécifiques, du volume de données et des modèles de requête afin d'optimiser l'efficacité et la maintenabilité du système. Vous trouverez ci-dessous un résumé des cas dans lesquels chaque méthode doit être utilisée :
Optimisation et automatisation de la création de tables
Lorsque vous créez des tables pour votre base de données, il est important de tenir compte des performances et de la facilité de maintenance future. D'après ma vaste expérience en conception de bases de données, je considère que les techniques d'optimisation suivantes sont utiles :
PRIMARY KEY, un index unique est automatiquement créé.Dans les flux de travail modernes, l'automatisation joue un rôle important dans la conception et la gestion des schémas. Vous pouvez utiliser les outils et requêtes suivants pour documenter, reproduire ou automatiser le processus :
Outil/Méthode
Objectif
Exemple d'application
pg_dump/ Sauvegardes de bases de donnéesPermet de générer des scripts d'
CREATE TABLEà partir d'une base de données existante.Répliquer un environnement de production à des fins de test ou de migration.
Requêtes sur le schéma d'information
Interroger directement les vues de base de données intégrées
INFORMATION_SCHEMA.COLUMNSpour récupérer les métadonnées du schéma.Automatisation de la documentation ou génération dynamique de code d'application basée sur les définitions de colonnes.
FonctionsSQL/Procédures stockées
Écrire des routines de base de données qui vérifient si une table existe, la suppriment, puis la recréent (souvent appelé modèle «
IF EXISTS» / «CREATE TABLE»).Automatisation des scripts de déploiement ou de configuration
Pour la planification visuelle, vous pouvez utiliser des outils GUI,tels que pgAdmin, MySQL Workbench ou SQL Server Management Studio, afin de générer des scripts DDL, dessiner des diagrammes de relations et améliorer la collaboration entre les membres techniques et non techniques de l'équipe.
Erreurs courantes et meilleures pratiques
La conception de tables efficaces et faciles à maintenir dans SQL garantit des performances optimales de votre base de données. Voici les conseils que je recommande lors de la création de tables en SQL :
Sur-normalisation : Le fractionnement des tables en plusieurs petits éléments peut compliquer les jointures et ralentir les requêtes, tandis qu'une sous-normalisation peut entraîner une redondance des données. Pour éviter cela, veuillez toujours utiliser initialement la norme 3NF, puis recourir à la dénormalisation uniquement pour les tableaux de rapports spécifiques où la vitesse de lecture est prioritaire par rapport à la simplicité de mise à jour.
Conception inadéquate des contraintes : Si vous ne définissez pas vos contraintes, comme les clés étrangères manquantes, cela peut entraîner des enregistrements orphelins ou des données incohérentes difficiles à nettoyer. Veuillez toujours spécifier un index sur chaque colonne servant d'
FOREIGN KEYe afin de garantir la rapidité des jointures.Dénomination et documentation claires : Veuillez toujours utiliser des noms de tableaux et de colonnes descriptifs et prévisibles. Veuillez maintenir un journal des modifications simple pour les mises à jour du schéma et éviter d'utiliser des abréviations que les futurs développeurs pourraient ne pas comprendre.
Autorisations et considérations relatives à la sécurité : Lors de la conception de tables pour des environnements de production, veuillez n'accorder que les privilèges nécessaires, tels que ceux permettant de créer, modifier ou supprimer des tables, et séparez les accès en lecture et en écriture afin de protéger les données critiques. De plus, mettez en place des contrôles au niveau du schéma et des journaux d'audit pour suivre les modifications, empêcher tout accès non autorisé tout en garantissant la conformité et la sécurité des données.
Conclusion
Grâce aux progrès réalisés dans le domaine des plateformes cloud, l'énoncé «
CREATE TABLE» (le monde est notre laboratoire) gagne en flexibilité. Les outils d'automatisation et les fonctionnalités sans serveur simplifient désormais la gestion des schémas et les migrations. Je vous recommande d'approfondir des sujets tels que les frameworks de migration de schémas (Flyway, Liquibase), la modélisation dimensionnelle et les stratégies avancées de normalisation et de dénormalisation afin de vous aider à créer des bases de données évolutives.Je vous recommande également de suivre notre cours sur la conception de bases de données, dans lequel vous apprendrez à créer et à gérer des bases de données, ainsi qu'à sélectionner le SGBD le mieux adapté à vos besoins. Enfin, nous vous invitons à découvrir notre poste de parcours de carrière d'ingénieur de données associé en SQL cursus pour acquérir les bases de l'ingénierie des données et du stockage des données.