AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Race Conditions mit DBs vermeiden
Thema durchsuchen
Ansicht
Themen-Optionen

Race Conditions mit DBs vermeiden

Ein Thema von yankee · begonnen am 1. Jan 2008 · letzter Beitrag vom 4. Jan 2008
Antwort Antwort
Benutzerbild von yankee
yankee

Registriert seit: 10. Mär 2004
1.134 Beiträge
 
Lazarus
 
#1

Race Conditions mit DBs vermeiden

  Alt 1. Jan 2008, 21:41
Datenbank: tut nichts zur Sache ;-) • Zugriff über: nur gedanklich :-P
Hi @ll,

ich habe folgednes Problem:
Eine Datenbank mit 2 Tabellen

Tabelle 1:
id INT
...

Tabelle 2:
tab1id INT
...

Also jeder Datensatz aus Tabelle 2 bezieht sich auf einen Datensatz in Tabelle 1. In Tabelle 2 soll es keine Datensätze geben, deren Feld tab1id sich nicht auf eine id aus der Tabelle 1 bezieht.

Jetzt will ich einen neuen Datensatz in Tabelle 2 einfügen. Die Tabelle 1 enthält aktuell nur einen Datensatz mit der id 42. Auf diesen soll sich der neue Datensatz aus Tabelle 2 beziehen. Mir ist auch klar, dass sich der neue Datensatz in Tabelle 2 auf den Datensatz mit der id 42 aus Tabelle 1 beziehen soll. Also könnte ich den neuen Datensatz einfach einfügen:
INSERT INTO tabelle2 (tb1id) VALUES (42) Jetzt habe ich aber das Problem, dass der Datensatz aus Tabelle 1 längst gelöscht sein könnte. Was tue ich um zu verhindern, dass der neue Datensatz eingefügt wird, wenn der Datensatz aus Tabelle 1 nicht mehr existiert? Einfach vorher nochmal mit
SELECT COUNT(*) FROM tabelle1 WHERE id=42 prüfen, ob der Datensatz noch existiert? Dadurch wird es schonmal extrem unwahrscheinlich, dass ich mir das genannte Problem einhandle, weil der Datensatz aus Tabelle 1 gelöscht werden müsste nachdem ich geprüft habe ob er existiert und bevor ich den neuen Datensatz einfüge.
Eine DB nehmen, die Fremdschlüssel beherscht, diese entsprechend definieren und alle Sorgen los sein?
Letzter Tipp: Drogen. Machen zwar nicht glücklich, geben einem aber wenigstens das Gefühl glücklich zu sein.

Have a lot of fun!
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Race Conditions mit DBs vermeiden

  Alt 1. Jan 2008, 21:49
Solche Abhängigkeiten kann man im Datenbankmodell hinterlegen
Markus Kinzler
  Mit Zitat antworten Zitat
generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.416 Beiträge
 
Delphi XE5 Professional
 
#3

Re: Race Conditions mit DBs vermeiden

  Alt 2. Jan 2008, 07:38
mk wollte sagen: constrains in die datenbank und mit transaktionen arbeiten
Coding BOTT - Video Tutorials rund um das Programmieren - https://www.youtube.com/@codingbott
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: Race Conditions mit DBs vermeiden

  Alt 2. Jan 2008, 09:16
Hallo,

im konkreten Fall "Foreign Key" verwenden
unter Firebird sieht das per SQL dann so aus.

SQL-Code:
Alter Table Tab2 Add Constraint FK_Tab2__Tab2Id
Foreign Key (Tab1Id) References Tab1(Id)

1. Es kann kein Datensatz in Tab2 angelegt werden,
der nicht eine gültige Referenz zu Tab1 besitzt.

2. Es kann kein Datensatz in Tab1 gelöscht werden,
wenn es noch Referenzen in Tab2 gibt.

Für 2. gäbe es noch als Variante

SQL-Code:
Alter Table Tab2 Add Constraint FK_Tab2__Tab2Id
Foreign Key (Tab1Id) References Tab1(Id)
On Delete Cascade
Damit werden beim Löschen in Tab1 Referenzen in Tab2 automatisch gelöscht.


Die Syntax ist bei verschiedenen DBS aber verschieden.


Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#5

Re: Race Conditions mit DBs vermeiden

  Alt 2. Jan 2008, 09:18
Die Möglichkeit, kaskadierend zu löschen, sollte man aber nur einsetzen, wenn man sich das reiflich überlegt hat.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: Race Conditions mit DBs vermeiden

  Alt 2. Jan 2008, 10:07
Hallo,

jepp, das hatte ich vorausgesetzt

Es erleichtert bei Standard-Sachen enorm die Arbeit.

Bsp.
Table Config(Id)
Table Config_Option (Id,ConfigId,OptionName,OptionValueS char)


Lösche ich eine Konfiguration, sollen auch alle Optionen
gelöscht werden. Einfache Aufgabe an eine DB.



Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von yankee
yankee

Registriert seit: 10. Mär 2004
1.134 Beiträge
 
Lazarus
 
#7

Re: Race Conditions mit DBs vermeiden

  Alt 2. Jan 2008, 11:21
ok, danke, so werde ich es dann wohl weiterhin machen.
Mir ist nur aufgefallen, dass das Problem sehr häufig von Entwicklern ignoriert wird. Wenn man nur eine DB ohne Transaktionen zur Verfügung hat, hat man dann ja auch ein Problem .
Letzter Tipp: Drogen. Machen zwar nicht glücklich, geben einem aber wenigstens das Gefühl glücklich zu sein.

Have a lot of fun!
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: Race Conditions mit DBs vermeiden

  Alt 2. Jan 2008, 12:45
Hallo,

ignoriert! jepp!

Ich hatte mich mal mit ein paar Leuten unterhalten,
die hatten mysql (Kann erst ab einer der 4er Transaktionen).

Die sagten "Transaktionen, damit hatten wir uns noch nicht beschäftigt".

Das Dumme ist halt, dass im DB-Unterricht sowas nur am Rande erwähnt wird.


Heiko
Heiko
  Mit Zitat antworten Zitat
generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.416 Beiträge
 
Delphi XE5 Professional
 
#9

Re: Race Conditions mit DBs vermeiden

  Alt 4. Jan 2008, 13:00
das mit mysql ist nicht so schlimm, da eh die version 5 aktuell ist.
um transaktionen und contrains/foreign key nutzen zu können musst du dann den innodb treiber für die tabellen nehmen. der isam treiber tut es nicht!
Coding BOTT - Video Tutorials rund um das Programmieren - https://www.youtube.com/@codingbott
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:55 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz