Announcement

Collapse
No announcement yet.

Produktdatenbank mit Daten aus der Warenwirtschaftsdatenbank füttern

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Produktdatenbank mit Daten aus der Warenwirtschaftsdatenbank füttern

    Hallo liebe Community,

    ich bin der neue und komme jetzt öfter :-P

    Ich hab im Moment folgendes Projekt:

    Unser Warenwirtschaftssystem (C-entron) basiert auf einer MS SQL Datenbank, welche mehr schlecht als recht normaliesert ist. Scheinbar let Centron von seinen Redundanzen. Aus dieser Datenbank, genauer gesagt aus der Rechnungstabelle, möchte ich nun die verkauften Produkte raus ziehen und in eine Tabelle in einer neuen Datenbank, in normalisierter Form "kopieren" und einem Kunden zuweisen. Die Kundendaten möchte ich ebenfalls aus der C-entron-Datenbank in die neue, ebenfalls auf MS SQL basierende, Datenank einpflegen.

    Die neue Datenbank soll sich mit der C-entron-Datenbank synchronisieren, so dass neue Kunden aus dem Warenwirtschaftssystem auch gleich automatisch in die neue Datenbank eingepflegt werden.

    Da sich meine SQL-Erfahrungen bisher nur auf die Basics von MySQL und Oracle SQL beschränken, wäre es gut wenn ihr mir ein paar Tipps geben könntet.
    Ich weiß zum Beispiel noch nicht, wie ich Datensätze ohne größeren Aufwand aufsplitten kann und auf mehrere Tabellen verteilen kann und wie ich das auch noch so automatisieren kann, dass sich die neue Datenbank mindestens einmal täglich updatet, oder besser noch Änderungen sofort erkennt
    und diese direkt einpflegt.

    An der C-entron Datenbank darf ich natürlich nichts verändern, unsere Technik ist nicht sonderlich begeistert wenn Backups eingespielt werden müssen weil unser Warenwirtschaftssystem nicht mehr funktioniert :-P.

    LG und danke schonmal im Forraus,

    Markus
    Zuletzt editiert von MFL; 20.11.2012, 15:01.

  • #2
    Originally posted by MFL View Post
    Hallo liebe Community,

    ich bin der neue und komme jetzt öfter :-P
    Na denn, willkommen!

    Deine Fragen sind sehr allgemein.
    Brauchst Du SQL Hilfe? (Merge, Upsert, ..)
    Brauchst Du Tips zur geeigneten Umgebung? (ETL, scheduling, ..)
    Datenmodell ?

    Gegenfragen: Welche MSSQL Version nutzt Du und mit welchem Verfahren möchtest Du die Prod.Daten abgreifen?
    Wie sieht die Tabellenstruktur der relevanten Daten auf Prodseite aus?
    Wie sieht Dein normalisiertes Modell aus?
    Gruß, defo

    Comment


    • #3
      Guten Abend,

      also ich verwende einen MS SQL Server 2005 und das SQL Server Management Studio.
      Ein Bild von der Tabellenstruktur und den Referenzen werde ich morgen rein stellen, da ich mir da noch nicht zu 100% sicher in, wie das ganze aussehen soll.

      Tut mir Leid das die Fragen nicht sehr präzise waren, aber war heute Nachmittag noch am Basteln und am Informationen raussuchen. Ich wusste noch nicht welche
      Problem genau auf mich zu kommen.

      Wichtig wäre es jetzt für mich zu wissen, ob es möglich ist, mit einen FK auf eine Tabelle(A) in einer anderen Datenbank(B) zuzugreifen, oder noch eleganter ob es möglich ist mit einer Routine (am besten einen Trigger) nur Bestimmte Felder aus einer Tabelle(B) in die Tabelle(A) zu importieren.

      Ich hoffe ich habe es geschafft meine Frage ein wenig präzise rüberzubringen.

      LG und einen schönen Abend,

      Markus

      Comment


      • #4
        Ich hoffe ich habe es geschafft meine Frage ein wenig präzise rüberzubringen.
        Zumindest so präzise das man eine allgemeine Antwort geben kann.

        Wenn FK ForeignKey meint dann nein das geht nicht datenbankübergreifend. Müsstest du über einen Trigger lösen. Und natürlich kann man aus in einem Trigger eine andere Tabelle(oder Tabellen), auch wenn die in einer anderen Datenbank liegt, updaten.

        Comment


        • #5
          Originally posted by Ralf Jansen View Post
          Wenn FK ForeignKey meint dann nein das geht nicht datenbankübergreifend. Müsstest du über einen Trigger lösen. Und natürlich kann man aus in einem Trigger eine andere Tabelle(oder Tabellen), auch wenn die in einer anderen Datenbank liegt, updaten.
          Ein Trigger bedeutet aber die Manipulation des Prodsystems. Ist das erlaubt (Lizenz, Support)? Vielleicht steckt man erstmal ab, welchen Spielraum man hat. Mglw. eher nur lesenden Zugriff?
          Gruß, defo

          Comment


          • #6
            ja, mit FK meine ich Foreign Key.

            Danke schonmal für eure Antworten.

            Ich werde das erstmal in einer Testumgebung ausprobieren und mit dem Support von c-entron sprechen.
            Ansonsten habe ich grünes Licht.

            Was mir gerade auch noch in den Sinn kam, wäre eine Transaktion,
            damit habe ich mich aber bisher nur ansatzweise beschäftigt.
            Wäre das eine Möglichkeit daten von einer Datenbank in die andere zu schaufeln,
            in wie weit würde ich die Stammdatenbank damit manipulieren und
            lässt sich eine Transaktion automatisch ausführe? Wahrscheinlich nicht, oder?

            Hier Nochmal das Diagramm von der Datenbank.
            Für Verbesserungorschläge habe ich ein offenes Ohr.
            Datenbankdiagramm.jpg
            Zuletzt editiert von MFL; 21.11.2012, 10:45.

            Comment


            • #7
              Verbesserungsvorschlag wäre ein eindeutiges Namensschema. Also wie benennt man insbesondere Tabellen (Singular oder Plural, Begriffstrennung durch Unterstriche oder Camelcasing) und Spalten (Eindeutiger Aufbau für PK's und FK's also das die z.B. nach Tabellenname+'ID' benannt werden und somit auch erkennbar in den verschiedenen Tabellen zusammengehören wenn man den Namen sieht). Daneben wäre vielleicht eine Rechtschreibprüfung angebracht.

              Comment


              • #8
                Eine Transaktion ist in der DB Welt ein eigenständiger Begriff und hat nicht die Bedeutung wie bspw in der Finanzwelt.
                Gewollt oder nicht, ein echtes RDBMS arbeitet immer mit Transaktionen.

                Mögliches vorsichtiges Vorgehen:
                alle benötigten Tabellen komplett auslesen (aus Prod) und einlesen in Zwischentabellen des Zielsystem:
                Hier zerlegen, filtern, abgleichen mit Zieltabellen.
                Update in Zieltabellen
                Einfügen in Zieltabellen

                Dieses Vorgehen kann man zweifellos verfeinern.
                Ist der Datenbestand hoch?
                Gruß, defo

                Comment


                • #9
                  @defo: Ja der Datenbestand ist hoch. In wie weit meinst Du kann man das verfeinern?

                  @Ralf Jensen: Ich musste ein wenig schmunzeln als ich das mit der Rechtschreiprüfung gelesen habe.
                  Keine sorge, in der Datenbank ist alles richtig geschrieben, nur ei dem Schauild habe ich mich verhackt.

                  Comment


                  • #10
                    Ich musste ein wenig schmunzeln als ich das mit der Rechtschreiprüfung gelesen habe
                    Dann ist es richtig angekommen Bei solchen Hinweisen muss man ja immer Angst haben als Rechtschreibnazi tituliert zu werden.


                    Ist der Datenbestand hoch?
                    Ja der Datenbestand ist hoch
                    Ich scheint euch ja zu verstehen. Wie hoch ist denn hoch hier? Und wie groß ist die Änderungswahrscheinlichkeit von Altdaten? Wenn sich Altdaten nicht ändern gibt es da sicher ~Verfeinerungspotential~.

                    Comment


                    • #11
                      ~Verfeinerungspotential~.
                      Ich habe lediglich einen konkreten Vorschlag liefern wollen, um von soetwas wie "wir könnten ja Transaktionen nehmen" wegzukommen.
                      Dieser konkrete Vorschlag könnte ein Ausgangspunkt sein und lässt sich eben noch verfeinern. Das ist erstmal alles.

                      Konkreter/feiner könnte man werden, wenn Du z.B. rausrückst, wieviel bei dir viel ist!
                      Gruß, defo

                      Comment


                      • #12
                        mmhh.. bin neu hier und kenne C-entron nicht welche Bedingungen / Einschränkungen du da hast, was du darfst oder nicht darfst (ich wär z.B. etwas angefressen, wenn jemand 'bei mir in den Eingeweiden' wildert...)

                        Aber mal so unter uns: Zweis MSSQL Datenbanken? Das können meinetwegen verschiedene Server sonstwo sein.... die 'sehen' sich doch!

                        Natürlich muss man schauen was im konkreten Fall geht oder ratsam ist- und ggf. auch mal Testen (ist immer gut - es gibt immer mal einen Grund warum und wiso etwas geht oder nicht zu empfehlen ist....)


                        Aber im Prinzip kannst du eine Sicht erstellen , einen Trigger , einen Trigger auf die Sicht usw.. und das sind nur die reinen SQL-Lösungen... meinst du das ?

                        also zum Beispiel: select sonstwas from db1.dbo.tabelle ... wobei hier db1 der Name der Datenbank ist ...

                        Comment


                        • #13
                          Originally posted by Ralf Jansen View Post
                          Dann ist es richtig angekommen Bei solchen Hinweisen muss man ja immer Angst haben als Rechtschreibnazi tituliert zu werden.
                          Nein keine Sorge, wenn ich schnell was in die Tasten hacke, passiert das häufiger, von daher bin ich das gewohnt ;-)



                          Originally posted by Ralf Jansen View Post
                          Ich scheint euch ja zu verstehen. Wie hoch ist denn hoch hier? Und wie groß ist die Änderungswahrscheinlichkeit von Altdaten? Wenn sich Altdaten nicht ändern gibt es da sicher ~Verfeinerungspotential~.
                          Also, es sind 20k Datensätze, von denen aber noch selektiert wird, welche in die neue DB übernommen werden. Da sind bestimmt 10% bis 20% Altdaten die als Karteileichen die Centron-DB besiedeln. Wenn aber neue Kunden angelegt werden, soll das ein Trigger erkennen und die neuen Kundendaten direkt in meine DB exportieren.
                          Dafür habe ich jetzt erstmal die Datenbank kopiert und in eine Testumgebung geschoben. Mein Datenbankmodell, welches ich euch hier gezeigt habe, ist auch schon wieder veraltet, die Wünsche wachsen i-wie schneller als ich mit entwickeln nachkomme.

                          Comment


                          • #14
                            So liebe Freunde,

                            ich habe doch noch einmal eine konkrete Frage.
                            Es geht sich um folgendes:
                            Ich würde gerne bei jeden Tabelleneintrag mit Hilfe einer Sequenz die ID hochzählen.
                            Folgendes habe ich versucht:
                            Code:
                            INSERT INTO dbo.Tabelle (ID_Tabelle,Feld1,Feld2) values(dbo.ID_Zaehler.nextval,value_Feld1,value_Feld2);
                            Hier kam folgende Fehlermeldung:
                            "Meldung 4104, Ebene 16, Status 1, Zeile 1
                            Der mehrteilige Bezeichner 'dbo.ID_Zaehler.nextval' konnte nicht gebunden werden.
                            "

                            und folgendes:
                            Code:
                            INSERT INTO dbo.Tabelle (ID_Tabelle,Feld1,Feld2) values(max(ID_Tabelle)+1,value_Feld1,value_Feld2);
                            Hier kam folgende Fehlermeldung:
                            "Meldung 207, Ebene 16, Status 1, Zeile 1
                            Ungültiger Spaltenname 'ID_Tabelle'."


                            Der Code für die Sequenz sieht folgendermaßen aus:
                            Code:
                            CREATE SEQUENCE dbo.ID_Zaehler 
                             START WITH 1
                             INCREMENT BY 1;
                            Habt ihr eine Idee wie ich es umsetzten kann, dass die ID automatisch hoch gezählt wird oder was meine Fehler waren?
                            Zuletzt editiert von MFL; 27.11.2012, 12:10.

                            Comment


                            • #15
                              Ich dachte du benutzt den SQL Server?

                              Der 2012 kennt zwar Sequences aber das ist echt SQL Server untypisch vorgehen. Dort verwendet man üblicherweise Autoincrement Felder. Also mache aus ID_Tabelle eine Autoincrement Feld und gib es beim Insert einfach nicht an. Der Rest läuft dann automatisch.
                              Wenn du explizit Sequenzen verwenden willst benutzte den Syntax des SQL Servers (NEXT VALUE FOR) und nicht den irgendeiner anderen Datenbank(nextval).

                              Comment

                              Working...
                              X