CronJob-Service
bei SELFPHP mit ...
|
+ minütlichen Aufrufen
+ eigenem Crontab Eintrag
+ unbegrenzten CronJobs
+ Statistiken
+ Beispielaufrufen
+ Control-Bereich
Führen Sie mit den CronJobs von
SELFPHP zeitgesteuert Programme
auf Ihrem Server
aus. Weitere Infos
|
:: Anbieterverzeichnis ::
Globale Branchen
Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP
:: Newsletter ::
Abonnieren Sie hier den kostenlosen
SELFPHP Newsletter!
|
MySQLi/PDO/(MySQL) Anfänger, Fortgeschrittene oder Experten können hier Fragen und Probleme rund um MySQLi/PDO/(MySQL) diskutieren |
02.10.2003, 08:03:19
|
|
Junior Member
|
|
Registriert seit: Apr 2002
Beiträge: 284
|
|
datenbank design eines adressbuches
hallo
ich suche seit geraumer zeit sehr viele webseiten ab um mal eine vernunftige idee/vorlage zu sehen für ein datenbank design einer ordentlichen adressverwaltung.
die mehrere emails, adressen je nach priorisierungung innerhalb von benutzergruppen und vergabe von kategorien zu diesen daten verwalten kann. hat jemand ggf einen link,oder tip in diese richtung?
meine idee ist es die adressdaten komplett in seine einzelteile zu zerlegen und entsprechende einzelne tabellen für email, anschriften, namen , rufnummen, extra features und notizen anzulegen und nur noch mit IDs zu arbeiten. allerdings komme ich nicht weiter wenn ich mir vorstelle das ich nun die IDs dieser daten zusammen habe, und diese nochmals auf benutzergruppen oder besondere kategorien(genre/labels) aller-daten oder nur meiner eigenen benutzergruppe abwickeln möchte. bzw: auch in abgängikeit von PRIVAT:GRUPPE:GLOBAL(öffentlich) der einzelnen einträge: zb: die eine email ist privat die zweit email einer person kann von der gruppe eingesehen werden...)
das würde bedeuten das ich den besitzer sowie rechte zu jedem daten satz einer tabelle speichern müsste... was wiederum eigentl. kein gutes performantes design ist oder?
bsp
tabelle email
id - email - privat - gruppe - öffentlich - besitzer
auto email Y/N Y/N Y/N Y/N
(es hängt am abstakten denken :-)
gruss flobee
__________________
~~~~~~~~~~
Geändert von flobee (02.10.2003 um 08:26:44 Uhr)
|
02.10.2003, 08:20:23
|
|
Member
|
|
Registriert seit: Feb 2002
Ort: Österreich / Wien
Alter: 44
Beiträge: 992
|
|
hi flobee
ich setzt mich heute noch hin und mach dir mal ein Layout
Wenn ich das richtig gelesen habe, hast du:
einen Benutzer, der befindet sich in einer Gruppe.
der Eintrag einer zB Email-Addresse, kann dann Öffentlich, Gruppen, oder Persönlich sein.
Fragen:
Kann ein Benutzer in mehreren Gruppen sein.
gibt es nur eine Öffentliche Email-Addy, oder mehrere.
|
02.10.2003, 08:51:39
|
|
Junior Member
|
|
Registriert seit: Apr 2002
Beiträge: 284
|
|
yo! das ist aber nett!!!
hast richtig verstanden!
ein benutzer kann u.u auch in mehreren gruppen sein mindestens aber auch admins, moderatoren, andere, insofern ja.
anzahl der emails oder der anschriften ist unbestimmt! anschriften werden wiederum durch adresstypen definiert (in der regel 3, privat, büro, lieferanschrift) bei email sind es mind eine "standart" email2, mail3 emailN ....wobei ja keine doppelten datenbank einträge vorkommen sollen....
die idee war zusätzlich (wenn alles total einzeln liegt): alte einträge weitehin speichern und immer nur die letzten zb 3 zeilen anzeigen, (wenn vorhanden (LIMIT 3)). bei adressänderungen hat man dann immer noch mal die möglichkeit die mutter des freundes zu "erwischen" falls die aktuelle adresse ungültig wird. quasi ein "tracking" der daten.
ja: der benutzer ist ein gruppen-mitglied, und nach möglichkeit möchte ich zu meinem adressdatenen satz bestimmte einträge, notizen PRIVAT lassen (read/write), GRUPPE (read/write) und ÖFFETLICH (read/write)
habe eben noch einen nachtrag geschrieben wo man dann sieht das das eigentl. schon wieder unlogisch wird wienn man in jede tabelle die rechte plaziert (bzw wirds dann kein "ordentl. design und mehr speicher kostet es ggf auch oder):
Code:
tabelle email
id - email - privat - gruppe - öffentlich - besitzer
auto email Y/N Y/N Y/N Y/N
UNIQUE= email (minimum)
gruß flobee
__________________
~~~~~~~~~~
Geändert von flobee (02.10.2003 um 09:06:44 Uhr)
|
02.10.2003, 22:33:33
|
|
Member
|
|
Registriert seit: Feb 2002
Ort: Österreich / Wien
Alter: 44
Beiträge: 992
|
|
Hi flobee
Sorry, ich komm erst morgen dazu.
Hatte eine Meeting verschwitzt und am Abend noch ein Geschäftsessen gehabt.
Muss also noch etwas warten
|
02.10.2003, 22:58:28
|
|
Junior Member
|
|
Registriert seit: Apr 2002
Beiträge: 284
|
|
yo! also das ist meine idee, aber irgendetwas sagt mir das das schon ZU VIEL ist (zuviel speicher), und auch irgendwie falsch da ich beispiesweise ja keine doppelten emailadressen haben möchte, es sein denn sie sind "privat"...oder bekomme ich das so gelösst?
PHP-Code:
=== Name , Personen daten
ID | Anrede:Hr,Fr, | titel: Prof,Dr.,Dr.med., | VORname | 2VORname | NACHname | Geb.tag | besitzer/ersteller-ID
=== anschrift
ID | firma | Strasse | Nr. | PLZ | Stadt | Land | TYPE:privat,büro,liefer... | Standard-adr: Y/N | besitzer/ersteller-ID
=== emails
ID | emailadresse | Standard-adr: Y/N | besitzer/ersteller-ID
=== notitzfelder
ID | notiz-A | notiz-B | besitzer/ersteller-ID
=== Adressbuch -> besitzer/ersteller
besitzer/ersteller-ID | tabelle-Name:privat,gruppe,public | tabelle-anschrift:privat,gruppe,public | tabelle-emails:privat,gruppe,public | tabelle-notitzfelder:privat,gruppe,public |
__________________
~~~~~~~~~~
Geändert von flobee (02.10.2003 um 23:26:25 Uhr)
|
03.10.2003, 16:30:52
|
Anfänger
|
|
Registriert seit: Oct 2003
Ort: CH-Bolligen
Beiträge: 2
|
|
Warum nicht in den Teiltabellen angeben, welche "Klasse" sie haben?
Warum gibst du nicht z.B. direkt in den Tabellen für die Anschriften, mailadreses.... für jede Klasse (Public, prvate, global) ein Boolean-Feld dazu, wo du angibst, ob dieser Datensatz in dieser Klasse erscheinen soll oder nicht? so kannst du ein DS für alle Klassen, oder drei, für jede Klasse einen anderen, oder jede beliebige Kombination davon haben.
Du musst einfach beim Abfragen immer mitabfragen, ob die KLasse die du möchtest gesetzt ist.
Das funktioniert aber nur, wenn du die Klassen statisch fix definiert hast, andernfallst musst du ein modell wählen, dass du evtl von VBA her kennst. Jede Klasse hat einen anderen numerischen wert, der kombiniert eindeutig aufschlüsselbar ist (s.unten) und speicherst diesen Wert in ein Feld. so kannst du jederzeit Klassen anfügen.
Werttabelle:
Global: 1
private: 2
public: 4
neue1: 8
wenn nun z.B. ein Eintrag private und global ist, hat er den wert 3
wenn nun z.B. ein Eintrag private und public ist, hat er den wert 6
wenn nun z.B. ein Eintrag public und global ist, hat er den wert 5
wenn ein eintrag global, public und private ist, hat er den wert 7
...
..
.
ist einfach beim abfragen nicht mehr ganz so einfach. wie du vielleicht bemerkt hast, basiert das ganze auf dem binären Zahlensystem, und irgendwie so must du auch die "rückumwandlung" zum testen ob dein Wert den du willst(z.b. global) enthalten ist. jeder Wert entspricht quasi einer Binären stelle
|
03.10.2003, 16:41:50
|
|
Member
|
|
Registriert seit: Feb 2002
Ort: Österreich / Wien
Alter: 44
Beiträge: 992
|
|
Hi @ll
wie versprochen habe ich dir ein Design überlegt -> siehe unten
Ein User kann in mehreren Gruppen sein.
Ein User kann mehrere Email-Addy's haben
diese können entweder privat, global oder gruppen bezogen sein.
Falls sie Gruppen-Bezogen ist, wird die jeweilige GroupID gespeichert.
durch ein paar einfache SQL kannst du nun zeigen wer was sehen draf.
|
03.10.2003, 18:14:45
|
|
Junior Member
|
|
Registriert seit: Apr 2002
Beiträge: 284
|
|
@uop
ufff, also, frag mich nicht, denn es war ja meine frage nach einem "logischen" DB-aufbau!
binäre IDs geht klar aber den rest wie "DS für alle Klassen", VBS hab ich nicht wirklich verstanden!
@Nev
ersteinmal vielen dank!
kannst du mir die abkürzungen kurz erläutern? NN - fortlaufend, PK,PFK ?
aber auch an deinem beispiel stellt sich mir die frage: eigentl. wird dort zu viel information in der email tabelle gespeichert ...oder?
meine frage vielleicht falsch verstanden und ich hab vielleicht die falsche vorlage geliefert!?
zum einen muss ich jetzt ersteinmal die DB verstehen, bzw sehe ich das richtig: tabelle group== verteilerlisten!? dan hab ich es verstanden!
allerdings ist nun noch die frage des "doppelte einträge" vermeiden nicht behandelt, wenn ich das richtig sehe , oder?
nach dem motto: ersteller==besitzer , gruppe kann je nach privat,gruppe,global shen/editieren.
erstellt ein anderen benutzer den gleichen email eintrag wird nur die email id "aboniert", löscht der besitzer die email wandert der besitzer zum nächsten bis kein benutzer die email mehr verwendet.
editiert ein gruppen member die email, wird ein neuer eintrag (falls neue email) érstellt sofern er nicht besitzer ist anderen falls wird wiederum die geänderte email aus der DB aboniert.
und das auf adressen , telefon tabellen etc...
uff.. das sind viele anforderungen , was ist davon realistisch?
gruß flobee
__________________
~~~~~~~~~~
|
04.10.2003, 08:59:36
|
|
Junior Member
|
|
Registriert seit: Apr 2002
Beiträge: 284
|
|
hi nev
ich hab deine tabelle mal anders aufgemalt um es mir anders zu verdeutlichen und frage mich was mit der user-group tabelle ist, denn die verstehe ich nicht! die einträge für usergroup_userID und usergroup_groupID sowie email_userID in der email tabelle. kannst du mir da eine info geben was dessen aufgabe ist?
PHP-Code:
=== USER
ID | name | pass
=== USERGROUP
ID | usergroup_title | usergroup_userID | usergroup_groupID | groupID | userID
=== GROUP (verteiler)
ID | groupname | owner(usergroupID)
=== EMAIL (dest, on user)
ID | userID | groupID | email_userID | email_addr | _priv(int) | _group(int) | _global(int)
gruß flobee
__________________
~~~~~~~~~~
|
04.10.2003, 14:13:01
|
|
Member
|
|
Registriert seit: Feb 2002
Ort: Österreich / Wien
Alter: 44
Beiträge: 992
|
|
Hi @gain
Beim Abzeichnen des DB-Shemas hast du ein paar keine Fehler gemacht.
Code:
=== USER
ID | name | pass
=== USERGROUP
ID | usergroup_title | usergroup_userID(int) | usergroup_groupID(int)
=== GROUP (verteiler)
ID | groupname
=== EMAIL (dest, on user)
ID | email_userID(int) | email_addr | _priv(int) | _group(int) | _global(int)
Warum gibt es den Table [USERGROUP]???
Du definierst im Table Group verschiedene Gruppen.
Ein User kann dann in mehreren Groupen sein,
Um diese Verknüpfung herzustellen, brauchst du einen Link-Table -> USERGROUP
Hier wird der User in die jeweiligen Groups geschmissen.
das heißt: es ist eine 1:n beziehung User:UserGroup
und es ist eine 1:n beziehung Group: UserGroup
Wie definiert sich eine Email-Addy?
Jede Addy hat mal eine eindeutige ID
zusätzlich einen User => email_userID
Email_addr, das ist die jeweilige Adresse
_priv gibt an ob sie Privat ist
_global ob sie öffentlich ist
_grop ob sie für eine Group sichtbar ist
wenn _group gesetzt ist, wird hier die ID der Group definiert.
So können alle User die auch in diese Group fallen diese auch sehen.
was du übernommen hast, waren die einzelen Schlüsseln die für die Abbildung notwenig waren
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 12:08:48 Uhr.
|