Frage zu neuer Datenbanstruktur/ Model

Babsi

SQL-Guru
Beiträge
122
Hallo,
ich bin neu hier im Forum und grüße alle.

Ich bin dabei hier ein neues Datenbankmodel aufzubauen. War eine Weile raus gewesen aus dem ganzen und bin seit ca. 1 Jahr wieder dabei.

Jetzt habe ich mit dem Model schon angefangen und es gibt hier eben Vorschläge von einer anderen Mitarbeiterin mit dem ich mich nicht so ganz anfreunden kann, daher würde ich einfach gerne mal weitere Meinungen hören.

Es läuft wohl bisher so, dass "Flags" gesetzt werden, damit meine ich, wenn z.B.in der Tabelle : Company einen Eintrag generiert wird, wird die Adresse in eine Tabelle Adressen geschrieben, alle anderen Adressen übrigens auch (Händler, Hersteller usw.). Wenn es nun vorkommt dass die die Company eine Filiale von irgendeiner andern Company ist soll in der Adresstabelle der PK von der Company gesetzt werden welche der Mutterkonzern ist. Wenn Sie selber der Mutterkonzern ist soll eben der PK von der Company selber darein geschrieben werden. meines Erachtens ist das doch nicht richtig im Sinne der Normalisierung, oder sehe ich das falsch? da müsste doch eine zweite Tabelle her, oder?

Ich hoffe ich habe mich verständlich ausgedrückt.
kann auch gerne mal die '.mwb senden.

Grüße, Babsi
 
Werbung:
Hallo akretschmer,

ich habe das Model mit MySQL Workbench erstellt, diese Datei nutzen wir um uns gegenseitig über Änderungen und Neuerungen auszutauschen.
ich verstehe jetzt nicht so ganz was ich mit dem SQL- String soll. es wird eine Tabelle: babsi erstellt mit den Feldern: id serial primary key, konzern text, mutter_konzern int references babsi
Die dann auf sich selber referenziert.

