tag:forum.selfhtml.org,2005:/selfMySQL Unique Index mit NULL – SELFHTML-Forum2019-01-11T13:32:06Zhttps://forum.selfhtml.org/self/2019/jan/11/mysql-unique-index-mit-null/1740452#m1740452mixmastertobsi2019-01-11T12:07:34Z2019-01-11T12:07:34ZMySQL Unique Index mit NULL<p>Hallo,</p>
<p>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.</p>
<p>Kunden-DB</p>
<pre><code class="block language-html">
ID | eMAIL
-----------
1 | test@test.de
2 | test2@test.de
3 |
4 |
5 | test3@test.de
</code></pre>
https://forum.selfhtml.org/self/2019/jan/11/mysql-unique-index-mit-null/1740453#m1740453Christian Krusehttps://wwwtech.de/about2019-01-11T12:11:03Z2019-01-11T12:11:03ZMySQL Unique Index mit NULL<p>Hallo mixmastertobsi,</p>
<blockquote>
<p>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.</p>
</blockquote>
<p>Wenn „leer“ bedeutet, dass die Spalte in dem Fall <code>NULL</code> ist: es gilt per Definition, dass <code>NULL <> NULL</code>. Du kannst also ohne Sorgen einen Unique-Constraint auf eine solche Spalte legen.</p>
<p>Wenn „leer“ bedeutet, dass die Spalte ein Leerstring ist: dafür bräuchtest du expression based indexes, das kann MySQL in der Form nicht.</p>
<p>LG,<br>
CK</p>
<div class="signature">-- <br>
<a href="https://wwwtech.de/about" rel="noopener noreferrer">https://wwwtech.de/about</a>
</div>
https://forum.selfhtml.org/self/2019/jan/11/mysql-unique-index-mit-null/1740455#m1740455ursus contionabundo2019-01-11T12:23:02Z2019-01-11T12:38:12ZMySQL Unique Index mit NULL<blockquote>
<p>Hallo,</p>
<p>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.</p>
<p>Kunden-DB</p>
<pre><code class="block language-html">
ID | eMAIL
-----------
1 | test@
2 | test2@
3 |
4 |
5 | test3@
</code></pre>
</blockquote>
<p>Hm. Die Admins der Stiftung Warentest werden erfreut sein wenn die einschlägigen Bots denen Mails an die von Dir genannten Adressen zustellen wollen:</p>
<pre><code class="block">~> 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.
</code></pre>
<p><strong>Mach das einfach nicht wieder. Die Domain "example.com" ist nicht grundlos für sowas vorgesehen</strong></p>
<blockquote>
<p>Es soll also "nur" die eMail Adresse nicht doppelt vorkommen.</p>
</blockquote>
<p>Das so beschriebene Problem löst:</p>
<p>Table: Kunden</p>
<p>ID | eMailID
1 | 1
2 | 2
3 | 0
4 | 0
5 | 3</p>
<p>setze eMailID auf einen normalen Index.</p>
<p>Table: eMailAdressen</p>
<p>ID | eMail
0 | NULL
1 | foo@example.com
2 | bar@example.com
3 | tok2@example.com</p>
<p>Hier kannst Du die Spalte <code>ID</code> auf Primary Index, Not Null, Autoinkrement setzen, die Spalte <code>eMail</code> auf Unique.</p>
https://forum.selfhtml.org/self/2019/jan/11/mysql-unique-index-mit-null/1740459#m1740459Rolf B2019-01-11T13:02:09Z2019-01-11T13:02:09ZMySQL Unique Index mit NULL<p>Hallo ursus,</p>
<p>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.</p>
<p>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.</p>
<p><em>Rolf</em></p>
<div class="signature">-- <br>
sumpsi - posui - clusi
</div>
https://forum.selfhtml.org/self/2019/jan/11/mysql-unique-index-mit-null/1740466#m1740466ursus contionabundo2019-01-11T13:32:06Z2019-01-11T13:32:06ZMySQL Unique Index mit NULL<blockquote>
<p>Ob eine duplikatfreie Mailadresse für eine Kundentabelle tatsächlich praxisnah ist</p>
</blockquote>
<p>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</p>
<p>Das mögen wenige Fälle sein, aber hat man einen dieserwelchen, so wird das Theater ein großessolches.</p>