Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi DB-Design-Frage: unique index richtig verwenden (https://www.delphipraxis.net/113569-db-design-frage-unique-index-richtig-verwenden.html)

hoika 10. Mai 2008 07:41

Datenbank: FB • Version: 1.5 • Zugriff über: egal

DB-Design-Frage: unique index richtig verwenden
 
Hallo #,

zum Topic viel mir nichts besseres ein ...

also:
Personen sollen Projekten oder Projektpositionen zugeordnet werden.

Dabei gibt es folgende Bedingungen:
Bed_1. keine doppelten Zuordnungen
Bed_2. ist eine Person dem Projekt zugeordnet,
kann sie keiner Position dieses Projektes zugeordnet werden
(das Projekt reicht ja in diesem Fall)
Bed_3. eine Person kann mehreren Positionen des Projektes zugeordnet werden

Meine Tabelle sieht bisher wie folgt aus (Änderungen sind noch möglich)

Tabelle: Id(autoinc),PersonalId,ProjectId,PosId

Bei Projekt-Einträgen ist PosId=0

Kann ich jetzt durch unique indices die Inforderungen erfüllen ?

idx_1: (PersonalId,ProjectId,PosId)
-> Bed_1 erfüllt, Bed_3 erfüllt, Bed_2 nicht erfüllt

Geht das überhaut über die DB ?


Heiko

mkinzler 10. Mai 2008 07:46

Re: DB-Design-Frage: unique index richtig verwenden
 
Ich würde es mal mit einem check constraint versuchen. Bin mir aber nicht sicher, ob die Anforderung nicht zu komplex ist.

hoika 10. Mai 2008 07:51

Re: DB-Design-Frage: unique index richtig verwenden
 
Hallo,

deshalb hatte ich es nicht als mögliche Lösung erwähnt .. ;(
Nun ja, mal sehen,
ob ich das in ner SP hinbekomme.

aber per Unique Index ginge es nicht ?
Ich bin noch offen (habe noch keine Tabelle angelegt).
Ich könnte auch 2 Tabellen nehmen (für Projekt und Position),
aber das macht das ja noch komplizierter.


Heiko

mkinzler 10. Mai 2008 07:54

Re: DB-Design-Frage: unique index richtig verwenden
 
Test doch mal, ob so fehlerhafte Inserts akzeptiert werden

hoika 10. Mai 2008 08:17

Re: DB-Design-Frage: unique index richtig verwenden
 
Hallo,

brauche ich nicht, sieht man doch auch so

Id,PersonalId,ProjectId,PosId
1,100,1,0
2,100,1,10

Das geht, aber jetzt steht die Person sowohl
im Project als auch in der Position 10 des gleichen Projektes.

Der Index erlaubt aber folgendes und das soll er ja auch

3,100,1,5
4,100,1,10

2 Positionen.


Heiko

mkinzler 10. Mai 2008 10:51

Re: DB-Design-Frage: unique index richtig verwenden
 
Habe mir eine Testtabelle angelegt. Ein check constraint funktioniert

hoika 10. Mai 2008 11:53

Re: DB-Design-Frage: unique index richtig verwenden
 
Hallo,

hm ?
wie sieht der denn aus?
habe gerade einen leeren Kopf.


Heiko

mkinzler 10. Mai 2008 12:00

Re: DB-Design-Frage: unique index richtig verwenden
 
SQL-Code:
not exists (select pos from <tabelle> where persid=new.persid and projektid = new.projektid and pos = 0)


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:20 Uhr.

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