Je veux stocker une seule ligne dans une table de configuration pour mon application. Je voudrais faire valoir ce que de ce tableau peut contenir qu'une seule ligne.
Quelle est la façon la plus simple d'appliquer la ligne de contrainte ?
Je veux stocker une seule ligne dans une table de configuration pour mon application. Je voudrais faire valoir ce que de ce tableau peut contenir qu'une seule ligne.
Quelle est la façon la plus simple d'appliquer la ligne de contrainte ?
Vous assurez-vous que l'une des colonnes ne peut contenir qu'une seule valeur, et puis assurez-vous que la clé primaire (ou appliquer une contrainte d'unicité)
CREATE TABLE T1(
Lock char(1) not null,
/* Other columns */,
constraint PK_T1 PRIMARY KEY (Lock),
constraint CK_T1_Locked CHECK (Lock='X')
)
J'ai un certain nombre de ces tables dans différentes bases de données, principalement pour le stockage de config. C'est beaucoup plus agréable de savoir que, si la configuration doit être un int, vous ne pourrez jamais lire un int à partir de la DB.
J'ai l'habitude d'utiliser Damien approche, qui a toujours travaillé très bien pour moi, mais j'ai aussi ajouter une chose:
CREATE TABLE T1(
Lock char(1) not null DEFAULT 'X',
/* Other columns */,
constraint PK_T1 PRIMARY KEY (Lock),
constraint CK_T1_Locked CHECK (Lock='X')
)
En ajoutant le "par DÉFAUT" X"", vous n'aurez plus jamais avoir à traiter avec le Verrou de colonne, et ne pas avoir à vous rappeler quelle était la valeur de verrouillage lors du chargement de la table pour la première fois.
Vous voudrez peut-être repenser cette stratégie. Dans des situations similaires, je l'ai souvent trouvé inestimable de quitter l'ancienne configuration des lignes situées autour de l'information historique.
Pour ce faire, vous avez réellement une colonne supplémentaire creation_date_time
(date/heure de l'insertion ou de mise à jour) et d'un insert ou d'insertion/mise à jour dispositif, ce qui permet de le remplir correctement avec la date/heure actuelle.
Ensuite, afin d'obtenir votre configuration actuelle, vous utilisez quelque chose comme:
select * from config_table order by creation_date_time desc fetch first row only
(en fonction de votre SGBD saveur).
De cette façon, vous obtenez toujours de maintenir l'histoire à des fins de récupération (vous pouvez l'institut procédures de nettoyage si le tableau est trop grand, mais c'est peu probable) et vous obtenez toujours de travailler avec la dernière configuration.
Vous pouvez mettre en œuvre un au LIEU DE Déclencher à appliquer ce type de logique métier dans la base de données.
Le déclencheur peut contenir logique pour vérifier si un enregistrement existe déjà dans la table, et, dans l'affirmative, la RESTAURATION de l'Insert.
Maintenant, en prenant un peu de recul pour regarder le tableau d'ensemble, je me demande si peut-être il y a une alternative et plus appropriée pour vous de stocker cette information, peut-être dans un fichier de configuration ou la variable d'environnement par exemple?
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.