Disons que j'ai deux tables – User et Post
J'ai présenté une table de jointure personnalisée Vote pour avoir une relation plusieurs-à-plusieurs entre l' user et la publication .
Les tables ont la structure suivante:
Remarques:
PK
. UserId
dans la publication est une table FK
vers user . UserId
et PostId
dans la table Vote sont FK
pour les tables respectives. Value
, Content
, Name
, etc. sont varchar. Considérant que la design ci-dessus est appropriée (sinon, les suggestions sont les bienvenues 🙂 …..
Ce que je veux c'est:
UserId
la ligne associée dans Post doit être définie sur NULL. Est-ce que je peux réaliser de telles relations, sans aucune Cyclic-Redundancy
? Si oui, comment?
METTRE À JOUR:
Découvrez cette réponse géniale si vous avez également fait face à plusieurs paths en cascade:
Vous searchz des relations de key étrangère en cascade. Pour les deux premiers:
alter table vote add constraint fk_vote_user foreign key (userid) references user(userid) on delete cascade; alter table vote add constraint fk_vote_post foreign key (postid) references post(postid) on delete cascade;
Pour le troisième:
alter table post add constraint fk_post_user foreign key (userid) references user(userid) on delete set null;
Ceux-ci sont expliqués dans la documentation .
Une façon consiste à append un isdeleted bit, changed datetime
colonnes isdeleted bit, changed datetime
dans chaque table et à utiliser des triggersurs pour mettre à jour les valeurs de colonne lors de la suppression. Dans ce cas, vous conserverez l'historique de vos votes, messages et users.
Ou juste sur les triggersurs de suppression.
Ou pour utiliser la relation en cascade comme Gordon Linoff posté.