J'ai créé cette table pour ma base de données. Comment puis-je insérer un chèque qui ne permet pas d'ajouter une réservation s'il y en a déjà un autre avec le même start_date et le même end_date fin du même emplacement? P> p>
4 Réponses :
Vous devez utiliser le concept de clé principale composite dans la base de données MySQL. Sa désactivation d'insérer des éléments en double dans des colonnes spécifiques.
ALTER TABLE table_name ADD CONSTRAINT constraint_name PRIMARY KEY (Start_Date, End_Date, Location)
Qui répond à la question initiale, mais pas à ses exigences clarrées qu'il ne veut pas de chevauchement
Je crois, cela fonctionne à coup sûr, même le chevauchement a également besoin d'extra donné, mais son travail est fait de la base de données.
@Dayastark Où devrais-je écrire votre morceau de code dans mon exemple? Et évite-t-il la possibilité d'ajouter deux réservations dans la même période pour le même endroit?
son code SQL qui est exécuté dans l'éditeur de requête de Workbench. Vous simplement ajouter des contraintes pour une clé primaire composite unique.
Vous pouvez symboliser une contrainte à la table.
Vous aurez besoin d'un déclencheur pour ça. Regardez le code ci-dessus: p> Le premier insert réussira lorsque le second échouera avec le message d'erreur correspondant si les dates se chevauchent: P> alter Table Réservations Ajouter une contrainte unique_Reservation unique (emplacement, startdate, enddate); P>
SQL Error [31000] [45000]: (conn=10) Unable to insert an overlapping reservation
Puis-je éviter que quelqu'un puisse faire une réservation du 21 au 23 et l'autre fait une réservation du 22 - 24ème pour le même endroit?
Ce n'est pas une syntaxe Postgres valide.
Vous pouvez utiliser une contrainte d'exclusion:
CREATE EXTENSION btree_gist; ALTER TABLE reservation ADD EXCLUDE USING gist ( location WITH =, daterange(start_date, end_date, '[]') WITH && );
Ceci fonctionne dans SQL Server. Je n'ai pas accès pour le moment pour vérifier contre Postgres. Vous devrez exécuter dans deux lots différents après avoir créé votre table
première p> second p>
Pourquoi voudriez-vous seulement vérifier les dates de début / fin exactes plutôt que de tout chevauchement?
Je ne veux pas que 2 utilisateurs différents puissent faire une réservation pour le même endroit dans les mêmes jours
@Alberto - Mais c'est bien si l'on fait une réservation du 21 au 23 et l'autre fait une réservation du 22ème - 24ème? Intéressant assumer des concepts communs de réserves si oui.
@Damien_the_unbeliever Désolé, tu as raison. Je ne veux pas de cette façon que vous avez dit pourrait être possible. Comment pourrais-je éviter cela?
Ceci est probablement répondu ici: Stackoverflow.com/ Questions / 26735955 / ...
Examiner les contraintes de table
Non liée, mais:
unique code> n'est pas nécessaire si vous utilisez également la touche principale
code>
Vous recherchez une contrainte d'exclusion: Postgresql.org/ Documents / actuels / ...