J'ai besoin de quelques suggestions pour implémenter une règle de gestion - que ce soit pour la garder en DB (en utilisant TRIGGERs) ou en code App.Une suggestion de niveau de conception SQL DB et App est nécessaire. Contrainte dans DB ou App?
--- Table structure:---
# ORG - Master table for Organizations
# USER - Master table for Users (each user belongs to an Org so there's a field OrgId which is FK ro ORG)
# SITE - Master table for Sites
# ORGSITE - {OrgId, SiteId} links Site(s) with Org(s)
# USERSITE - {UserId, SiteId} links Site(s) with User(s)
La contrainte est que: « Un site est accessible à un utilisateur que si son accès à son organisation. »
Maintenant, il arrive dans l'application que sur day1 nous relions Site1 à org1 et nous sommes en mesure de relier Site1 à User1 (Utilisateur1 appartient à Org1). Le jour 2, je supprime la relation entre Site1 & Org1 de ORGSITE (cela nécessite que je supprime également la relation User1 & Site1 correspondante de la table USERSITE).
Ceci est géré depuis le code de l'application. Donc, maintenant ma question est là shud je garde la gestion des contraintes ci-dessus -
APPROCHE # 1:
Déployer Déclenche sur la table ORGSITE et table USER qui se chargera de l'activité pour:
sur après pour supprimer ORGSITE (supprimer enregistrements USERSITE correspondants)
Onafter mise à jour pour utilisateur (si l'utilisateur de Ou g est modifié puis supprimez tous ses enregistrements de USERSITE)
APPROCHE # 2:
Poignée tout à l'intérieur du code - appuyez sur les événements qui déclenchent les actions DB et supprimer des enregistrements de USERSITE (en tant que de besoin). Besoin de gérer via une transaction.
APPROCHE # 3:
Simplement, ajouter un nouveau OrgSiteId de champ dans la table de USERSITE qui est un FK ref à un 'Auto Increment PK: Id' de ORGSITE. Ensuite, je vais déployer la suppression en cascade pour le FKS USERSITE.OrgSiteId. Cela va gérer la plupart des choses et le rendre implicite!
Espérons que j'ai bien expliqué. L'APPROCHE N ° 3 va-t-elle vraiment marcher? Si non, quelle est votre préférence et pourquoi?
Nous vous remercions de votre temps.
approche # 3, je pense que le FK peut le rendre beaucoup plus facile et fwd droit (elle impose la contrainte physique v.well). En particulier, le fait que je puisse avoir une relation FK n place (ce qui aide à accélérer l'accès aux données dans les tables JOIN) et gère également la contrainte via sa fonction de relation FK implicite 'suppression en cascade'. –