Benutzer mit den meisten Antworten
SQL-Datenbankaktualisierung / Refresh von Datenbanken

Frage
-
Folgende Situation:
- SQL-Datenbank inkl. Tabellen etc. ist mit Hilfe von Code First und dem Entity Framework erstellt worden (Visual Studio 2015).
- Datensätze wurden hinzugefügt und entfernt.
- Beim Hinzufügen von Datensätzen wird jeweils eine neue ID automatisch vergeben. Wird ein Datensatz entfernt, so wird die damit verbundene ID "unbrauchbar". Wird ein neuer Datensatz angelegt, dann wird die ID automatisch inkrementiert, aber nicht die frei gewordene ID verwendet.
--- --- ---
1. Welche Möglichkeiten gibt es, um in einem bestimmten Zyklus einen refresh der Datenbank vorzunehmen, damit unbenutzte ID's wiederverwendet werden können bzw. wie kann eine "Neuorganisation" der Datenbank inkl. aller Abhängigkeiten angestoßen werden?
1.1 Ist dies auf sehr einfache Weise aus einer Anwendung heraus möglich?
2. Bei den Beispielen zur Datenbankerstellung wird immer der Datentyp int für die ID verwendet. Reicht dieser Datentyp für sehr große Datenmengen aus bzw. welcher andere Datentyp wird in der Praxis verwendet?
- Bearbeitet Katamaran2015 Mittwoch, 23. September 2015 12:55
Antworten
-
Hi,
zu 1. Eine solche Möglichkeit gibt es nicht, es sei denn, Du baust dir selbst etwas. Da es aber nur in den seltensten Fällen und nur bei einer sehr überschaubaren Datenbankstruktur überhaupt ohne Fehler klappen wird und es zudem in keinem mir bekannten Fall auch nur ansatzweise sinnvoll ist, sehe ich es als vergebene Liebesmüh an, sowas zu versuchen.
Zu 1.1. Nö. Das Gegenteil ist der Fall: Es ist sehr aufwändig und macht zudem auch keinen Sinn.
Zu 2. Int geht von ca. -2 Mrd. bis +2 Mrd. Siehe dazu:
https://msdn.microsoft.com/de-de/library/ms187745.aspx
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Montag, 28. September 2015 06:32
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Montag, 5. Oktober 2015 11:22
-
Hi,
die ID ist als interner Identifikationswert gedacht und mir ist bisher kein Fall bekannt, wo eine fortlaufende Nummerierung des Identifikationswertes erforderlich ist. Beschreibe mal, warum Du eine fortlaufende Nummerierung benötigst.Wenn alle Beziehungen bekannt sind, kann man eine Änderung der Identifikationswerte durchführen. Wie Stefan schrieb, kann das aber recht komplex werden, wenn beispielsweise ID's nicht als Fremdschlüsselwert geführt werden oder Trigger auf solche Änderungen reagieren.
Der Datentyp int reicht für die meisten Fälle aus. Alternativ können auch long oder Guid genutzt werden. Damit sind größere Werteumfänge möglich. bei long wird der Wertevorrat nach 100 Jahren erschöpft, wenn pausenlos je Sekunde über eine Milliarden Datensätze hinzugefügt werden. int erschöpft nach 10 Jahren, wenn je Sekunde pausenlos 163 Datensätze hinzugefügt werden. Welche Anwendung macht so etwas?
--
Viele Grüsse
Peter Fleischer (MVP, Partner)
Meine Homepage mit Tipps und Tricks- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Montag, 28. September 2015 06:32
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Montag, 5. Oktober 2015 11:22
Alle Antworten
-
Hi,
zu 1. Eine solche Möglichkeit gibt es nicht, es sei denn, Du baust dir selbst etwas. Da es aber nur in den seltensten Fällen und nur bei einer sehr überschaubaren Datenbankstruktur überhaupt ohne Fehler klappen wird und es zudem in keinem mir bekannten Fall auch nur ansatzweise sinnvoll ist, sehe ich es als vergebene Liebesmüh an, sowas zu versuchen.
Zu 1.1. Nö. Das Gegenteil ist der Fall: Es ist sehr aufwändig und macht zudem auch keinen Sinn.
Zu 2. Int geht von ca. -2 Mrd. bis +2 Mrd. Siehe dazu:
https://msdn.microsoft.com/de-de/library/ms187745.aspx
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Montag, 28. September 2015 06:32
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Montag, 5. Oktober 2015 11:22
-
Hi,
kleiner Nachtrag. Wenn Du nur erreichen willst, dass nach dem Löschen bzw. dem fehlgeschlagenen Insert von Datensätzen die Lücken nicht so groß werden, schau dir mal diesen Thread hier an:
http://stackoverflow.com/questions/21824478/reset-identity-seed-after-deleting-records-in-sql-server
Aber auch hier solltest Du dir bewusst machen, dass es seine guten Gründe hat, warum das Verhalten von Identity Spalten so ist wie es ist.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community -
Hi,
die ID ist als interner Identifikationswert gedacht und mir ist bisher kein Fall bekannt, wo eine fortlaufende Nummerierung des Identifikationswertes erforderlich ist. Beschreibe mal, warum Du eine fortlaufende Nummerierung benötigst.Wenn alle Beziehungen bekannt sind, kann man eine Änderung der Identifikationswerte durchführen. Wie Stefan schrieb, kann das aber recht komplex werden, wenn beispielsweise ID's nicht als Fremdschlüsselwert geführt werden oder Trigger auf solche Änderungen reagieren.
Der Datentyp int reicht für die meisten Fälle aus. Alternativ können auch long oder Guid genutzt werden. Damit sind größere Werteumfänge möglich. bei long wird der Wertevorrat nach 100 Jahren erschöpft, wenn pausenlos je Sekunde über eine Milliarden Datensätze hinzugefügt werden. int erschöpft nach 10 Jahren, wenn je Sekunde pausenlos 163 Datensätze hinzugefügt werden. Welche Anwendung macht so etwas?
--
Viele Grüsse
Peter Fleischer (MVP, Partner)
Meine Homepage mit Tipps und Tricks- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Montag, 28. September 2015 06:32
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Montag, 5. Oktober 2015 11:22