Uhfe: MS-SQL Mehrere Spalten -> Unique

Hallo,

ich hab das Problem, dass ich eine Eindeutigkeit über zwei Spalten einer Tabelle verhindern muss.

Also eine Kundennummer darf in einer Filiale nur einmal auftauchen aber sowohl die Kundennummer als auch die Filiale dürfen natürlich in der Tabelle öfters vorkommen.

Kann mir jemand einen Tip geben?

Thx

Uhfe

  1. Du kannst einen Index über mehrere Spalten anlegen.

    ALTER TABLE Datenbank ADD UNIQUE Schluessel ( filiale , kundennummer )

    MySQL wird sich dann beschweren, wenn eine Kundennummer in einer Filiale schon vergeben ist.

    Natürlich solltest du trotzdem vor einer Eingabe immer die Datenbank abfragen, ob es die Filialen/Kundennummern Kombination schon gibt und das nicht einfach ungeprüft an MySQL schicken.

    1. Hallo,

      Natürlich solltest du trotzdem vor einer Eingabe immer die Datenbank abfragen, ob es die Filialen/Kundennummern Kombination schon gibt und das nicht einfach ungeprüft an MySQL schicken.

      Ist zwar in dem Fall MS-SQL aber das habe ich Programmiertechnisch schon abgefangen. Dachte mir nur, dass ich das auch auf der DB irgendwie hinkriegen muss.

      Thx

      1. Hi,

        Natürlich solltest du trotzdem vor einer Eingabe immer die Datenbank abfragen, ob es die Filialen/Kundennummern Kombination schon gibt und das nicht einfach ungeprüft an MySQL schicken.

        hustel, gerade solche Abfragen machen Systeme kaputt.

        Ist zwar in dem Fall MS-SQL aber das habe ich Programmiertechnisch schon abgefangen. Dachte mir nur, dass ich das auch auf der DB irgendwie hinkriegen muss.

        Du solltest das mit den Mitteln des Datendesigns (DML) bearbeiten und beim Datenzugriff (DML) selbstverstaendlich die Rueckmeldung des RDBMS auswerten. Mit dem zweiten Satz des o.g. Abschnitts hast Du also recht.

        Gruss,
        Ludger

        1. Hi Ludger,

          hustel, gerade solche Abfragen machen Systeme kaputt.

          Warum? Ist IMO nur ein zusätzlicher Roundtrip, kein "Kaputt machen" des Systems. Und eigentlich sollten Eingaben schon bei der Eingabe geprüft werden. Nach den Regeln der Softwareergonomie sollte der Anwender so früh möglich auf Fehleingaben hingewiesen werden.

          Gruß,
          Martin

          1. Hi,

            hustel, gerade solche Abfragen machen Systeme kaputt.

            Warum? Ist IMO nur ein zusätzlicher Roundtrip, kein "Kaputt machen" des Systems.

            wer "zusaetzliche Roundtrips" und unneotige Abfragen auf eine gesamte Tabelle implementiert, "macht das System kaputt".

            Und eigentlich sollten Eingaben schon bei der Eingabe geprüft werden. Nach den Regeln der Softwareergonomie sollte der Anwender so früh möglich auf Fehleingaben hingewiesen werden.

            Nein, geht bei groesseren Datenbasen nich...

            Gruss,
            Ludger

            1. Hi Ludger,

              wer "zusaetzliche Roundtrips" und unneotige Abfragen auf eine gesamte Tabelle implementiert, "macht das System kaputt".

              das ist keine Erklärung. Das System geht dabei nicht "kaputt". Es funktioniert weiterhin.

              Nein, geht bei groesseren Datenbasen nich...

              Es kommt nicht auf die Größe der Datenbank an. Es geht, unabhängig von der Größe.

              Gruß,
              Martin

              1. Hi,

                wer "zusaetzliche Roundtrips" und unneotige Abfragen auf eine gesamte Tabelle implementiert, "macht das System kaputt".

                das ist keine Erklärung. Das System geht dabei nicht "kaputt". Es funktioniert weiterhin.

                Nein, geht bei groesseren Datenbasen nich...

                Es kommt nicht auf die Größe der Datenbank an. Es geht, unabhängig von der Größe.

                wir haben beide recht, OK?   ;-)

                Gruss,
                Ludger

                1. Hi Ludger,

                  das ist keine Erklärung. Das System geht dabei nicht "kaputt". Es funktioniert weiterhin.

                  wir haben beide recht, OK?   ;-)

                  Mir ging es zwar nicht ums Recht haben, sondern darum zu erfahren was du mit "kaputt" meinst, aber wenn du willst, von mir aus.

                  Gruß,
                  Martin

                  1. Hi,

                    das ist keine Erklärung. Das System geht dabei nicht "kaputt". Es funktioniert weiterhin.

                    wir haben beide recht, OK?   ;-)

                    Mir ging es zwar nicht ums Recht haben, sondern darum zu erfahren was du mit "kaputt" meinst, aber wenn du willst, von mir aus.

                    ich bin da gerne bereit zu erlaeutern, was "kaputt" fuer mich bedeutet. Du weisst, was bspw. beim Datendesign (eines RDBMS) eine korrekte Umsetzung bedeutet? Also, dass Sachverhalte auf ihre Entitaeten und deren Beziehungen untereinander zurueckgefuehrt werden?

                    Und da kommen dann immer mal Mitarbeiter (aus welchen Loechern auch immer herausgekrochen) und haben "Ideen". Und zwar eher "wirtschaftlicher" Art, da geht es dann in aller Regel darum, dass eine falsche Implementierung aus rein wirtschaftlichen Gruenden guenstig sein koennte. Und _dagegen_ kann man ja nicht mehr viel einwenden (ist ja ein immer "richtiges" Totschlagargument), es sei denn das Argument "Machs einmal und Du wirst das Machen desselben Fehler immer in Betracht ziehen!" wird anerkannt. Wird es aber oft nicht und die "Duempfe" gewinnen (dank ihrer sozialen Kompetenz) nach und nach die Ueberhand.

                    Ist im Prinzip so wie mit der SPD und Deutschland.   :-(

                    Gruss,
                    Ludger

                    1. Hi Ludger,

                      ich bin da gerne bereit zu erlaeutern, was "kaputt" fuer mich bedeutet. Du weisst, was bspw. beim Datendesign (eines RDBMS) eine korrekte Umsetzung bedeutet? Also, dass Sachverhalte auf ihre Entitaeten und deren Beziehungen untereinander zurueckgefuehrt werden?

                      Ja, und? Wieso macht man dann ein genau dafür gedachtes System "kaputt", wenn man Abfragen macht? Wohlgemerkt, hier geht es nicht um Normalisierung oder die Bildung von logischen/physischen Datenmodellen, sondern um simple Abfragen! Und ob es eine dieser unsäglichen Webapplikationen ist, die ohne Sinn und Not gerade Mode sind wurde auch nicht gesagt.

                      Und da kommen dann immer mal Mitarbeiter (aus welchen Loechern auch immer herausgekrochen) und haben "Ideen". Und zwar eher "wirtschaftlicher" Art, da geht es dann in aller Regel darum, dass eine falsche Implementierung aus rein wirtschaftlichen Gruenden guenstig sein koennte.

                      In deinen Augen mag die Implementierung falsch sein, aber man muss sich auch die zu erwartende Datenmenge vorstellen. Dann können einfachere Lösungen, die eben nicht die reine Lehre darstellen, wirtschaftlich und auch genauso wartbar sein wie tot-optimierte Datenmodelle. Irgendwann muss eine Applikation auch fertig sein, und zum Anwender kommen.

                      Aber Fragen der Implementierungen beantworten auch nicht, wieso Abfragen ein System "kaputt" machen können.

                      Und _dagegen_ kann man ja nicht mehr viel einwenden (ist ja ein immer "richtiges" Totschlagargument), es sei denn das Argument "Machs einmal und Du wirst das Machen desselben Fehler immer in Betracht ziehen!" wird anerkannt.

                      Das Argument ist aber schlecht, denn jedes Problem ist etwas anders als das vorherige. Das wird auch beim momentan modernen Muster-orientierten Entwickeln so gesehen.

                      Ist im Prinzip so wie mit der SPD und Deutschland.   :-(

                      Das ist überflüssig. Wegen solch dämlich pauschalisierender Aussagen ignoriere ich dich auch in der Lounge.

                      Gruß,
                      Martin

                      1. Hi,

                        Ja, und? Wieso macht man dann ein genau dafür gedachtes System "kaputt", wenn man Abfragen macht?

                        wenn eine Abfrage zuviel als natuerlich empfunden wird, dann werden erfahrungsgemaess auch ganz andere Sachen als natuerlich empfunden.

                        Wohlgemerkt, hier geht es nicht um Normalisierung oder die Bildung von logischen/physischen Datenmodellen, sondern um simple Abfragen!

                        OK, ich weiss, das entschuldigt noch einiges hier.

                        Und ob es eine dieser unsäglichen Webapplikationen ist, die ohne Sinn und Not gerade Mode sind wurde auch nicht gesagt.

                        Kennst Du meine Aussagen, dass man bei "Webapplikationen" (UIs also) auch "frickeln" darf?   ;-)

                        Aber Fragen der Implementierungen beantworten auch nicht, wieso Abfragen ein System "kaputt" machen können.

                        Kein Humor, oder was?

                        Und _dagegen_ kann man ja nicht mehr viel einwenden (ist ja ein immer "richtiges" Totschlagargument), es sei denn das Argument "Machs einmal und Du wirst das Machen desselben Fehler immer in Betracht ziehen!" wird anerkannt.

                        Das Argument ist aber schlecht, denn jedes Problem ist etwas anders als das vorherige. Das wird auch beim momentan modernen Muster-orientierten Entwickeln so gesehen.

                        Das Argument ist richtig.

                        Ist im Prinzip so wie mit der SPD und Deutschland.   :-(

                        Das ist überflüssig. Wegen solch dämlich pauschalisierender Aussagen ignoriere ich dich auch in der Lounge.

                        Nein, das ist nicht ueberfluessig, wer keine Systeme versteht, versteht auch keine politischen Systeme.

                        Und wenn Du mir einen Gefallen tun willst, erspare mir Deine trivialen Antworten bitte zukuenftig.

                        Gruss,
                        Ludger

                        1. wenn eine Abfrage zuviel als natuerlich empfunden wird, dann werden erfahrungsgemaess auch ganz andere Sachen als natuerlich empfunden.

                          Die ist nur in deinen Augen zuviel. Du rennst lieber in Fehler rein. Sind halt verschiedene Ansätze.

                          Kennst Du meine Aussagen, dass man bei "Webapplikationen" (UIs also) auch "frickeln" darf?   ;-)

                          Nein, ich lese nur selten Beiträge von dir. Aus gutem Grund, wie sich hier gezeigt hat.

                          Kein Humor, oder was?

                          Dazu hast du bisher zu sehr auf deine "kaputten" Ansichten bestanden.

                          Das Argument ist richtig.

                          Au Backe. Ich hatte jahrelang unter solchen Teamleitern zu leiden, die alles der reinen Lehre nach entwickeln wollten. Mit dem Erfolg, dass die nichts auf die Reihe gekriegt haben, ewig nicht fertig wurden, der kompletten Abteilung Überstunden ohne Ende verschafft haben, die Kunden nicht zufrieden stellen konnten, und jede Version wieder von vorne begonnen wurde. In Schönheit sterben nennt man sowas.
                          Natürlich muss man vorher denken vor dem Implementieren. Aber man muss nicht ständig die Konzepte ändern, oder wie hier leicht umzusetzende und wartbare Konzepte verwerfen, nur weil sie nicht dem neusten Paradigma entsprechen.

                          Nein, das ist nicht ueberfluessig, wer keine Systeme versteht, versteht auch keine politischen Systeme.

                          *g* Wie geht der Spruch mit dem Splitter und dem Balken.

                          Und wenn Du mir einen Gefallen tun willst, erspare mir Deine trivialen Antworten bitte zukuenftig.

                          Keine Bange, dir tue ich keinen Gefallen. Aber wenn du wieder mit falschen Aussagen kommt wie in diesem Thread und ich die zufällig lese, wirst du wohl wieder mit mir zurecht kommen müssen. Achja, und wenn ich Zeit habe.

                          1. Hi,

                            wenn eine Abfrage zuviel als natuerlich empfunden wird, dann werden erfahrungsgemaess auch ganz andere Sachen als natuerlich empfunden.

                            Die ist nur in deinen Augen zuviel. Du rennst lieber in Fehler rein. Sind halt verschiedene Ansätze.

                            wir reden ueber die Abfrage, ob eine bestimmte Wertekombination fuer zwei Datenfelder bereits in der Datenbaktabelle vorliegt. Ist das der Fall, soll dieselbe Wertekombination nicht eingefuegt werden duerfen. Und da kommt man dann eben mit einem Index auf zwei Datenfelder, alles andere ist "Frickeln" - und zwar auf Ebene des Datenzugriffs. Und "Frickeln" ist ja eigentlich nur beim UI erlaubt.

                            Das Argument ist richtig.

                            Au Backe. Ich hatte jahrelang unter solchen Teamleitern zu leiden, die alles der reinen Lehre nach entwickeln wollten.

                            Ich kenne diese Leute auch, das Problem mit denen ist oft, dass sie die reine Lehre nicht gefressen haben, im Gegensatz zu mir. Es gibt "Spielstaerke" im IT-Bereich.   ;-)

                            Mit dem Erfolg, dass die nichts auf die Reihe gekriegt haben, ewig nicht fertig wurden, der kompletten Abteilung Überstunden ohne Ende verschafft haben, die Kunden nicht zufrieden stellen konnten, und jede Version wieder von vorne begonnen wurde. In Schönheit sterben nennt man sowas.

                            Der Schritt zum "sozial kompetenten" Entwickler steht Dir jederzeit offen, und Du bist ihn bereits ganz anscheinend bereits gegangen.

                            Nein, das ist nicht ueberfluessig, wer keine Systeme versteht, versteht auch keine politischen Systeme.

                            *g* Wie geht der Spruch mit dem Splitter und dem Balken.

                            Die SPD versteht das gegebene politische und oekonomische System nicht, das ist offensichtlich.

                            Und wenn Du mir einen Gefallen tun willst, erspare mir Deine trivialen Antworten bitte zukuenftig.

                            Keine Bange, dir tue ich keinen Gefallen. Aber wenn du wieder mit falschen Aussagen kommt wie in diesem Thread und ich die zufällig lese, wirst du wohl wieder mit mir zurecht kommen müssen. Achja, und wenn ich Zeit habe.

                            Deine Dumpfheit werde ich aber auch zukuenftig gerne kritisieren, da kannst Du jaulen so viel Du willst.

                            Gruss,
                            Ludger

                            1. wir reden ueber die Abfrage, ob eine bestimmte Wertekombination fuer zwei Datenfelder bereits in der Datenbaktabelle vorliegt. Ist das der Fall, soll dieselbe Wertekombination nicht eingefuegt werden duerfen. Und da kommt man dann eben mit einem Index auf zwei Datenfelder, alles andere ist "Frickeln" - und zwar auf Ebene des Datenzugriffs. Und "Frickeln" ist ja eigentlich nur beim UI erlaubt.

                              Ist es nicht. Rechne mal was wieviele Bytes bei deinem Ansatz über die Leitung rennen.

                              Ich kenne diese Leute auch, das Problem mit denen ist oft, dass sie die reine Lehre nicht gefressen haben, im Gegensatz zu mir. Es gibt "Spielstaerke" im IT-Bereich.   ;-)

                              LOL! YMMD!

                              Der Schritt zum "sozial kompetenten" Entwickler steht Dir jederzeit offen, und Du bist ihn bereits ganz anscheinend bereits gegangen.

                              Spiel weiter in deiner Liga, ich entwickle Software nicht zum Selbstzweck.

                              Die SPD versteht das gegebene politische und oekonomische System nicht, das ist offensichtlich.

                              Klar, aber du. Jaja. Aber immer wieder nett, wie du deine politischen Ansichten in Fachdiskussionen bringst, wo sie nichts zu suchen haben.

                              Deine Dumpfheit werde ich aber auch zukuenftig gerne kritisieren, da kannst Du jaulen so viel Du willst.

                              Schön, du kannst auch das Wort "dumpf" substantiieren. Hoffentlich war's nicht schwer.

                              1. Hi,

                                wir reden ueber die Abfrage, ob eine bestimmte Wertekombination fuer zwei Datenfelder bereits in der Datenbaktabelle vorliegt. Ist das der Fall, soll dieselbe Wertekombination nicht eingefuegt werden duerfen. Und da kommt man dann eben mit einem Index auf zwei Datenfelder, alles andere ist "Frickeln" - und zwar auf Ebene des Datenzugriffs. Und "Frickeln" ist ja eigentlich nur beim UI erlaubt.

                                Ist es nicht. Rechne mal was wieviele Bytes bei deinem Ansatz über die Leitung rennen.

                                weniger. Aber Du muesierst mich mit dem "Vorziehen" von Permormanceueberlegungen.

                                Der Schritt zum "sozial kompetenten" Entwickler steht Dir jederzeit offen, und Du bist ihn bereits ganz anscheinend bereits gegangen.

                                Spiel weiter in deiner Liga, ich entwickle Software nicht zum Selbstzweck.

                                Vertriebler?

                                Die SPD versteht das gegebene politische und oekonomische System nicht, das ist offensichtlich.

                                Klar, aber du. Jaja. Aber immer wieder nett, wie du deine politischen Ansichten in Fachdiskussionen bringst, wo sie nichts zu suchen haben.

                                Das ist aber durchaus zu vergleichen. Was haeltst Du von der Steuergesetzgebung der SPD, die sich u.a. um "soziale Gerechtigkeit" (Soziale Kompetenz? ;-) bemueht?

                                Deine Dumpfheit werde ich aber auch zukuenftig gerne kritisieren, da kannst Du jaulen so viel Du willst.

                                Schön, du kannst auch das Wort "dumpf" substantiieren. Hoffentlich war's nicht schwer.

                                Wenn ich Dir zurufe "Du Dumpf!", dann ist das einerseits richtig und zudem auch nicht strafbar.

                                Gruss,
                                Ludger

                                1. weniger. Aber Du muesierst mich mit dem "Vorziehen" von Permormanceueberlegungen.

                                  Siehe meinen vorherigen Beitrag in dem ich die Softwareergonomie angesprochen habe.

                                  Vertriebler?

                                  Igitt. Entwickler, vermutlich länger als du schon programmierst.

                                  Das ist aber durchaus zu vergleichen. Was haeltst Du von der Steuergesetzgebung der SPD, die sich u.a. um "soziale Gerechtigkeit" (Soziale Kompetenz? ;-) bemueht?

                                  Ist es nicht, höchstens in deiner Gedankenwelt. Aber ich halte von der SPD insgesamt wenig, aber mehr als von der sozialen Ungerechtigkeit und dem Fischen am rechten Rand der CDU/CSU.

                                  Wenn ich Dir zurufe "Du Dumpf!", dann ist das einerseits richtig und zudem auch nicht strafbar.

                                  Also ich hätte mir meine falsche Verwendung von Fremdwörtern vorgeworfen *g*

                                  1. Hi,

                                    weniger. Aber Du muesierst mich mit dem "Vorziehen" von Permormanceueberlegungen.

                                    Siehe meinen vorherigen Beitrag in dem ich die Softwareergonomie angesprochen habe.

                                    Vertriebler?

                                    Igitt. Entwickler, vermutlich länger als du schon programmierst.

                                    hmm, ich programmiere seit 1979 (Irgendwie bereits seit 1974, aber das ist eine andere Geschichte ;-).

                                    Das ist aber durchaus zu vergleichen. Was haeltst Du von der Steuergesetzgebung der SPD, die sich u.a. um "soziale Gerechtigkeit" (Soziale Kompetenz? ;-) bemueht?

                                    Ist es nicht, höchstens in deiner Gedankenwelt. Aber ich halte von der SPD insgesamt wenig, aber mehr als von der sozialen Ungerechtigkeit und dem Fischen am rechten Rand der CDU/CSU.

                                    Gut, aber Du musst ja auch _fuer_ irgendetwas sein.

                                    Wenn ich Dir zurufe "Du Dumpf!", dann ist das einerseits richtig und zudem auch nicht strafbar.

                                    Also ich hätte mir meine falsche Verwendung von Fremdwörtern vorgeworfen *g*

                                    Leidensfaehig bist Du also auch.

                                    Gruss,
                                    Ludger

                                    --
                                    "Schwul aber hoffentlich nicht, sonst muesste ich Dich an Gernot verweisen."
  2. Hallo,

    Also eine Kundennummer darf in einer Filiale nur einmal auftauchen aber sowohl die Kundennummer als auch die Filiale dürfen natürlich in der Tabelle öfters vorkommen.

    Ich hoffe aber nicht, dass das Deine Kundentabelle ist?

    Kann mir jemand einen Tip geben?

    Lege einen uniquen Index über _beide_ Spalten an.

    In SQL (mit MSSQL kenne ich mich nicht aus, der sollte aber soviel SQL beherrschen): CREATE UNIQUE INDEX name_des_index ON tabelle (spalte1, spalte2);

    Eventuell willst Du beide Spalten auch als PRIMARY KEY verwenden, in dem Fall brauchst Du nicht explizit den Index anzulegen:

    CREATE TABLE tabelle (  
       feld1 TYP,  
       feld2 TYP,  
       ...  
       feldX TYP,  
       PRIMARY KEY (feld1, feld2)  
    );
    

    Viele Grüße,
    Christian

    1. Hallo,

      danke für die Antworten!

      Uhfe

    2. Hi,

      Eventuell willst Du beide Spalten auch als PRIMARY KEY verwenden, in dem Fall brauchst Du nicht explizit den Index anzulegen:

      von kombinierten Primaerschluesseln ist abzuraten. PKs sollten zudem semantikfrei sein.

      Gruss,
      Ludger

      1. Eventuell willst Du beide Spalten auch als PRIMARY KEY verwenden, in dem Fall brauchst Du nicht explizit den Index anzulegen:

        von kombinierten Primaerschluesseln ist abzuraten.

        Warum?

      2. yo,

        von kombinierten Primaerschluesseln ist abzuraten. PKs sollten zudem semantikfrei sein.

        ein PK über zwei spalte zu bilden hat afaik nichts mit semantik (natürliche schlüssel) zu tun. es könnte sich zum beispiel um eine beziehungstabelle handeln, wo die künstlichen primärschlüssel zweier entitäten zusammen einen PK bilden.

        Ilja

        1. Hi,

          von kombinierten Primaerschluesseln ist abzuraten. PKs sollten zudem semantikfrei sein.

          ein PK über zwei spalte zu bilden hat afaik nichts mit semantik (natürliche schlüssel) zu tun.

          das ging auch aus meinem Beitrag ansatzweise hervor, zumindest bestand kein Bedarf irgendwie zu "korrigieren".

          es könnte sich zum beispiel um eine beziehungstabelle handeln, wo die künstlichen primärschlüssel zweier entitäten zusammen einen PK bilden.

          Ich kenne dieses Argument, erfahrungsgemaess ist aber ein nichtkombinierter Primaerschluessel immer wesentlich besser zu handeln als ein kombinierter.

          Gruss,
          Ludger