2016-04-07 19 views
0

Ich habe eine data drivenASP Anwendung. Und wie die meisten data driven Anwendungen habe ich eine Users Tabelle und ein CreatedBy Feld in den meisten Tabellen.Benutzer Tabelle mit anderen Entitäten/Tabellen verknüpfen

Ich versuche, eine DeleteUserFunction in meiner Anwendung zu erstellen. Bevor ich einen Benutzer lösche, muss ich jede einzelne Tabelle überprüfen, um festzustellen, ob dieser Benutzer Datensätze erstellt hat.

Durch den Aufbau von Beziehungen zwischen der Tabelle users und den übrigen Datenbanktabellen kann die DeleteUserFunction einfacher validiert werden.

Daher versuche ich herauszufinden, ob eine users-Tabelle explizit mit anderen Tabellen verknüpft werden muss (über Fremdschlüssel constaints) oder in der Geschäftslogik der Anwendung behandelt werden muss.

Antwort

1

Zuerst müssen Ihre funktionalen Anforderungen geklärt werden. Was passiert, wenn ein Benutzer gelöscht wird?

1 User may not get deleted if records linked to her are present. 
2 User may be deleted, and 
    2.1 all records linked to her stay present, without link to that user, 
    2.2 all records linked to her must be deleted as well. 

Ein Fremdschlüssel kann 1 und 2.2, unterstützt aber nicht 2.1, weil es den Benutzer Fremdschlüssel in der verweisenden Datensatz nicht ändern wird.

Die Verwendung einer Fremdschlüsseleinschränkung als einzige Möglichkeit, dies zu erzwingen, kann jedoch zu einer seltsamen Softwarestruktur und Benutzererfahrung führen. In allen Fällen wird die Verletzung der Einschränkung von der Datenbank erkannt und führt standardmäßig zu einer Ausnahme im Datenzugriffsmodul. Aber wahrscheinlich wollen Sie nicht, dass Ihre Anwendung mit einer Ausnahme abstürzt, sondern teilen Sie Ihrem Benutzer mit, dass diese Funktion nicht verfügbar ist (Fall 1) oder eine Anwendungsfunktion auslöst (in den Fällen 2.1, 2.2). Dies würde bedeuten, dass die Ausnahme in der Software weitergegeben wird, bis die richtige Schicht zum Behandeln des Falls erreicht ist.

Daher würde ich empfehlen, die notwendigen Prüfungen durchzuführen, um herauszufinden, ob das Löschen legal ist und die logischen Konsequenzen als Teil der Anwendungslogik auszulösen. Die Fremdschlüsseleinschränkung kann immer noch nützlich sein, um Anwendungsfehler während Tests zu erkennen.

+1

Um Ihre Frage zu klären, wenn ein Benutzer nur Option 1 gelöscht wird, gilt wie oben: '1 Benutzer kann nicht gelöscht werden, wenn mit ihr verknüpfte Datensätze vorhanden sind. Option 2.1 macht nicht wirklich, da es keine gibt Möglichkeit herauszufinden, wem die ID gehört. – JustLearning

+2

Okay, wahrscheinlich wird es Ihren Benutzern gefallen, dass Ihnen gesagt wird, ob das Löschen möglich ist, bevor Sie auf Löschen klicken und eine Nachricht erhalten, dass sie dies nicht tun sollten. Dies kann nur über die Anwendungslogik erfolgen, da Sie die Löschschaltfläche vor jeder Benutzeraktion ausblenden oder ungültig machen müssen. Sie möchten das Löschen in der Datenbank nicht auslösen (Auslösen der Fremdschlüsselausnahme), nur um dies zu tun. Dies erfordert eine Anwendungsfunktion, die die Datenbank nach vorhandenen Datensätzen für diesen Benutzer abfragt. – TAM

Verwandte Themen