mixmastertobsi: MySQL Unique Index mit NULL

Hallo,

besteht die Möglichkeit irgendwie einen Unique Index zu erstellen, wenn es auch leere Datenfelder gibt. Es soll also "nur" die eMail Adresse nicht doppelt vorkommen.

Kunden-DB

ID | eMAIL ----------- 1 | test@test.de 2 | test2@test.de 3 | 4 | 5 | test3@test.de
  1. Hallo mixmastertobsi,

    besteht die Möglichkeit irgendwie einen Unique Index zu erstellen, wenn es auch leere Datenfelder gibt. Es soll also "nur" die eMail Adresse nicht doppelt vorkommen.

    Wenn „leer“ bedeutet, dass die Spalte in dem Fall NULL ist: es gilt per Definition, dass NULL <> NULL. Du kannst also ohne Sorgen einen Unique-Constraint auf eine solche Spalte legen.

    Wenn „leer“ bedeutet, dass die Spalte ein Leerstring ist: dafür bräuchtest du expression based indexes, das kann MySQL in der Form nicht.

    LG,
    CK

    -- https://wwwtech.de/about
  2. Hallo,

    besteht die Möglichkeit irgendwie einen Unique Index zu erstellen, wenn es auch leere Datenfelder gibt. Es soll also "nur" die eMail Adresse nicht doppelt vorkommen.

    Kunden-DB

    ID | eMAIL ----------- 1 | test@ 2 | test2@ 3 | 4 | 5 | test3@

    Hm. Die Admins der Stiftung Warentest werden erfreut sein wenn die einschlägigen Bots denen Mails an die von Dir genannten Adressen zustellen wollen:

    ~> host test.de test.de has address 13.80.248.222 test.de mail is handled by 10 sw-proxy01.stiftung-warentest.de. test.de mail is handled by 20 mx.colt.net.

    Mach das einfach nicht wieder. Die Domain "example.com" ist nicht grundlos für sowas vorgesehen

    Es soll also "nur" die eMail Adresse nicht doppelt vorkommen.

    Das so beschriebene Problem löst:

    Table: Kunden

    ID eMailID
    1 1
    2 2
    3 0
    4 0
    5 3

    setze eMailID auf einen normalen Index.

    Table: eMailAdressen

    ID eMail
    0 NULL
    1 foo@example.com
    2 bar@example.com
    3 tok2@example.com

    Hier kannst Du die Spalte ID auf Primary Index, Not Null, Autoinkrement setzen, die Spalte eMail auf Unique.

    1. Hallo ursus,

      löst diese Auslagerung das Problem? Ich verstehe die Frage so, dass in der Kunden-Table keine doppelte Mailadresse vorkommen soll. Analog zur User-Tabelle hier im Forum, wo auch nicht zwei User mit der gleichen Mailadresse registriert sein dürfen. Und dann ist die Auslagerung eigentlich unnötig, das wäre nur bei einer 1:n oder m:n Beziehung zwischen EMail und Kunde von Bedeutung.

      Ob eine duplikatfreie Mailadresse für eine Kundentabelle tatsächlich praxisnah ist, wäre eine andere Frage. Bei einer Tel-Nr würde ich es für falsch halten.

      Rolf

      -- sumpsi - posui - clusi
      1. Ob eine duplikatfreie Mailadresse für eine Kundentabelle tatsächlich praxisnah ist

        Ist auch m:n, also nicht "praxisnah". Mancher benutzt die dienstliche EmailAdresse auch privat. Manche haben in der Firma eine gemeinsame Maildresse. Manche Firmem/Organisationen haben einen gemeinsamen Einkauf, womöglich mit nur einer Maildresse, wollen aber wegen der Lieferadressen und bequemen Kostenzuordung je nach Endabnehmer verschiedene Kundennummern

        Das mögen wenige Fälle sein, aber hat man einen dieserwelchen, so wird das Theater ein großessolches.