Autor Beitrag
hansa
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: Fr 25.10.02 12:03 
Hi,

bin gerade Dabei meine DB neu aufzubauen. Dabei ist jetzt folgende Frage aufgetaucht, die schon länger besteht. Die Felder usw. sind schon definiert. Jetzt brauche ich zunächst mal noch Generatoren und Trigger, um die IDs hochzuzählen. Da ich die Generatoren gar nicht so einfach wieder wegbekomme geht es um folgendes : Da taucht manchmal auf "Use existing Generator ?" und ich frage mich wie viele ich überhaupt brauche ? Dachte, für jede Table einen, aber ich kann den Generator ja gar keiner Table zuordnen ! Da könnten doch eventuell alle Tables denselben benutzen. Was spricht dafür und was dagegen ?

Gruß
Hansa
Udontknow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: Fr 25.10.02 12:24 
Natürlich kannst du einen globalen Generator benutzen.

Vorteil:
Jeder Datensatz, dessen PK durch so einen Generator vergeben wurde, ist in der gesamten DB eindeutig, und nicht nur in der Tabelle, wo er sich befindet (kann z.B. beim Thema "Replikation" eine Rolle spielen).

Nachteil:
Du hast dann eben nur einen Generator. Solltest du vorhaben Milliarden von Datensätze in deine DB zu pusten, könntest du an die Grenzen des Generators bzw. deines Primärschlüsselfeldes stossen.

Cu,
Udontknow
hansa Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: Fr 25.10.02 16:45 
Hi,

Zitat:
Milliarden von Datensätze in deine DB zu pusten


Na ja Millionen könnten es schon sein. Am Besten EURO. Erforsche jetzt mal wie viele es sind. :shock:

Gruß
Hansa
hansa Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: Fr 25.10.02 17:00 
Hi,

zuerst lesen dann schreiben. 8) Du meinst also, es gäbe nur ein Problem bei einer Riesen-DB, also dann, wenn die Longint - Grenze überschritten wird ? Und was, wenn das tatsächlich der Fall wäre ?

Gruß
Hansa
hansa Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: So 27.10.02 12:25 
Hi Leute,

habe mir das Thema hier noch mal überlegt. Im Prinzip spräche nichts dagegegen nur einen Generator zu benutzen.

Erste Überlegung : eine Fa. schreibt jeden Tag 500 Rechnungen mit je 100 Pos. und das an 300 Tagen im Jahr. Nach Adam Riese also 15.000.000 Rechnungspos. Das wäre noch weit unter 1 % der möglichen ID-Werte. Lasse die anderen Tabellen jetzt mal außer acht. Diese Fa. würde also in 100 Jahren keinerlei Probleme kriegen, zumindest nicht mit meinem Programm. :mrgreen:

Eine Grenze würde vielleicht ereicht werden bei einem Einwohnermeldeamt für ganz Deutschland. Sollen für jeden Einwohner ein paar Datensätze angelegt werden, so wären wir bei 3 Datensätzen pro Jahr auch erst in ca. 8 Lahren am Ende. Eventuell wäre das dann zu knapp. Immerhin hätte man 8 Jahre Zeit das zu verbessern. 8)

Zweite Überlegung
Bei Verwendung EINES Generators würden die IDs in der DB wie Kraut und Rüben durcheinander stehen. Einer für einen Art., dann 5 für Rechn.Pos., 3 für Kunden, wieder 10 für Rechnungen usw. Im Falle eines Falles würde das meiner Meinung nach Ärger machen. Glaube deshalb, daß es doch besser ist, für jede Tabelle einen eigenen Generator zu benutzen. Vor allem, da dessen Erzeugung gegenüber anderen Geschichten wohl zu vernachlässigen ist. Ich brauche ca. 30 Tables. Die zugehörigen 30 Generatoren zu basteln wäre ein Aufwand von sagen wir mal 30 Min.

Würde mich mal interessieren, was andere darüber denken oder habe ich doch etwas übersehen ?

Gruß
Hansa
Udontknow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: Mo 28.10.02 09:05 
hi!

Zur zweiten Überlegung:

Meinst du damit, das die Benutzer zum Beispiel sowas wie eine Artikel-Nr. haben wollen, und die möglichst durchnummeriert sein sollte? Dann würde ich aber an deiner Stelle lieber ein Extra-Feld "Artikel-Nr" nehmen, der Primärschlüssel sollte nur eine interne Rolle spielen und für die Anwender nie sichtbar sein.

Cu,
Udontknow
LCS
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1305
Erhaltene Danke: 1

WIN 7, WIN 8
Delphi XE5, Delphi XE, Delphi 2007
BeitragVerfasst: Mo 28.10.02 09:31 
Hi
meiner Meinung nach sind getrennte Generatoren für die unterschiedlichen Tabellen die bessere Wahl. Da lässt sich eher mal was zurückstellen als bei einem gemeinsamen Generator für alle Tabellen. Der Aufwand zum Erstellen ist ja nicht der Rede wert.

Gruss Lothar

_________________
Der BH ist für die Brust, der Plan ist für'n Ar...
hansa Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: Mo 28.10.02 09:48 
Hi,

Udontknow hat folgendes geschrieben:
Dann würde ich aber an deiner Stelle lieber ein Extra-Feld "Artikel-Nr" nehmen, der Primärschlüssel sollte nur eine interne Rolle spielen und für die Anwender nie sichtbar sein.


Natürlich habe ich ein Feld Art.Nr. Will jemand sowas durchnummerieren, dann soll er das eben durchnummerieren. :mrgreen: Nehme für jede Tabelle einen eigenen Generator. Falls ich irgendwann mal an den Eingeweiden der DB rumdoktoren muß, ist das wahrscheinlich besser. Bin am überlegen, ob ich nicht sogar einen Before Update Trigger verwenden soll, der eine von Hand geänderte ID wieder zurücksetzt. Es gibt immer Bekannte und "gute Freunde" von Usern, die sich "sehr gut auskennen" und vielleicht sogar glauben, schon mal das Wort IBconsole gehört zu haben.

Gruß
Hansa