|
You last visited: Today at 02:52
Advertisement
Welche Tabellen in Datenbank?
Discussion on Welche Tabellen in Datenbank? within the Web Development forum part of the Coders Den category.
09/12/2015, 19:44
|
#1
|
elite*gold: 307
Join Date: Jul 2009
Posts: 1,091
Received Thanks: 434
|
Welche Tabellen in Datenbank?
Sers,
programmiere grade eine Adressenverwaltung als Webanwendung und benutze eine MySQL Datenbank. Nun würde ich um Rat fragen wie die Tabellen etc. darin aussehen sollen.
Spalten: id lastname firstname location postalcode street street_altern1 street_altern2 location_altern1 location_altern2 phone1 phone2 fax1 fax2 mobilephone
Ich würde es dann so machen:
Tabelle: contact
Id lastname firstname locationid addressid communicationid
Tabelle: location
Id postalcode location
Tabelle: address
Id street street_altern1 street_altern2 location_altern1 location_altern2
Tabelle: communication
Id phone1 phone2 fax1 fax2 mobilephone
Jegliche Verbesserungen sind erwünscht, bin mir vorallem wegen den Alternativen nich so sicher... ggf. für Alternativen noch Tabelle/n?
Vielen Dank im voraus.
Lg
|
|
|
09/12/2015, 21:21
|
#2
|
elite*gold: 6
Join Date: Jul 2011
Posts: 1,029
Received Thanks: 106
|
location_altern1 & location_altern2 würde ich hoch in die Tabelle "location" packen... Wieso sollten die alternativen denn nicht beim primären dabei sein ? 
Bei dem Rest musst du auf antworten von anderen warten... Ich würd's so machen wie du ^.^
|
|
|
09/13/2015, 14:34
|
#3
|
elite*gold: 307
Join Date: Jul 2009
Posts: 1,091
Received Thanks: 434
|
Quote:
|
Wieso sollten die alternativen denn nicht beim primären dabei sein ?
|
Wegen Redundanz dachte ich. Wenn paar Leute im selben Ort leben dann haste das durch die Alternativen zwangsweise mehrfach drin. Wenn man die Alternativen z.b. in eigene Tabelle packt hätte ich jeden Ort und jede Straße nur 1x in der db.... bin mir aber auch nich so sicher.
|
|
|
10/02/2015, 10:59
|
#4
|
elite*gold: 307
Join Date: Jul 2009
Posts: 1,091
Received Thanks: 434
|
Sonst noch jemand ne idee?
|
|
|
10/10/2015, 00:15
|
#5
|
elite*gold: 0
Join Date: Jul 2009
Posts: 1,459
Received Thanks: 278
|
Contact
ContactID
Lastname
Firstname
FKLocationID
FKCommunicationID
Location
LocationID
Postalcode
Location
Address
AddressID
FKContactID
Street
Location
Communication
CommunicationID
Phone1
Phone2
Fax1
Fax2
Mobilephone
Communication könnte man natürlich noch optimieren...
Tabellenname
Primary Key
FK = Fremdschlüssel
|
|
|
10/10/2015, 15:16
|
#6
|
elite*gold: 0
Join Date: Feb 2010
Posts: 45
Received Thanks: 2
|
Quote:
Originally Posted by ElDiabolus
Contact
ContactID
Lastname
Firstname
FKLocationID
FKCommunicationID
Location
LocationID
Postalcode
Location
Address
AddressID
FKContactID
Street
Location
Communication
CommunicationID
Phone1
Phone2
Fax1
Fax2
Mobilephone
Communication könnte man natürlich noch optimieren...
Tabellenname
Primary Key
FK = Fremdschlüssel
|
Da hatte wohl jemand anständigen Datenbanken Unterricht!
Ich würde dir außerdem empfehelen InnoDB zu benutzen.
Ist irgendwie von der Perfomance besser.
|
|
|
10/10/2015, 16:19
|
#7
|
Moderator
elite*gold: 558
Join Date: Feb 2010
Posts: 6,546
Received Thanks: 1,418
|
Ich würde es noch etwas anders machen.
Die Adresse sollte nicht auf den Kontakt zeigen, sondern der Kontakt auf die Adresse. Es können schließlich mehrere Personen im selben Haus wohnen und haben damit die selbe Adresse. Oder wenn man einer Person auch mehrere Adressen geben will, dann eben mit einer zusätzlichen Tabelle.
Die Adresse sollte den Verweis auf die Stadt haben, dann kann man nur beim Betrachten der Adress-Tabelle erkennen welche Adressen mit dem gleichen Strassennamen in unterschiedlichen Städten sind. Außerdem wird eine Person, wenn sie mehrere Adressen hat, die nicht alle in der selben Stadt haben, oder?
Bei der Telefonnummer könnte man die Tabelle komplett umbauen. ID, Number, Typ (Fax, Phone, Mobil als Zahl) und ContactID. Dann kann eine Person beliebig viele Telefonnummern haben, braucht aber kein Fax.
Stand: 12.10.2015 01:05
Contact
ContactID
Firstname
Lastname
City
CityID
Name
Postalcode
(Country) // Mashkin, Beitrag 9
(State) // Mashkin, Beitrag 9
Address
AddressID
Street
(Number) // Hausnummer
(Additional) // Adresszusatz
FKCityID
ContactAddress
FKContactID
FKAddressID
Communication
CommunicationID
Number
FKContactID
FKTypeID // Pand0r, Beitrag 8
CommunicationType // Pand0r, Beitrag 8
TypeID
Name (z.B. Fax, Phone, Mobil)
Tabellenname
Primary Key
FK = Fremdschlüssel
Edit (11.10.2015 10:40): Ich habe die sinnvolle Korrektur/Ergänzung von Pand0r eingefügt, siehe nächster Beitrag. Warum ich die Tabelle nicht selbst erstellt habe ist mir ein kleines Rätsel.
Edit (12.10.2015 01:05): Ich habe ein paar Ergänzungen bei Mashkin geklaut, siehe Beitrag 9, und einige kleine Änderungen an Namen und Reihenfolge vorgenommen.
|
|
|
10/10/2015, 20:31
|
#8
|
elite*gold: 1438
Join Date: Jun 2007
Posts: 3,214
Received Thanks: 758
|
Quote:
Originally Posted by ComputerBaer
Contact
ContactID
Lastname
Firstname
Location
LocationID
Postalcode
Location
Address
AddressID
Street
( Hausnummer? )
FKLocationID
ContactAddress
FKContactID
FKAddressID
Communication
CommunicationID
Number
Typ (Fax, Phone, Mobil als Zahl)
FKContactID
Tabellenname
Primary Key
FK = Fremdschlüssel
|
Zusätzlich dazu
CommunicationType
TypeID
Name
TypeId in Communication Tabelle dann als Fremdschlüssel
|
|
|
10/11/2015, 23:44
|
#9
|
elite*gold: 44
Join Date: May 2010
Posts: 2,053
Received Thanks: 1,747
|
Mein Ansatz wäre folgender:
Contact:
ContactID
Lastname
Firstname
Area: (vorher "Location")
AreaID
(Country)
(State)
Postalcode
Name (vorher "Location")
Address:
AddressID
FKContactID
Street (evtl. noch Number?)
(Optional) (Adresszusatz)
FKLocationID
Communication:
CommunicationID
FKContactID
Identifier
Type (Phone, Fax, Mobile, Pager, ...)
Zusammenhänge:
- Contact has many Addresses
- Contact has many Communications
- Address belongs to Contact
- Address has one Area
- Area has many Addresses
- Area has many Contacts through Address (Address als Pivot)
- Communication belongs to Contact
|
|
|
10/12/2015, 00:56
|
#10
|
Moderator
elite*gold: 558
Join Date: Feb 2010
Posts: 6,546
Received Thanks: 1,418
|
Quote:
Originally Posted by Mashkin
Area: (vorher "Location")
|
"City" wäre vermutlich auch ein passender Name. Immerhin dienen alle Informationen in dieser Tabelle dazu, eine Stadt eindeutig zu identifizieren. Ich habe diese Namensänderung mal bei mir vorgenommen.
Quote:
Originally Posted by Mashkin
Type (Phone, Fax, Mobile, Pager, ...)
|
Solltest du da immer "Phone" oder "Fax" reinschreiben wollen, dann verbraucht das unnötig viel Speicherplatz. Die Lösung mit einer eigenen Tabelle ist da besser. Auch wenn man gezielt alle Telefon- oder(!) Faxnummer haben will, geht das über die TypeID wahrscheinlich schneller.
Quote:
Originally Posted by Mashkin
[*]Address belongs to Contact
|
Ich denke es gibt so viele Häuser, in denen mehr als eine Familie wohnt, dass du ruhig von "Address has many Contacts" ausgehen kannst. Oder?
Quote:
Originally Posted by Mashkin
[*]Communication belongs to Contact
|
Nur als Anmerkung: Das hier macht hingegen Sinn, weil eine Telefon- oder Faxnummer für gewöhnlich nur zu einer Person/Familie gehört und nicht für alle Familien gilt, die im selben Haus wohnen.
|
|
|
10/12/2015, 06:12
|
#11
|
elite*gold: 44
Join Date: May 2010
Posts: 2,053
Received Thanks: 1,747
|
Quote:
Originally Posted by ComputerBaer
"City" wäre vermutlich auch ein passender Name. Immerhin dienen alle Informationen in dieser Tabelle dazu, eine Stadt eindeutig zu identifizieren. Ich habe diese Namensänderung mal bei mir vorgenommen.
|
Schon, allerdings habe ich mich gefragt warum nicht schon im Original von "City" die Rede war.
Quote:
Originally Posted by ComputerBaer
Solltest du da immer "Phone" oder "Fax" reinschreiben wollen, dann verbraucht das unnötig viel Speicherplatz. Die Lösung mit einer eigenen Tabelle ist da besser. Auch wenn man gezielt alle Telefon- oder(!) Faxnummer haben will, geht das über die TypeID wahrscheinlich schneller.
|
Ich würde evtl. den ENUM-Typ in Betracht ziehen - die Beispielnamen wären dann bloß Aliase. Das kommt darauf an, wie viel Flexibilität für Kontaktoptionen nötig sind.
Quote:
Originally Posted by ComputerBaer
Ich denke es gibt so viele Häuser, in denen mehr als eine Familie wohnt, dass du ruhig von "Address has many Contacts" ausgehen kannst. Oder?
|
Das Gegenstück zu "Address has many Contacts" ist aber "Contact belongs to Address" womit nur eine Address pro Contact möglich wäre. Korrekt ist also "Address has many Contacts through ContactAddresses" mit Pivot-Tabelle.
In Anbetracht eines möglichen Adresszusatzes (wie in vielen Kontaktformularen üblich; bspw. "Appartment 3" oder die PostNummer bei Packstationen) könnte man aber auch davon ausgehen, dass Addresses eher spezifisch für einzelne Contacts sind.
Wenn man eine Address für einen Contact löscht, müsste man so stets das Pivot-Element ( ContactAddress) löschen und prüfen, ob das Address-Element evtl. noch von anderen Pivot-Elementen referenziert wird.
Eine Änderungsoperation der Address müsste ebenfalls die Mehrfachbenutzung des Elements in Betracht ziehen, das Element duplizieren und das relevante Pivot-Element ändern.
Es wäre je nach Anwendung (besonders bei Zustelladressen) sogar sinnvoll, auch den Empfängernamen in der Entität zu speichern, anstatt ihn aus dem Contact zu bilden (z.B. bei Verwendung eines Alias/Stichworts):
Address:
AddressID
FKContactID
Line1
Line2
Street (evtl. noch Number?)
FKCityID
|
|
|
10/12/2015, 09:49
|
#12
|
Moderator
elite*gold: 558
Join Date: Feb 2010
Posts: 6,546
Received Thanks: 1,418
|
Quote:
Originally Posted by Mashkin
Das Gegenstück zu "Address has many Contacts" ist aber "Contact belongs to Address" womit nur eine Address pro Contact möglich wäre. Korrekt ist also "Address has many Contacts through ContactAddresses" mit Pivot-Tabelle.
|
Das liegt jetzt daran, dass wir es wohl auf etwas andere Art gelernt haben. Für mich wären es "Ein Kontakt hat mehrere Adressen" und "Eine Adresse kann zu mehreren Kontakten gehören". Aus dieser n:m-Beziehungen ergibt sich dann automatisch, dass eine weitere Tabelle gebraucht wird.
Quote:
Originally Posted by Mashkin
In Anbetracht eines möglichen Adresszusatzes (wie in vielen Kontaktformularen üblich; bspw. "Appartment 3" oder die PostNummer bei Packstationen) könnte man aber auch davon ausgehen, dass Addresses eher spezifisch für einzelne Contacts sind.
|
Das könnte man auch relativ einfach lösen.
ContactAddress
FKContactID
FKAddressID
Additional // Adresszusatz
Quote:
Originally Posted by Mashkin
Wenn man eine Address für einen Contact löscht, müsste man so stets das Pivot-Element (ContactAddress) löschen und prüfen, ob das Address-Element evtl. noch von anderen Pivot-Elementen referenziert wird.
Eine Änderungsoperation der Address müsste ebenfalls die Mehrfachbenutzung des Elements in Betracht ziehen, das Element duplizieren und das relevante Pivot-Element ändern.
|
Da hast du Recht, bei Änderungen an der Adresse oder beim Löschen ist es aufwändiger. Man könnte einfach aus Prinzip keine Adressen Löschen, sondern nur die Beziehungen zu den Kontakten. Und bei Änderungen könnte man auch immer eine neue Adresse anlegen. Später könnte eine andere Aufgabe (1x pro Woche/Monat) nach Adressen ohne Kontakt suchen und diese löschen, falls man das möchte.
Quote:
Originally Posted by Mashkin
Es wäre je nach Anwendung (besonders bei Zustelladressen) sogar sinnvoll, auch den Empfängernamen in der Entität zu speichern, anstatt ihn aus dem Contact zu bilden
|
Das hier wirkt eher wie eine Adressverwaltung für Privatpersonen, die Sache mit den Zustelladressen können wir denke ich außer Acht lassen. Inhaltlich hast du natürlich Recht, dass Rechnungs- und Lieferadressen auch einen anderen Namen beinhalten können, als den des Kontoinhabers.
|
|
|
 |
Similar Threads
|
Datenbank Tabellen 2 Datensätze erzeugen beim Absenden
06/30/2015 - Web Development - 3 Replies
Guten Abend,
Ich möchte auf meinem Skript es so erzeugen das man seine Daten vollständig eingibt und dabei 2 Querys bzw. Datensätze erzeugt werden in jeweil 2 verschiedenen Tabellen.
Beispiel:
Man trägt seine Daten ein und drückt auf Absenden. Dann erscheint ein Datensatz in der Tabelle " Daten " . Jedoch soll noch in einer anderen Tabelle " Log " im gleichen Moment die IP Adresse und den Port eingetragen werden.
Bis zum Schritt mit den Daten habe ich es hinbekommen. Weiter nicht. ...
|
Alle Tabellen in Account Datenbank gelöscht
09/20/2014 - Metin2 Private Server - 1 Replies
Hey leute, ich habe ausversehen Alle Tabellen in der "account" Datenbank gelöscht.
Könnte mir jemand nh leere .sql geben?
Oder irgendwie, sodass ich meine Homepage nutzen kann?
Wollte das Federdesign von Flying men installieren und der sagt mir folgenden fehler:
http://i.epvpimg.com/CGzsf.png
Hoffe mit kann jemand helfen
So sieht die Datenbank derzeit aus:
|
Welche Datenbank?
01/18/2013 - Flyff Private Server - 2 Replies
Nachdem ich schon länger in dem Forum hier rumgeister hab ich mir vorgenommen mich mal selbst an einem P-Server zu versuchen.
Ich benutze die VS 2010 Source von aldimaster nur weiß ich nicht welche der releasten Datenbanken dafür am besten geeignet ist.
Außerdem würde mich interessieren ob das v15 Tutorial von Sedrika dafür noch aktuell ist. Die dort verlinkte Datenbank ist leider nichtmehr online.
|
Welche Tabellen kopieren?
07/12/2011 - Metin2 Private Server - 0 Replies
Hallo,
Ich habe mir ein DynDns Server erstellt , weil mein alter Hamachi Server nicht mehr starten kann.
http://www.elitepvpers.com/forum/metin2-pserver-di scussions-questions/1298096-fehler-connection-refu sed.html
Ich will aber nicht das alle Accounts und Chars mit Gegenstände also das Inventar der Spieler gelöscht wird!
Jetzt ist meine Frage welche Tabellen muss ich kopieren damit die
Accounts , Chars , Items , Gilden , Level erhalten bleiben ?
Danke
|
Welche Datenbank
10/30/2008 - Flyff Private Server - 1 Replies
Heeey^^
Ich wollte mia auch mal einen P-Server machen aba welche DB soll ich nehmen?
Welche ist die "beste"
Mfg Sosouke :D
|
All times are GMT +1. The time now is 02:54.
|
|