AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken DBdesign einer 1:1 Beziehung
Thema durchsuchen
Ansicht
Themen-Optionen

DBdesign einer 1:1 Beziehung

Ein Thema von khh · begonnen am 3. Jan 2009 · letzter Beitrag vom 4. Jan 2009
Antwort Antwort
Seite 1 von 2  1 2      
khh

Registriert seit: 18. Apr 2008
Ort: Südbaden
1.929 Beiträge
 
FreePascal / Lazarus
 
#1

DBdesign einer 1:1 Beziehung

  Alt 3. Jan 2009, 11:47
Datenbank: firebird • Version: 2.1 • Zugriff über: zeos
hallo zusammen,

ich habe der Übersichtlichkeit halber einige Felder meiner Tabelle Kunden in eine Tabelle Zahlungsbedingungen ausgelagert.
Jetzt bin ich mir nicht sicher, soll/ muss ich die id der zahlungsbedingungen(primärschlüssel) beim kunden, oder die Kundennummer(Primärschlüssel) bei den Zahlungsbedingungen speichern.
Eigentlich ists ja egal, aber wie ists nach den Normalisierungsregeln richtig?


danke gruss Kh
Karl-Heinz
  Mit Zitat antworten Zitat
Benutzerbild von Codewalker
Codewalker

Registriert seit: 18. Nov 2005
Ort: Ratingen
945 Beiträge
 
Delphi XE2 Professional
 
#2

Re: DBdesign einer 1:1 Beziehung

  Alt 3. Jan 2009, 11:55
Afaik ist doch eine 1:1-Beziehung gar nicht normalisiert/normalisierbar gemäß der üblichen Regeln, weil die nur 1:n und n:m-Beziehungen betreffen. Vielmehr sollte man sich fragen, warum man das Feld nicht direkt in die Tabelle dazupackt (Übersichtlichkeit wäre da imho das kleinste Argument - dann lieber die Doku oder Oberfläche für den Zugriff verbessern)
  Mit Zitat antworten Zitat
khh

Registriert seit: 18. Apr 2008
Ort: Südbaden
1.929 Beiträge
 
FreePascal / Lazarus
 
#3

Re: DBdesign einer 1:1 Beziehung

  Alt 3. Jan 2009, 12:03
in einer alten Info habe ich folgendes gefunden:

Mit einer 1:1-Beziehung kann eine Zeile in Tabelle A nur mit einer Zeile in Tabelle B verknüpft werden und umgekehrt. Eine 1:1-Beziehung wird erstellt, wenn es sich bei beiden verknüpften Spalten um Primärschlüssel handelt oder beide UNIQUE-Einschränkungen besitzen.

Dieser Beziehungstyp wird nur selten verwendet, da sich Informationen, die in dieser Weise miteinander verbunden sind, meist in ein und derselben Tabelle befinden. Sie können eine 1:1-Beziehung bei folgenden Vorgänge verwenden:

* Teilen einer Tabelle mit vielen Spalten
* Isolieren eines Teils der Tabelle aus Sicherheitsgründen
* Speichern von Daten mit kurzer Lebensdauer, die gelöscht werden können, indem Sie einfach die Tabelle löschen
* Speichern von Informationen, die nur für eine Teilmenge der Haupttabelle gültig sind


ich würde beispielsweise auf jeden Fall diverse sensible Daten z.B.(Lohn/Gehalt) , eben aus Sicherheitsgründen separieren.

Bei den Zahlunsbedingungen _könnte_ es sich ebenfalls um solche handeln.


Gruss KH
Karl-Heinz
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#4

Re: DBdesign einer 1:1 Beziehung

  Alt 3. Jan 2009, 12:08
Zitat von khh:
hallo zusammen,

ich habe der Übersichtlichkeit halber einige Felder meiner Tabelle Kunden in eine Tabelle Zahlungsbedingungen ausgelagert.
Jetzt bin ich mir nicht sicher, soll/ muss ich die id der zahlungsbedingungen(primärschlüssel) beim kunden, oder die Kundennummer(Primärschlüssel) bei den Zahlungsbedingungen speichern.
Eigentlich ists ja egal, aber wie ists nach den Normalisierungsregeln richtig?
Semantisch handelt es sich bei den Zahlungsbedingungen um eine Detailtabelle zur Kunden-Mastertabelle mit (maximal) einem Satz, daher würde ich die zweite Variante wählen.
Dadurch ist es allerdings auch möglich, mehrere Zahlungsbedingungen einem Kunden zuzuordnen.

Nur falls eine Zahlungsbedingung auch mehreren Kunden zugeordnet werden können soll (also 1:M), würde ich deren ID in der Kundentabelle hinterlegen.
Michael Justin
habarisoft.com
  Mit Zitat antworten Zitat
khh

Registriert seit: 18. Apr 2008
Ort: Südbaden
1.929 Beiträge
 
FreePascal / Lazarus
 
#5

Re: DBdesign einer 1:1 Beziehung

  Alt 3. Jan 2009, 12:11
Zitat von mjustin:
Zitat von khh:
hallo zusammen,

ich habe der Übersichtlichkeit halber einige Felder meiner Tabelle Kunden in eine Tabelle Zahlungsbedingungen ausgelagert.
Jetzt bin ich mir nicht sicher, soll/ muss ich die id der zahlungsbedingungen(primärschlüssel) beim kunden, oder die Kundennummer(Primärschlüssel) bei den Zahlungsbedingungen speichern.
Eigentlich ists ja egal, aber wie ists nach den Normalisierungsregeln richtig?
Semantisch handelt es sich bei den Zahlungsbedingungen um eine Detailtabelle zur Kunden-Mastertabelle mit (maximal) einem Satz, daher würde ich die zweite Variante wählen.
Dadurch ist es allerdings auch möglich, mehrere Zahlungsbedingungen einem Kunden zuzuordnen.

Nur falls eine Zahlungsbedingung auch mehreren Kunden zugeordnet werden können soll (also 1:M), würde ich deren ID in der Kundentabelle hinterlegen.
ich danke euch,
so werd ichs machen, die kdnummer bei den Zahlungsbedingungen

Gruss KH
Karl-Heinz
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#6

Re: DBdesign einer 1:1 Beziehung

  Alt 3. Jan 2009, 13:04
Die Kundennummer sollte NIE der PK sein. Verwende ein nichtsprechendes unsichtbares Feld, z.B. eine 'KundenID', die als AutoInc implementiert ist. Eine Kundennummer (oder Artikel- Lieferanten- usw. -Nummer) ist UNIQUE, aber niemals der PK. Denn Kundennummern ändern sich. Immer wieder beliebt ist die Neuvergabe, weil plötzlich alle Kunden 8-stellige Nummern erhalten sollen. Viel Spass beim Nachpflegen der Tabellen.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
khh

Registriert seit: 18. Apr 2008
Ort: Südbaden
1.929 Beiträge
 
FreePascal / Lazarus
 
#7

Re: DBdesign einer 1:1 Beziehung

  Alt 3. Jan 2009, 13:08
Zitat von alzaimar:
Die Kundennummer sollte NIE der PK sein. Verwende ein nichtsprechendes unsichtbares Feld, z.B. eine 'KundenID', die als AutoInc implementiert ist. Eine Kundennummer (oder Artikel- Lieferanten- usw. -Nummer) ist UNIQUE, aber niemals der PK. Denn Kundennummern ändern sich. Immer wieder beliebt ist die Neuvergabe, weil plötzlich alle Kunden 8-stellige Nummern erhalten sollen. Viel Spass beim Nachpflegen der Tabellen.
da gebe ich dir recht.
Ursprünglich war auch eine id der PK.
Aus einem mir im Moment nicht nachvollziebaren Grund wurde aber die Kundennummer zum PK.
Muss ich mir wirklich nochmal genauer anschauen.

Ich danke dir für den wichtigen Hinweis mit der Neuvergabe.

Gruss Kh
Karl-Heinz
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: DBdesign einer 1:1 Beziehung

  Alt 3. Jan 2009, 13:12
Hallo,

Ändern der Kundennummer sollte aber die Nummer in allen referenzierten Tabellen
automatisch ändern (cascade update).

Aber du hast auf jeden Fall Recht, nie etwas als foreign key benutzen,
was der Anwender ändern kann.


Zur eigentliche Frage:
Ich würde eine m:n Beziehung machen, also 3 Tabellen
Kunde, Zahlungsbedingung, Kunde-Zahlungsbedingung

Zahlungsbedingungen sind doch auch normale Sachen,
die mehrere Kunden gleichzeitig haben können (z.B. "4 Wochen nach Rechnungserhalt").


Heiko
Heiko
  Mit Zitat antworten Zitat
khh

Registriert seit: 18. Apr 2008
Ort: Südbaden
1.929 Beiträge
 
FreePascal / Lazarus
 
#9

Re: DBdesign einer 1:1 Beziehung

  Alt 3. Jan 2009, 13:57
ich danke euch für eure meinungen


Gruss Kh
Karl-Heinz
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#10

Re: DBdesign einer 1:1 Beziehung

  Alt 3. Jan 2009, 14:02
Zitat von hoika:
Ich würde eine m:n Beziehung machen, also 3 Tabellen
Kunde, Zahlungsbedingung, Kunde-Zahlungsbedingung

Zahlungsbedingungen sind doch auch normale Sachen,
die mehrere Kunden gleichzeitig haben können (z.B. "4 Wochen nach Rechnungserhalt").
Also ich bin kein Buchhalter, aber ein Kunde kann doch nur eine bestimmte Zahlungsbedingung haben, oder?
Code:
IdZahlBed Zahlungsbedingung
===========================
1         Vorkasse
2         Nachnahme
3         auf Rechnung (30 Tage)
5         auf Rechnung (innerhalb 2 Tagen 2% Skonto, spätestens nach 14 Tagen muss bezahlt werden)
6         Kreditkarte (Visa)
7         Kreditkarte (Mastercard)
8         Ratenzahlung
Das wäre dann eine 1 : N Beziehung.
Wenn man's genau nimmt, muss doch die Zahlungsbedingung bei der Bestellung gespeichert werden.
Häufig: die erste Bestellung geht per Vorkasse, alle weiteren auf Rechnung.
Die Zahlungsbedingung in der Kundentabelle wäre dann nur der Default für Bestellungen in der Zukunft.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:16 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