Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.net  
   

Die mobilen Seiten von c++.net:
https://m.c-plusplus.net

  
C++ Forum :: Datenbanken ::  Einzelne Werte von Variablen (Zeichenketten, int, ...) in Datenbank speichern     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
AndyDD
Mitglied

Benutzerprofil
Anmeldungsdatum: 27.07.2004
Beiträge: 939
Beitrag AndyDD Mitglied 12:56:48 10.03.2017   Titel:   Einzelne Werte von Variablen (Zeichenketten, int, ...) in Datenbank speichern            Zitieren

Derzeit soll bei uns ein System zur Prüf- und Betriebsmittelerfassung standortübergreifend erstellt werden. Als Datenbank kommt MS SQL Server 2008 zum Einsatz.
Aus Performance-Gründen wird z.B. beim ERP-System die letzte Seriennummer (zusammengesetzte Zeichenkette aus YYYYMMTT+SN+fortlaufende, vierstellige Nummer mit führenden Nullen) separat in der Datenbank abgelegt (hab leider nur noch nicht gefunden wo). Beim Neuanlegen von Aufträgen wird diese Last-Number gezogen und dieser fortlaufende Nummernanteil inkrementiert. Sicher könnte man auch die DB öffnen und die Seriennummern sortieren und sich dann die letzte herausholen, aber es wird halt so wie beschrieben gemacht. Wie speichert man solche Einzelwerte (Integer-Zahlen, Zeichenketten, ...) sinnvoll ab? Mach man dazu eine eigene Tabelle mit nur einem Eintrag oder geht das eleganter? Es muss in die DB, da viele Clients zeitgleich zugreifen, die sich lokal nicht austauschen können (also nur über die DB).

Bin dankbar für jeden Hinweis/Ratschlag. Da wir noch am Anfang vom Design stehen ist noch alles offen
Gast3
Unregistrierter




Beitrag Gast3 Unregistrierter 08:23:53 14.03.2017   Titel:              Zitieren

Zitat:
separat in der Datenbank abgelegt


die Seriennummer ist also schon drinn

Zitat:
Beim Neuanlegen von Aufträgen wird diese Last-Number gezogen und dieser fortlaufende Nummernanteil inkrementiert.


ist also schon implementiert

Zitat:
Sicher könnte man auch die DB öffnen und die Seriennummern sortieren und sich dann die letzte herausholen


ich dachte das wäre schon implementiert - oder doch nicht?

Zitat:
Wie speichert man solche Einzelwerte (Integer-Zahlen, Zeichenketten, ...) sinnvoll ab?


Was meinst du genau - welche Datentypen? damit man schnell zugreifen kann?

Zitat:
Da wir noch am Anfang vom Design stehen ist noch alles offen


also ist doch nich nichts implementiert???

Stell die Frage noch mal ordentlich mit Ist/Soll-Zustand, deine Ideen dazu und was du denkst was daran schlecht ist
AndyDD
Mitglied

Benutzerprofil
Anmeldungsdatum: 27.07.2004
Beiträge: 939
Beitrag AndyDD Mitglied 14:55:06 14.03.2017   Titel:              Zitieren

Ich hatte ja geschrieben das noch nichts implementiert ist. Aber noch mal das Beispiel mit den Seriennummern. Derzeit gibt es z.B. eine Seriennumer 2017SN00235. Wenn man die inkrementiert soll 2017SN00236 rauskommen. Da aber noch andere Seriennummertypen in der gleichen Tabelle vorkommen (z.B. XB00147) kann ich nicht wild sortieren, da ich jeweils für die SN- und XB-Variante die Last-Number brauche. Das ERP-System, was wir verwenden, speichert das aus diesem Grund.
Nächstes Problem: jetzt sollen noch Prüf- und Betriebsmittelnummern kommen, die wie folgt aussehen: RD-QW-A012-U001. Inkrementieren heißt hier einmal, dass aus A012 A013 werden kann bzw. aus U001 U002 wird je nach dem, was gefordert ist. Sortieren ist hier noch schwieriger.
Die Frage stellt sich hier nicht nach dem Sinn oder Unsinn, sondern ob es möglich ist einen einzelnen Wert (Zeichenkette oder int-Wert) direkt abzuspeichern oder muss man da eine Tabelle mit einem Eintrag machen.


Zuletzt bearbeitet von AndyDD am 15:00:01 14.03.2017, insgesamt 1-mal bearbeitet
Schlangenmensch
Mitglied

Benutzerprofil
Anmeldungsdatum: 28.11.2008
Beiträge: 423
Beitrag Schlangenmensch Mitglied 15:53:14 14.03.2017   Titel:   Re: Einzelne Werte von Variablen (Zeichenketten, int, ...) in Datenbank speichern            Zitieren

AndyDD schrieb:
YYYYMMTT+SN+fortlaufende, vierstellige Nummer mit führenden Nullen


Wenn noch nichts implementiert ist würde ich die einzelnen Teile der Seriennummer in einzelne Spalten aufteilen. (Daraus kann man dann ja auch eine zusammengesetzte machen).

Das selbe gilt für die Prüfmittel u.ä. Als Beispiel für den Seriennummer Teil:

Datum Teil der SN | Buchstabenteil | Inkrementierbarer Teil | zusammengesetzt (fals du das extra brauchst) |

Wenn es unterschiedliche Arten von Seriennummern gibt, würde ich die auf verschiedene Tabellen aufteilen.
AndyDD
Mitglied

