Frage

Ich habe gerade ein Projekt und brauchen einen kleinen Schubs in die richtige Richtung gestartet. Hier ist meine Tabellenstruktur:

users         departments     sub-departments
-------       -------         -------
id            id              id
name          name            name
email
password
created
modified

posts         photos        profiles
-------       -------       -------
id            thumbnail     id
content       large         photo_id
created       created       user_id
user_id       profile_id    department_id
profile_id    id            sub-department_id

Die Profile-Tabelle hat etwa 5 weitere Felder, die belanglos sind. Wenn irgendetwas davon ein wenig aus aussieht, ist es wahrscheinlich.

users have one department
users have one sub-department
users have many posts
users have one photo
users have one profile

Was ich „wollte“ tun war, alle meine Tabellen erstelle ich sie alle zusammen Tasten Fremd unter dem Profiltabelle benötigt und bringen. CakePHP Schnipsel meines Profils Modell wie folgt aussieht:

var $belongsTo = array('User', 'Department', 'Sub_Department', 'Photo')
var $hasMany = array('Comment');

Wenn jetzt Sie denken „WTF ist dieser Mist?“ .. ich gleich da bin bei dir. Dieser Verein arbeitet im Gerüstbau. Aber ich will nicht in Schwierigkeiten laufen, wenn ich wirklich anfangen, in meiner Logik anschließen.

Ich bin noch neu in ERD und CakePHP. Soll ich erkläre alles den Benutzer gehört, und unter meiner ProfilesController Abfrage von dort wie $ this-> Profil-> User-> finden ( ‚all‘, array ( ‚enthält‘ => ....)); ?

Ich bin ein wenig an diesem Punkt verloren. Jede Hilfe wäre sehr geschätzt. Wie würden Sie implementieren das?

War es hilfreich?

Lösung

Sie haben gesagt:

  • Benutzer haben eine Abteilung
  • Benutzer haben eine Unterabteilung
  • Benutzer haben viele Beiträge
  • Benutzer haben ein Foto
  • Benutzer haben ein Profil

Funny Terminologie ... Benutzer arbeiten in einer Abteilung und in der Tat, die Arbeit in einer Unterabteilung. Da vermutlich eine Unterabteilung ein Teil nur eine Abteilung ist, brauchen Sie nicht beide Abteilung und Unterabteilung in der Profiltabelle aufzunehmen. In der Tat, wenn Sie beides aufnehmen, haben Sie einen komplexen Zwang zu erzwingen. Also, es sei denn, es ist etwas Sie uns nicht erklärt haben, ist die Abteilung nicht in dem Profil benötigt. Obwohl ich fest, dass es eigentlich kein Querverweis ist zwischen den Abteilungen und Unterabteilungen, so dass eine einzelne Unterabteilung kann offenbar mit mehreren Abteilungen in Verbindung gebracht werden - es gibt nichts von Unterabteilungsnummer 1 zu stoppen, mit einer Person zugeordnet ist, die arbeitet in Abteilung 1 und eine andere Person, die 2. das ist ungewöhnlich in Abteilung arbeitet -. nicht unbedingt falsch, aber nicht die Art und Weise der meisten Organisationen arbeiten

Es gibt eine Versuchung zu fragen „wenn Benutzer zu einem Zeitpunkt nur ein Foto haben, und nur ein Profil hat, warum trennt die aus der Benutzertabelle?“, Aber es gibt einige Gründe für sie getrennt zu halten.

Einer der wichtigsten Punkte in Tabellen Modellierung ist es, die natürlichen Primärschlüssel zu identifizieren. Die ID-Spalten zählen nicht - oder gezählt werden, aber Sie müssen herausfinden, was andere Kombinationen von Spalten eindeutig sein müssen. Zum Beispiel in der Profiltabelle, obwohl es eine Profil-ID ist, muss der Benutzer-ID eindeutig sein nach den Regeln Sie angegeben, so ist in der Tat das Profil ID überflüssig - eine Verschwendung von Platz in der Tat (zweimal, einmal für die Datenspalte, und einmal für den Index, der auf sie erstellt wird). Nun, wenn Sie sich entschieden, dass ein Benutzer mehr Profile im Laufe der Zeit haben konnte und Profile haben eine gültige Periode, oder etwas ähnliches, dann ist die Profil-ID-Spalte macht Sinn -. Aber der letzte Aufzählungspunkt ist nicht mehr gültig

In den Beiträgen Tabelle, warum zeichnen Sie sowohl Benutzer-ID und Profil-ID? Auch hier gibt es Ihnen einen komplexen Zwang zu keinem offensichtlichen Nutzen zu erzwingen. Die Profil-ID ist ausreichend; aus, dass Sie den Benutzer finden.

Sie sagen, dass ein Benutzer ein Foto hat, aber das ist nicht das, was Sie modelliert haben. Sie haben modellieren ‚jedes Profil ein Foto hat, und ein Foto nur von einem Profil verwendet wird.‘ Ebenso in der Tat, haben Sie nicht modelliert der Anwender eine Unterabteilung haben '; Sie haben modellierten Profile eine Unterabteilung haben '. Die meisten wahrscheinlich, dass ein Problem mit schlampig Definitionen, aber Sie müssen vorsichtig sein, weil schlampig Definitionen zu schlampig Datenbanken führen, und schlampig Datenbanken führen zu falschen Antworten und schlechte Leistung.

diese Probleme beheben und Sie würden ein langer Weg sein, eine tragfähige Konstruktion zu haben. Aber ich bin nicht sicher, ich habe alle Anomalien entdeckt, die in diesem Umriss Schema existieren.

Andere Tipps

Ich habe ein Beispielschema / Diagramm zur Verfügung gestellt für Sie suchen.

Ein paar Dinge zu beachten. Die Post-Modell (Beiträge Tabelle) einen Ackerschnecke. Verwenden Sie das Sluggable Verhalten zu handhaben Butzen für Sie zu schaffen.

Die Abteilung Model (Abteilungen Tabelle) hat ein Feld namens department_id, das sollte PARENT_ID werden, aber die Builder-Tool wirft Fehler auf, dass. Ändern Sie es, wie Sie es brauchen. Die LFT, rght und parent_id Felder entsprechen den Baum Verhalten. Mit Hilfe des Baum Verhalten auf der Abteilung Modell erlauben wird, ‚Eltern‘ Abteilungen willkürlich Abteilungen zu gehören. Dies verhindert, dass Sie benötigen eine sub_departments Tabelle als Unterabteilung ist wirklich eine Abteilung mit einem parent_id in einer anderen Abteilung von id gesetzt.

Ein Profil auf Benutzer angebracht und Fotos HABTM Profil, so dass Sie eine unbegrenzte Anzahl von Fotos an einen Benutzer gebunden haben. Ich mag meinen User-Modell schlank halten, mit nur dem, was für die Auth Komponente benötigt wird. Das Profil Modell ist, wo ich würde halten vornamen, nachnamen, Alter, Stadt, etc.

Verwenden Sie einen Hochladen Behavior (MeioUpload) auf dem Fotomodell die Uploads automatisch zu handhaben.

Dies sollte ein Schallausgangspunkt für Sie, Ihr Design von revidieren.

http://cakeapp.com/sqldesigners/sql/centro

Kennwort: centro

Sie können Test CakePHP Datenbank-Design-Konzepte live auf CakeApp.com .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top