Zum Inhalt wechseln


Foto

Problem in einer SQL Express Datenbank


  • Bitte melde dich an um zu Antworten
22 Antworten in diesem Thema

#1 Baumpaul

Baumpaul

    Newbie

  • 68 Beiträge

 

Geschrieben 24. Februar 2009 - 07:13

Hallo,

ich muss gleich sagen, ich habe nicht viel Plan von Datenbanken.

Mein Problem besteht darin, dass ich eine bestehende Datenbank habe, unter anderem mit dem Feld "IMEI".

Meiner Meinung nach müsste das Feld so definiert sein, dass keiner der Einträge dem anderen gleichen darf, gibt ja keine identischen IMEI-Nummern.

Aber wenn ich nun das Feld komplett leer lasse, meckert mich die Software an, von wegen: IMEI wurde schon vergeben bei "".

Wie kann ich das Feld definieren, dass keine Einträge gleich sein können, aber das Feld leer bleiben kann??

Bitte um Hilfe, danke!
------------------------------------------------
MCSA; 70-210; 70-215; 70-216; 70-217; 70-218 done

#2 Gulp

Gulp

    Expert Member

  • 3.969 Beiträge

 

Geschrieben 24. Februar 2009 - 07:50

Das dürfte ein Problem werden, wenn die Spalte eindeutige Werte enthalten soll. Jedes leere Feld bekommt den Wert NULL (nein nicht 0) und wenn hier eine Eindeutigkeit gewünscht ist, dann muss auch ein eindeutiger Wert verwendet werden, NULL oder ein leeres Feld ist aber nicht eindeutig.

Grüsse

Gulp
Mein Name ist Homer von Borg! Widerstand ist zw .... Oh Doughnuts!

#3 Baumpaul

Baumpaul

    Newbie

  • 68 Beiträge

 

Geschrieben 24. Februar 2009 - 07:52

Danke erstmal.

das heisst, ich müsste mich absolut auf meine Einträge verlassen und das Feld so ändern, dass es NULL oder leer zulässt?

Ich mache alle Einträge selbst, von daher müsste ich eben nur aufpassen, keine IMEI doppelt zu vergeben, sehe ich das richtig?
------------------------------------------------
MCSA; 70-210; 70-215; 70-216; 70-217; 70-218 done

#4 Gabriel70

Gabriel70

    Board Veteran

  • 778 Beiträge

 

Geschrieben 24. Februar 2009 - 08:21

das heisst, ich müsste mich absolut auf meine Einträge verlassen und das Feld so ändern, dass es NULL oder leer zulässt?


Ja.

Ich mache alle Einträge selbst, von daher müsste ich eben nur aufpassen, keine IMEI doppelt zu vergeben, sehe ich das richtig?



Ist natürlich gefahrenbehaftet. Warum kannst du keinen Autowert verwenden?
Ist die Lösung das Problem - oder das Problem die Lösung ? :wink2:

#5 Baumpaul

Baumpaul

    Newbie

  • 68 Beiträge

 

Geschrieben 24. Februar 2009 - 08:25

Wie gesagt, ich bin nicht so bewandert mit Datenbanken.

Was wäre denn der Autowert, wie ist der definiert, oder wie sollte der definiert werden??
------------------------------------------------
MCSA; 70-210; 70-215; 70-216; 70-217; 70-218 done

#6 phoenixcp

phoenixcp

    Expert Member

  • 5.481 Beiträge

 

Geschrieben 24. Februar 2009 - 08:32

Naja, wenn wir uns die Bedeutung der IMEI zu Gemüte führen, wird klar, das er keinen Autowert verwenden kann ;)
MfG

Carsten Paul
MCSEBoard.de SQL Blog
Kein Support per PN, dafür ist das Forum da!

In Memory of LukasB

#7 Gulp

Gulp

    Expert Member

  • 3.969 Beiträge

 

Geschrieben 24. Februar 2009 - 08:33

So ungefähr, entweder Du setzt auf die Spalte beispielsweise einen Primary Key, der eindeutig ist und nicht NULL enthalten darf (damit stellst Du dann sicher, dass in dieser Spalte ein eindeutiger Wert verwendet werden muss) oder Du verwendest zB einen Unique Key, der darf dann NULL enthalten, muss aber dennoch eindeutig sein.

Unique key - Wikipedia, the free encyclopedia

Setzt Du weder einen Primary noch einen Unique Key, so kann jeder Wert (je nach Spaltendefinition) gültig sein und doppelt vorkommen, das müsstest Du seitens der eintragenden Anwendung dann zB mit einer Duplikatprüfung per vorangestelltem Select Statement steuern.

Grüsse

Gulp
Mein Name ist Homer von Borg! Widerstand ist zw .... Oh Doughnuts!

#8 phoenixcp

phoenixcp

    Expert Member

  • 5.481 Beiträge

 

Geschrieben 24. Februar 2009 - 08:34

Aber wenn ich nun das Feld komplett leer lasse, meckert mich die Software an, von wegen: IMEI wurde schon vergeben bei "".

Was mich grade noch stutzig macht: Welche Software meckert? Die Datenbank oder eine Applikation, welche auf der Datenbank aufsetzt?

entweder Du setzt auf die Spalte beispielsweise einen Primary Key

Da stellen sich den Datenbankern die Nackenhaare auf ;) Man sollte nie ein Datenfeld zu einem PK machen. Ich verwende für soetwas immer ein varchar(38)-Feld, welche über die Funktion NewID() befüllt wird. Dabei erhält mal einen 38-stelligen Wert, den das DBMS zufällig ausrechnet. Mir ist dabei noch keine Dopplung untergekommen. Ein Beispiel (grade frisch erzeugt):
D727AC2E-F0E7-482F-9667-9410B0AC75DF

MfG

Carsten Paul
MCSEBoard.de SQL Blog
Kein Support per PN, dafür ist das Forum da!

In Memory of LukasB

#9 Gulp

Gulp

    Expert Member

  • 3.969 Beiträge

 

Geschrieben 24. Februar 2009 - 08:44

Ich hab ja auch nicht gesagt, dass das setzen eines Primary Keys auf ein Datenfeld besonders schön sei ..... ;)

Grüsse

Gulp
Mein Name ist Homer von Borg! Widerstand ist zw .... Oh Doughnuts!

#10 Gabriel70

Gabriel70

    Board Veteran

  • 778 Beiträge

 

Geschrieben 24. Februar 2009 - 08:46

Naja, wenn wir uns die Bedeutung der IMEI zu Gemüte führen, wird klar, das er keinen Autowert verwenden kann ;)


Stimmt :p
Hatte ich übersehen. Dann geht es natürlich nicht.
Ist die Lösung das Problem - oder das Problem die Lösung ? :wink2:

#11 Baumpaul

Baumpaul

    Newbie

  • 68 Beiträge

 

Geschrieben 24. Februar 2009 - 08:46

@phoenixcp:

Diesen varchar-Wert könnte ich aber nach Belieben verändern, oder??
------------------------------------------------
MCSA; 70-210; 70-215; 70-216; 70-217; 70-218 done

#12 phoenixcp

phoenixcp

    Expert Member

  • 5.481 Beiträge

 

Geschrieben 24. Februar 2009 - 08:56

Können könnte man, aber was sollte das bringen? Es handelt sich hierbei dann um einen Primärschlüssel eines Datensatzes. Also auf gut deutsch sowas wie die "einzigartige Adresse" des Datensatzes. Wozu sollte man die ändern? Wenn überhaupt werden die anderen Attribute (Spalten) des Datensatzes geändert.
MfG

Carsten Paul
MCSEBoard.de SQL Blog
Kein Support per PN, dafür ist das Forum da!

In Memory of LukasB

#13 Gabriel70

Gabriel70

    Board Veteran

  • 778 Beiträge

 

Geschrieben 24. Februar 2009 - 08:58

Wie gesagt, ich bin nicht so bewandert mit Datenbanken.


Dann schau dir das mal an - etwas Grundlagen-Forschung. ;)

Onlinedokumentation

Auf jeden Fall würde ich die Definition so vornehmen, daß NOT NULL gegeben ist.

Gruß
Ist die Lösung das Problem - oder das Problem die Lösung ? :wink2:

#14 Baumpaul

Baumpaul

    Newbie

  • 68 Beiträge

 

Geschrieben 24. Februar 2009 - 09:03

@phoenixcp:

Ich muss ja bei manchen Geräten die IMEI angeben, nur viele arbeiten auch ohne sie.

Deswegen habe ich da auch viele leere Felder.

Geräte die nicht mit der IMEI arbeiten, können aber einen beliebigen Eintrag haben.
------------------------------------------------
MCSA; 70-210; 70-215; 70-216; 70-217; 70-218 done

#15 phoenixcp

phoenixcp

    Expert Member

  • 5.481 Beiträge

 

Geschrieben 24. Februar 2009 - 09:05

Und genau deshalb ist NOT NULL genau die falsche Definition für dieses Feld. DU hast dich aber immer noch nicht zu meiner Frage geäussert:

Was mich grade noch stutzig macht: Welche Software meckert? Die Datenbank oder eine Applikation, welche auf der Datenbank aufsetzt?


Davon hängt auch ein wenig ab, ob wir da seitens der Datenbank überhaupt noch was machen können ;)
MfG

Carsten Paul
MCSEBoard.de SQL Blog
Kein Support per PN, dafür ist das Forum da!

In Memory of LukasB