Benutzerprofil
Anmeldungsdatum: 27.07.2004
Beiträge: 939
Beitrag AndyDD Mitglied 09:46:06 15.03.2017   Titel:   Re: Einzelne Werte von Variablen (Zeichenketten, int, ...) in Datenbank speichern            Zitieren

Schlangenmensch schrieb:
Wenn noch nichts implementiert ist würde ich die einzelnen Teile der Seriennummer in einzelne Spalten aufteilen. (Daraus kann man dann ja auch eine zusammengesetzte machen).


Das ist mir schon soweit klar, jedoch ist das nicht die Frage. Ich will einfach nur wissen ob es geht einen einzelnen Wert (Variable vom Datentyp varchar oder int) losgelöst von einer Tabelle in einer Datenbank abzuspeichern. Das mit den Seriennummern diente nur zur Erklärung.
Th69
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.03.2008
Beiträge: 4692
Beitrag Th69 Mitglied 12:20:56 15.03.2017   Titel:              Zitieren

Eine Datenbank verwaltet nur Tabellen, also mußt du auch für einen Einzelwert eine eigene erstellen (und wenn sie nur aus einer Spalte mit einer Zeile besteht, wie z.B. die DUAL table).
AndyDD
Mitglied

Benutzerprofil
Anmeldungsdatum: 27.07.2004
Beiträge: 939
Beitrag AndyDD Mitglied 08:26:49 16.03.2017   Titel:              Zitieren

Th69 schrieb:
Eine Datenbank verwaltet nur Tabellen, also mußt du auch für einen Einzelwert eine eigene erstellen (und wenn sie nur aus einer Spalte mit einer Zeile besteht, wie z.B. die DUAL table).


Also geht es nicht. Danke für die Antwort, genau das wollte ich ja wissen...
DocShoe
Mitglied

Benutzerprofil
Anmeldungsdatum: 02.04.2008
Beiträge: 2766
Beitrag DocShoe Mitglied 09:31:32 16.03.2017   Titel:              Zitieren

Postgres unterstützt Composite Types, vielleicht kann MSSQL etwas ähnliches.

_________________
Die fünf häufigsten Anzeichen für Faulheit:
1.
muemmel
Mitglied

Benutzerprofil
Anmeldungsdatum: 16.10.2007
Beiträge: 3682
Beitrag muemmel Mitglied 17:58:32 16.03.2017   Titel:              Zitieren

Hi AndyDD,

AndyDD schrieb:
Th69 schrieb:
Eine Datenbank verwaltet nur Tabellen, also mußt du auch für einen Einzelwert eine eigene erstellen (und wenn sie nur aus einer Spalte mit einer Zeile besteht, wie z.B. die DUAL table).


Also geht es nicht. Danke für die Antwort, genau das wollte ich ja wissen...

Ich weiß nicht, warum Du das in der Datenbank speichern willst?
Das ist redundanter Schnuggebutz, der zu Inkonsistenzen führen kann. Alle Angaben dafür liegen doch schon vor. Besser ist es doch, Du baust Dir eine View, die Dir genau die benötigte Zeichenkette zusammensetzt
Bei Access könnte das z.B. so in Etwa aussehen:

select YYYYMMTT_Datum & SN & cstr( FortlaufendeVierstellige + 1 ) as Kennung from Tabelle where FortlaufendeVierstellige = ( select Max( FortlaufendeVierstellige ) as MaxVierstellige from Tabelle )


Und dann eventuell am Besten in einem Trigger oder was Dir Deine DB bieter beim Abspeichern eines neuen Datensatzes setzen.

Gruß Mümmel

_________________
Muemmel ante portas
bekennender Maskulinist der schon länger hier lebt
AndyDD
Mitglied

Benutzerprofil
Anmeldungsdatum: 27.07.2004
Beiträge: 939
Beitrag AndyDD Mitglied 08:11:50 20.03.2017   Titel:              Zitieren

muemmel schrieb:
Hi AndyDD,
Ich weiß nicht, warum Du das in der Datenbank speichern willst?
Das ist redundanter Schnuggebutz, der zu Inkonsistenzen führen kann. ...


Mir ist klar das diese Angaben redundant vorliegen. Das hat Performance-Gründe. Die Tabelle hat ca. 400.000 Einträge, Tendenz steigend. Wenn man hier ständig durch alle Datensätze durchsteppen muss um den Max-Wert zu ermitteln dauert das nun mal. Es ist übrigens auch nicht immer sinnvoll alles bis zur 5. Normalform zu normalisieren. Dies geht oft zu Lasten der Performance. Auch die SAP-Datenbanken sind nicht immer bis zum Erbrechen normalisiert.
Außerdem hab ich kein Access (siehe erste Post) sondern einen ziemlich ausgelasteten MS SQL-Server.

DocShoe schrieb:
Postgres unterstützt Composite Types, vielleicht kann MSSQL etwas ähnliches.


Das gibt's bei MS leider nicht. Ich werd das mit der einen Tabelle mit einem Eintrag realisieren. Scheint mir noch die simpelste Lösung. Ja, es stellt eine Redundanz dar, das nehm ich aber in Kauf wenn ich die Kiste etwas entlasten kann.
C++ Forum :: Datenbanken ::  Einzelne Werte von Variablen (Zeichenketten, int, ...) in Datenbank speichern   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.net ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info und www.c-plusplus.net enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.