Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi PRIMARY KEY - doppelter Schlüssel... (https://www.delphipraxis.net/107789-primary-key-doppelter-schluessel.html)

Geist 2. Feb 2008 07:15

Datenbank: SQLExpress • Zugriff über: ADO

PRIMARY KEY - doppelter Schlüssel...
 
Hallo zusammen,

ich betreibe die Programmiererei nur so zum totschlagen der Freizeit, bin also relativer Anfänger. Vor einiger Zeit hatte ich mich schon mal an Datenbanken versucht, jetzt will ich das ganze noch mal angehen.
Mein Ziel ist es eine Tabelle anzulegen die (damit es erst mal einfach bleibt) aus zwei Spalten besteht. Spalte1: laufende Nummer, Spalte2 Name.
Erstellt habe ich die Tabelle mit PRIMARY KEY auf Spalte1, laufende Nummer.
Gibt es eine Möglichkeit beim Einfügen von Datensätzen die 'laufende Mummer' immer entsprechend automatisch zu erhöhen?
Vielen Dank schon mal.

grenzgaenger 2. Feb 2008 07:18

Re: PRIMARY KEY - doppelter Schlüssel...
 
hier wird gemeinhin ein trigger empfohlen. wenn dir das zu kompliziert ist, solltest du dir selbst 'n kleines nummernkreisobjekt schreiben und dort die nummern lösen... als schlechteste möglichkeit sehe ich die autoincrement felder an (weiss nicht ob MS sql server welche unterstützt, ein blick in die doku sollte jedoch klarheit bringen), denn mit denen gibt es normal nur probleme.

<HTH>

Edit: Normal sollte man keine autoincrements verwenden... ein ordentlicher schlüsselbegriff ist da zumeist mehr wert

Geist 2. Feb 2008 07:22

Re: PRIMARY KEY - doppelter Schlüssel...
 
wie muss ich mir das mit den Triggern vorstellen?

Sharky 2. Feb 2008 07:27

Re: PRIMARY KEY - doppelter Schlüssel...
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von grenzgaenger
...(weiss nicht ob MS sql server welche unterstützt,...

Unabhängig davon ob es gut oder schlecht ist. Es geht natürlich.

grenzgaenger 2. Feb 2008 07:35

Re: PRIMARY KEY - doppelter Schlüssel...
 
tipp, schau mal in den db handbuch, ist sowieso von datenbank zu datenbank verschieden. aber prinzipiell geht das wie folgt...

create trigger before insert on tabelle....

und da holst du dir aus deinen generator eine neue nummer für deine tabelle ab... diese schreibste dann im trigger (vor dem einfügen des datensatzes) in deine tabelle fort.

und schon, läuft das ...

Geist 2. Feb 2008 08:04

Re: PRIMARY KEY - doppelter Schlüssel...
 
kommen wir mal auf das AutoIncrement zurück. Wie funktioniert das denn genau?
Also Tabelle vorhanden, ich möchte neuen Datensatz speichern, 'laufende Nummer' soll automatisch inc werden.

marabu 2. Feb 2008 08:16

Re: PRIMARY KEY - doppelter Schlüssel...
 
Hallo Heiko,

welchen SQL-Server verwendest du?

da die Tabelle bereits existiert, muss das Schlüsselfeld entprechend angelegt sein. Der SQL Server (egal welches Fabrikat) füllt den nächsten Schlüsselwert bei einem INSERT Statement automatisch ein. Du fütterst befüllst dann nur die restlichen Felder.

Freundliche Grüße

Geist 2. Feb 2008 09:04

Re: PRIMARY KEY - doppelter Schlüssel...
 
ich benutze den SQL Server 2005 Express

marabu 2. Feb 2008 09:41

Re: PRIMARY KEY - doppelter Schlüssel...
 
Vergleiche deine Tabellenstruktur mit dieser:

SQL-Code:
CREATE TABLE demo (
  lfdnr INT IDENTITY(10,5),
  name NVARCHAR(100),
  CONSTRAINT pk_demo PRIMARY KEY (lfdnr)
)
Durch den Zusatz IDENTITY(10,5) wird eine automatische Vergabe von Schlüsselwerten beim Server beauftragt. Der erste mit INSERT eingefügte Datensatz erhält lfdnr = 10, die nächsten lfdnr = 15, 20, 25, ... - die 10 ist der Startwert, die 5 das Increment.
Fehlt die Angabe IDENTITY, dann bist du selbst für die Schlüsselvergabe verantwortlich. Vergibst du keinen Schlüssel, dann erhält der erste und alle folgenden Datensätze lfdNr = NULL, was schon beim zweiten INSERT zu der von dir beobachteten Fehlermeldung führt.

Freundliche Grüße

mkinzler 2. Feb 2008 09:46

Re: PRIMARY KEY - doppelter Schlüssel...
 
Sind bei MSSQL NULL-Werte bei Primärschlüsseln erlaubt? :gruebel:

Geist 2. Feb 2008 10:00

Re: PRIMARY KEY - doppelter Schlüssel...
 
MARABU

ich habe meinen Schlüssel nur mit
PRIMARY KEY (lfdnr)
festgelegt.

IDENTITY habe ich nicht verwendet (wie gesagt, Anfänger).




MKINZLER

nein, NULL Werte sind nicht erlaubt. Das habe ich mir bei anderen abgeschaut. Ob das gut ist weiß ich nicht? Will ja noch lernen.

mkinzler 2. Feb 2008 10:02

Re: PRIMARY KEY - doppelter Schlüssel...
 
Nein, bei Primärschlüsseln sollten keine Null-Werte möglich sein. Die Frage bezog sich auch eher auf Achims letzten Satz.

marabu 2. Feb 2008 10:06

Re: PRIMARY KEY - doppelter Schlüssel...
 
Hallo Markus,

dass NULL nicht geht habt ihr ja schon geklärt. Dann bleibt nur, dass Heiko explizit einen existierenden Schlüsselwert nochmal vergeben wollte.

BUG 2. Feb 2008 10:36

Re: PRIMARY KEY - doppelter Schlüssel...
 
Zitat:

Zitat von grenzgaenger
... als schlechteste möglichkeit sehe ich die autoincrement felder an

Nur so aus Neugier, warum das? Welche Nachteile haben autoincrement Felder, welche Vorteile hat die andere Methode?

MfG,
Bug

marabu 2. Feb 2008 11:25

Re: PRIMARY KEY - doppelter Schlüssel...
 
Hallo,

im Bereich der Desktop-Datenbanken gründet sich der schlechte Ruf von AUTOINC Feldern wohl in erster Linie auf der Unzugänglichkeit der Generatoren. Im Client-Server-Bereich störte die lückenbehaftete und inkompatible Implementierung auf SQL-Servern, da der SQL-Standard diese Generatoren bislang ausgeklammert hat.

Mit zunehmender Reife des Konzepts sollten die Vorbehalte fallen. Es gibt schließlich schlecht implementierte Datenmodelle mit und ohne AUTOINC, IDENTITY oder SEQUENCE.

Freundliche Grüße


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:46 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz