SQLiteStudio

Zahlhirte

Benutzer
Beiträge
12
Guten Tag an Alle,

ich habe eine Frage bezüglich von Bedingungen und ob die realisierbar sind oder, ob man das anders zu lösen hat.
Es geht darum, dass ich eine Datenbank erstellt habe etc. und die werden später mit Namen (Vor- als auch Nachname) befüllt. Es soll jedoch die Bedingung gemacht werden, dass nicht zweimal der selber Name vorkommt etc. Also zum beispiel gibt es nur ein Jonas Haus. Jonas Baum oder Stefan Haus würde gehen.
Kann man diese Bedingung in SQLiteStudio(3.1.1) Irgendwie einbinden??

Wäre euch sehr dankbar, wenn ihr mir da helfen könntet.
 
Werbung:
Kann es durchaus geben, dass ist mir klar, nur soll diese Reglung gemacht werden, da ich später mit der Datenbank arbeiten werde in Richtung Programmierung und da auch bestimmte Person rausnehme und andere Nachrichten erhalten etc.
 
Code:
test=# create table zahlhirte (vorname text, nachname text);
CREATE TABLE
test=*# create unique index on zahlhirte ((vorname || nachname));
CREATE INDEX
test=*# insert into zahlhirte values ('Jonas','Haus');
INSERT 0 1
test=*# insert into zahlhirte values ('Jonas','Baum');
INSERT 0 1
test=*# insert into zahlhirte values ('Jonas','Haus');
FEHLER:  doppelter Schlüsselwert verletzt Unique-Constraint »zahlhirte_expr_idx«
DETAIL:  Schlüssel »((vorname || nachname))=(JonasHaus)« existiert bereits.
test=*#

PostgreSQL, ob das SQLite kann weiß ich nicht.
 
Danke das du mir ein Beispiel Code dazu geschrieben hast, trotzdem weiß ich nicht wie ich das in der Tabelle einbeziehen kann.
Ich könnte einen SQL Editor öffnen und das reinschreiben, aber es soll halt die Tabelle mit einbezogen sein, so dass es ein UnversialCode für alle erdenklichen Namen ist.
 
Ein Constraint (bzw. hier als Index) hängt an der Tabelle. Sieht man dann auch, wenn man sich die Struktur dieser anzeigen läßt:

Code:
test=*# \d+ zahlhirte
                                        Tabelle »public.zahlhirte«
  Spalte  | Typ  | Sortierfolge | NULL erlaubt? | Vorgabewert | Speicherung | Statistikziel | Beschreibung
----------+------+--------------+---------------+-------------+-------------+---------------+--------------
 vorname  | text |              |               |             | extended    |               |
 nachname | text |              |               |             | extended    |               |
Indexe:
    "zahlhirte_expr_idx" UNIQUE, btree ((vorname || nachname))

test=*#

Das gilt für alle möglichen Namen.

Code:
test=*# insert into zahlhirte values ('Max','Müller');
INSERT 0 1
test=*# insert into zahlhirte values ('Max','Müller');
FEHLER:  doppelter Schlüsselwert verletzt Unique-Constraint »zahlhirte_expr_idx«
DETAIL:  Schlüssel »((vorname || nachname))=(MaxMüller)« existiert bereits.
test=*#

Du kannst mir gern 2-3 weitere Namen nennen, ich teste es sehr gern für Dich ...
 
Okay habe ein wenig rum probiert und bin auf paar Ergebnisse gestoßen, aber im Allgemeinen bekommt er das glaube ich nicht ganz hin.

CREATE TABLE ta_personaa (

id INTEGER PRIMARY KEY,

nachname STRING NOT NULL,

vorname STRING NOT NULL,

UNIQUE (nachname || vorname) ON CONFLICT FAIL

);

Da wird mir ein Fehler gegeben
 
Du solltest die beiden Spalten nicht konkatenieren, sondern getrennt in den Index aufnehmen.

Das folgende funktioniert bei mir mit SQLite 3.21:

Code:
CREATE TABLE ta_personaa
(
  id INTEGER PRIMARY KEY,
  nachname STRING NOT NULL,
  vorname STRING NOT NULL,
  UNIQUE (nachname, vorname) ON CONFLICT FAIL
);

Wenn Du die beiden Spalten in dem Constraint konkatenierst, würde das bedeutet, dass z.B. die Namen"Grete Lustig" und "Gretel Ustig" als derselbe Name angesehen werden. Was nicht der Fall ist, wenn Du beide Spalten getrennt in den Index (=Constraint) aufnimmst.
 
Zuletzt bearbeitet:
Jaapp Danke, habe es herausgefunden mit ein bissel Rum probieren.
Bin relativ neu mit SQL und fange erstmalig damit an, deswegen.
Auf jeden Fall vielen Dank
habe ich hinbekommen. :)
 
Wenn Du die beiden Spalten in dem Constraint konkatenierst, würde das bedeutet, dass z.B. die Namen"Grete Lustig" und "Gretel Ustig" als derselbe Name angesehen werden. Was nicht der Fall ist, wenn Du beide Spalten getrennt in den Index (=Constraint) aufnimmst.

Danke, das war mein falsches Beispiel ;-)

Andreas
 
Werbung:
Zurück
Oben