In dem Szenario welches ich darstellen wollte: gibt es die Tabelle: Company ( PK_id, Name,) und eine Tabelle Adressen. ( PK_id, Strasse, Telefon, Plz, FK_PK_id(aus Company)

Um hier eben feststellen zu könne ist es ein Mutterkonzern oder eine Tochtergesellschaft. Wenn Tochterkonzern dann PK von dem jeweiligen Mutterkonzern Company sonst eigene PK.
 
Hallo akretschmer,

ich habe das Model mit MySQL Workbench erstellt, diese Datei nutzen wir um uns gegenseitig über Änderungen und Neuerungen auszutauschen.
ich verstehe jetzt nicht so ganz was ich mit dem SQL- String soll. es wird eine Tabelle: babsi erstellt mit den Feldern: id serial primary key, konzern text, mutter_konzern int references babsi
Die dann auf sich selber referenziert.

In dem Szenario welches ich darstellen wollte: gibt es die Tabelle: Company ( PK_id, Name,) und eine Tabelle Adressen. ( PK_id, Strasse, Telefon, Plz, FK_PK_id(aus Company)

Um hier eben feststellen zu könne ist es ein Mutterkonzern oder eine Tochtergesellschaft. Wenn Tochterkonzern dann PK von dem jeweiligen Mutterkonzern Company sonst eigene PK.

Also so:

Code:
test=*# commit;
COMMIT
test=# select * from company ;
 id |  name
----+-------------
  1 | big firma 1
  2 | big firma 2
(2 rows)

test=*# select * from adressen ;
 id | company |  adresse
----+---------+--------------------------------------
  1 |  1 | hier wohnt big firma 1
  2 |  2 | hier wohnt big firma 2
  4 |  2 | hier wohnt tochter 2 von big firma 2
  3 |  2 | hier wohnt tochter 1 von big firma 2
(4 rows)


Du kannst so wohl nicht mehr wirklich in Adressen unterscheiden, was es ist, und Du findest nicht zur Firma 2 die korrekte Adresse.

Oder ganz anders?
 
Hallo akretschmer,

Noch nicht ganz, ich versuche es mal mit dem Bsp. von Dir.

id | name
----+-------------
1 | big firma 1
2 | big firma 2
(2 rows)

test=*# select * from adressen ;

id | company | Adresse |und hier die ID des Mutterkonzerns (Aus er Tab: Company)
----+---------+--------------------------------------
1 | 1 | hier wohnt big firma 1|1
2 | 2 | hier wohnt big firma 2|1

Also wenn ich eine Adresse eintrage, muss vorher geschaut werden, ob der Konzern eine Mutter/ Filiale von einer anderen Company ist. Wenn Mutter dann eigene ID aus Tabelle Company eintragen sonnst ID von Muuterkonzern aus Tabelle: Company in die Spalte ID der Tabelle Adresse eintragen. Damit kann ich dann rausbekommen(alleine schon daran, dass der FK id in der Tab. Adressen anders ist als der Eintrag in ID) ob es ein Mutterkonzern oder eine Tochter ist. Und selbst wenn ich es so mache, gehört der Eintrag ID doch nicht in die Tabelle Adresse.?!
 
Hallo akretschmer,

ich mach das jetzt doch anders, wenn ich so gestalte dann habe ich ja Leerfelder in denen die Adresse nicht zur Company(Alle Adressen sollen in eine Tabelle gehört).
Das ist doch Mist.
Wollte das nur noch mitteilen.

Grüße, Babsi
 
Zuletzt bearbeitet von einem Moderator:
Hallo Babsi.

id | name
----+-------------
1 | big firma 1
2 | big firma 2
(2 rows)

test=*# select * from adressen ;

id | company | Adresse |und hier die ID des Mutterkonzerns (Aus er Tab: Company)
----+---------+--------------------------------------
1 | 1 | hier wohnt big firma 1|1
2 | 2 | hier wohnt big firma 2|1

Mein Bauch sagt mir, dass einem so ein Design früher oder später auf die Füße fällt. ;)

Ich denke es kommt vor allem darauf an welche Information mit dem "Flag" gespeichert werden soll. Geht es darum zum Beispiel die Rechnungsadresse festzulegen kann man das so machen. Sinnvoller könnte hingegen eine dritte Tabelle sein:
Code:
id_c | id_a | type
1    | 1    | Anschrift
1    | 1    | Rechnung
1    | 1    | Lieferung
2    | 2    | Anschrift
2    | 1    | Rechnung
2    | 2    | Lieferung

Wenn hingegen die wirtschaftliche Verbindung zwischen zwei Unternehmen abgebildet werden soll würde ich das hingegen eher in Tabelle 1 direkt bei den Unternehmen notieren da es sich um ein Attribut des Unternehmens selbst handelt. Aber auch hier kann sich eine dritte Tabelle lohnen:
Code:
id_c1 | id_a2 (Bezug Tabelle 1)
1     | 2
1     | 3
3     | 4

Gruß Hony
 
Werbung:
Eigentlich sind das zwei Paar Schuhe.

1) Unternehmen (companys) können Mutterunternehmen haben, dazu ist ein FK innerhalb der Tabelle mit Referenz auf die Tabelle selbst völlig in Ordnung. Hat das Unternehmen kein Mutterunternehmen ist dieser FK NULL (zur Not auch FK = PK, was aber meiner Meinung nach blöd ist wenn man rekursive Abfragen machen muss und mehr Platz verbraucht).

Schwierig wird es, wenn dein Unternehmen sagen wir mal ein Joint Venture ist. 50% gehören A, 50% gehören B. Wenn du das abbilden willst, brauchst du eine Zuordnungstabelle.

2) Ein Unternehmen kann beliebig viele (postalische) Adressen haben (Rechnungsadresse, Briefadresse, Produktionsstandorte, etc.). Diese Adressen musst du in einer eigenen Tabelle abbilden die per FK auf das Unternehmen referenziert.

Es kann der Fall eintreten, das zwei Unternehmen an der selben Adresse sitzen. In diesem Fall wäre die Adresse redundant. Hier musst du klar abwägen was sinnvoller ist. Eine Adresstabelle mit FK auf Unternehmen 1:n oder tatsächlich noch eine weitere Zwischentabelle n:m. Was z.B. wenn beide Unternehmen unabhängig von einander sind (einfach nur im selben Gebäude sitzen) und eines der Unternehmen zieht um. Der Sachbearbeiter ändert die Adresse von Unternehmen A. Unternehmen B bleibt am selben Standort, die Adresse wird aber mitgeändert? Was wenn der Sachbearbeiter keinen Zugriff auf die Daten von Unternehmen B hat, aber auf die von Unternehmen A, sieht er dann die Adresse?
 
Zurück
Oben