Char/VChar-Feld unique setzen

Char/VChar-Feld unique setzen

am 01.06.2006 08:17:24 von stephan.krebs

Hallo,

ich habe eine bestehende mysql 4.01 DB und verwende MySQL Front und
ASP/ASP.NET

Ich möchte in einer Tabelle sicherstellen, dass in einem Char-Feld nur
eindeutige Werte stehen (Keine Duplikate). Es gibt neben o.g. Feld auch
ein eindeutiges ID Feld und andere Felder
(Nummerisch/Chars/Datumfelder)

Beispiel:
Tabellenname: tblMitarbeiter
Feld: mitarbeiter_id (Autowert)
Feld: mitarbeiter_kennung (char Feld und soll unique werden)
Feld: mitarbeiter_eintritt (datum)
Feld: mitarbeiter_vorname (char)
usw.

In MySQL-Front ist bei o.g. Char-Feld die Eigenschaft "Unique" nicht
anklickbar.

Also per SQL - Habe folgendes versucht:

create unique index mitarbeiter_kennung on tblMitarbeiter
(mitarbeiter_kennung,mitarbeiter_id);

Habe jetzt in MSQL-Front mitarbeiter_id (gelb + i) und
mitarbeiter_kennung (gelb + u)
kann aber trotzdem munter gleiche Kennungen eingeben z.B: 3x "AH2918B".


1 Ist es möglich und wenn ja mit welchem SQL das CHAR-Feld auf Unique
zu setzen.

2 Spricht etwas dagegen, das CHAR-Feld auf Datenbank-Ebene unique zu
setzen oder ist es besser vor dem Insert per ASP zu prüfen, ob Wert
schon vorhanden.

Bitte um Hilfe

Vielen Dank

Stefan

Re: Char/VChar-Feld unique setzen

am 01.06.2006 08:27:12 von Stefan Lagotzki

sk5678 schrieb:
> Ich möchte in einer Tabelle sicherstellen, dass in einem Char-Feld nur
> eindeutige Werte stehen (Keine Duplikate). Es gibt neben o.g. Feld auch
> ein eindeutiges ID Feld und andere Felder
> (Nummerisch/Chars/Datumfelder)
>
> Beispiel:
> Tabellenname: tblMitarbeiter
> Feld: mitarbeiter_id (Autowert)
> Feld: mitarbeiter_kennung (char Feld und soll unique werden)
> Feld: mitarbeiter_eintritt (datum)
> Feld: mitarbeiter_vorname (char)

Welches Feld soll denn nun als Primärschlüsselfeld dienen? Offenbar
wäre doch "mitarbeiter_kennung" ein guter Primärschlüssel und dann
würde sich auch das Problem mit der Eindeutigkeit lösen. Welchen Sinn
hat denn das Feld "mitarbeiter_id" in der Datenbank?

Stefan

..

Re: Char/VChar-Feld unique setzen

am 01.06.2006 08:45:27 von Andreas Kretschmer

Andreas
--
Andreas Kretschmer
Linux - weil ich es mir wert bin!
GnuPG-ID 0x3FFF606C http://wwwkeys.de.pgp.net
Deutsche PostgreSQL User Group: http://pgug.de

Re: Char/VChar-Feld unique setzen

am 01.06.2006 08:52:36 von stephan.krebs

Hallo Das ging ja schnell und schön das ein es auch schlaue
"mysql-Stefans" gibt.

Also ich möchte folgendes:

mitarbeiter_id ist mein unique index feld welches ich über asp
anspreche
zB. .asp?mid=3D5 (fünfter datenbank eintrag)

in der Detailseite werden daten wie mitarbeitername und kennung per
hand eingegeben bzw. vergeben.
Da vermieden werden soll dass bei der handeingabe doppelte kennungen
vergeben werden, dachte ich auf DB-Ebene wäre es am performantesten
und sichersten, wenn neben meinen _id feld auch das _kennungsfeld keine
Duplicate zulässt.

Wie gesagt mir ist der SQL nicht klar, mit dem ich es erreiche, dass
sowohl _id als auch _kennungsfeld unique sind.



Andreas Kretschmer schrieb:

> begin Stefan Lagotzki schrieb:
>
> Hi Stefan ;-)
>
> > sk5678 schrieb:
> >> Ich möchte in einer Tabelle sicherstellen, dass in einem Char-Feld n=
ur
> >> eindeutige Werte stehen (Keine Duplikate). Es gibt neben o.g. Feld auch
> >> ein eindeutiges ID Feld und andere Felder
> >> (Nummerisch/Chars/Datumfelder)
> >>
> >> Beispiel:
> >> Tabellenname: tblMitarbeiter
> >> Feld: mitarbeiter_id (Autowert)
> >> Feld: mitarbeiter_kennung (char Feld und soll unique werden)
>
> Leg einen unique index drauf.
>
>
> >> Feld: mitarbeiter_eintritt (datum)
> >> Feld: mitarbeiter_vorname (char)
> >
> > Welches Feld soll denn nun als Primärschlüsselfeld dienen? Offenbar
>
> ... würde sich das id-Feld als solches anbieten, aber das war nicht die
> Frage.
>
>
> > wäre doch "mitarbeiter_kennung" ein guter Primärschlüssel und dann
> > würde sich auch das Problem mit der Eindeutigkeit lösen. Welchen Si=
nn
> > hat denn das Feld "mitarbeiter_id" in der Datenbank?
>
> Ich würde eher den Sinn einen unique char - Feldes in Zweifel ziehen.
> Aber man weiß hier nicht, wozu das dienen soll, vielleicht hat dies
> andere Gründe.
>
>
> end
> Andreas
> --
> Andreas Kretschmer
> Linux - weil ich es mir wert bin!
> GnuPG-ID 0x3FFF606C http://wwwkeys.de.pgp.net
> Deutsche PostgreSQL User Group: http://pgug.de

Re: Char/VChar-Feld unique setzen

am 01.06.2006 09:12:50 von stephan.krebs

Jetzt hab ichs (nur noch 2 Fragen):

also ich hab jetzt folgendes gemacht

create unique index mitarbeiter_kennung2 on tblmitarbeiter
(mitarbeiter_kennung);

Damit gehts: DB sperrt nun wenn ich 2x gleiche Kennung eingeben
möchte.

1 Frage:
Wieso muss ich mitarbeiter_kennung2 angeben - das Feld gibt es nicht in
der DB
und auch nach o.g. Create ist es nicht in msql-front ersichtlich?

2 Frage:
Werden dadurch inserts oder selects langsamer wenn ein char-Field
unique ist?

Vielen Dank an Euch

Stefan



sk5678 schrieb:

> Hallo Das ging ja schnell und schön das ein es auch schlaue
> "mysql-Stefans" gibt.
>
> Also ich möchte folgendes:
>
> mitarbeiter_id ist mein unique index feld welches ich über asp
> anspreche
> z.B. .asp?mid=3D5 (fünfter datenbank eintrag)
>
> in der Detailseite werden daten wie mitarbeitername und kennung per
> hand eingegeben bzw. vergeben.
> Da vermieden werden soll dass bei der handeingabe doppelte kennungen
> vergeben werden, dachte ich auf DB-Ebene wäre es am performantesten
> und sichersten, wenn neben meinen _id feld auch das _kennungsfeld keine
> Duplicate zulässt.
>
> Wie gesagt mir ist der SQL nicht klar, mit dem ich es erreiche, dass
> sowohl _id als auch _kennungsfeld unique sind.
>
>
>
> Andreas Kretschmer schrieb:
>
> > begin Stefan Lagotzki schrieb:
> >
> > Hi Stefan ;-)
> >
> > > sk5678 schrieb:
> > >> Ich möchte in einer Tabelle sicherstellen, dass in einem Char-Feld=
nur
> > >> eindeutige Werte stehen (Keine Duplikate). Es gibt neben o.g. Feld a=
uch
> > >> ein eindeutiges ID Feld und andere Felder
> > >> (Nummerisch/Chars/Datumfelder)
> > >>
> > >> Beispiel:
> > >> Tabellenname: tblMitarbeiter
> > >> Feld: mitarbeiter_id (Autowert)
> > >> Feld: mitarbeiter_kennung (char Feld und soll unique werden)
> >
> > Leg einen unique index drauf.
> >
> >
> > >> Feld: mitarbeiter_eintritt (datum)
> > >> Feld: mitarbeiter_vorname (char)
> > >
> > > Welches Feld soll denn nun als Primärschlüsselfeld dienen? Offenb=
ar
> >
> > ... würde sich das id-Feld als solches anbieten, aber das war nicht d=
ie
> > Frage.
> >
> >
> > > wäre doch "mitarbeiter_kennung" ein guter Primärschlüssel und d=
ann
> > > würde sich auch das Problem mit der Eindeutigkeit lösen. Welchen =
Sinn
> > > hat denn das Feld "mitarbeiter_id" in der Datenbank?
> >
> > Ich würde eher den Sinn einen unique char - Feldes in Zweifel ziehen.
> > Aber man weiß hier nicht, wozu das dienen soll, vielleicht hat dies
> > andere Gründe.
> >
> >
> > end
> > Andreas
> > --
> > Andreas Kretschmer
> > Linux - weil ich es mir wert bin!
> > GnuPG-ID 0x3FFF606C http://wwwkeys.de.pgp.net
> > Deutsche PostgreSQL User Group: http://pgug.de

Re: Char/VChar-Feld unique setzen

am 01.06.2006 09:21:17 von Andreas Kretschmer

Andreas
--
Andreas Kretschmer
Linux - weil ich es mir wert bin!
GnuPG-ID 0x3FFF606C http://wwwkeys.de.pgp.net
Deutsche PostgreSQL User Group: http://pgug.de

Re: Char/VChar-Feld unique setzen

am 01.06.2006 09:52:49 von Stefan Lagotzki

sk5678 schrieb:
> Also ich möchte folgendes:
>
> mitarbeiter_id ist mein unique index feld welches ich über asp
> anspreche
> z.B. .asp?mid=5 (fünfter datenbank eintrag)
>
> in der Detailseite werden daten wie mitarbeitername und kennung per
> hand eingegeben bzw. vergeben.
> Da vermieden werden soll dass bei der handeingabe doppelte kennungen
> vergeben werden, dachte ich auf DB-Ebene wäre es am performantesten
> und sichersten, wenn neben meinen _id feld auch das _kennungsfeld keine
> Duplicate zulässt.
>
> Wie gesagt mir ist der SQL nicht klar, mit dem ich es erreiche, dass
> sowohl _id als auch _kennungsfeld unique sind.

Für alle weiteren Erklärungen scheint es am besten zu sein, wenn Du
mal das Ergebnis von

DESCRIBE tabellenname;

postest. Vielleicht ist daran am besten zu erkennen, was Du eigentlich
schon gemacht hast und was Du erreichen willst.

Und /bitte/ gewöhne Dich daran, die Postings der anderen nicht unter
Deinen eigenen Fragen stehenzulassen (TOFU). Die Einhaltung der Regeln
erhöht die Chancen auf hilfreiche Antworten enorm.

Stefan

..

Re: Char/VChar-Feld unique setzen

am 01.06.2006 13:40:08 von Helmut Chang

sk5678 schrieb:

Leg dir bitte einen Realname zu!

> Ich möchte in einer Tabelle sicherstellen, dass in einem Char-Feld nur
> eindeutige Werte stehen (Keine Duplikate).

....

> Beispiel:
> Tabellenname: tblMitarbeiter
> Feld: mitarbeiter_id (Autowert)
> Feld: mitarbeiter_kennung (char Feld und soll unique werden)
> Feld: mitarbeiter_eintritt (datum)
> Feld: mitarbeiter_vorname (char)
> usw.

....

> Also per SQL - Habe folgendes versucht:
>
> create unique index mitarbeiter_kennung on tblMitarbeiter
> (mitarbeiter_kennung,mitarbeiter_id);

....

Du willst einen UNIQUE INDEX auf mitarbeiter_kennung und erzeugst einen
über mitarbeiter_kennung,mitarbeiter_id und wunderst dich, dass:

> Habe jetzt in MSQL-Front mitarbeiter_id (gelb + i) und
> mitarbeiter_kennung (gelb + u)
> kann aber trotzdem munter gleiche Kennungen eingeben z.B: 3x "AH2918B".

Natürlich. Die Kombination aus mitarbeiter_kennung,mitarbeiter_id ist ja
trotzdem noch eindeutig.

> 1. Ist es möglich und wenn ja mit welchem SQL das CHAR-Feld auf Unique
> zu setzen.



gruss, heli

Re: Char/VChar-Feld unique setzen

am 01.06.2006 13:45:52 von Helmut Chang

sk5678 schrieb:

> create unique index mitarbeiter_kennung2 on tblmitarbeiter
> (mitarbeiter_kennung);
>
> Damit gehts: DB sperrt nun wenn ich 2x gleiche Kennung eingeben
> möchte.
>
> 1. Frage:
> Wieso muss ich mitarbeiter_kennung2 angeben - das Feld gibt es nicht in
> der DB
> und auch nach o.g. Create ist es nicht in msql-front ersichtlich?

- MySQQL-Manual - Kapitel über Indizes.

> 2. Frage:
> Werden dadurch inserts oder selects langsamer wenn ein char-Field
> unique ist?

Datenbankgrundlagen lernen! Wozu glaubst du, dient ein Index?

[TOFU entsorgt]

lesen!