Frage

Das Datenbank-Schema für die Tabelle ist effizienter und warum?

"Users (UserID, UserName, CompamyId)"
"Companies (CompamyId, CompanyName)"

ODER

"Users (UserID, UserName)"
"Companies (CompamyId, CompanyName)"
"UserCompanies (UserID, CompamyId)"

Angesichts der Tatsache, dass Benutzer und Unternehmen haben eins-zu-eins-relation.

War es hilfreich?

Lösung

Sicher, der frühere effizienter ist angesichts dieser Einschränkung.Für immer die gleichen Informationen, Sie werden haben eine geringere Anzahl von Verknüpfungen in Abfragen.

Andere Tipps

nun, das ist ein bisschen eine offene Frage und hängt von Ihren business-Regeln.Die erste option erlaubt nur einem Unternehmen zugeordnet werden, der zu einem Benutzer.du bist die Definition einer viele-zu-eins-Beziehung.

Das zweite schema definiert eine viele-zu-viele-Beziehung, die ermöglicht, dass mehrere Benutzer zugeordnet werden, der zu mehreren Unternehmen.

Sie lösen verschiedene Probleme, und je nachdem, was Sie versuchen zu lösen, wird bestimmen, welche schema, das Sie verwenden sollten.

Streng genommen von einer "Transaktionen" point-of-view, das erste schema wird schneller, da Sie nur verpflichten müssen, eine Zeile für ein user-Objekt assoziiert werden, um ein Unternehmen und zum abrufen der Unternehmen, dass Ihre Benutzer arbeitet für die erfordert nur eine Verknüpfung, aber die zweite Lösung skaliert besser, wenn sich Ihre geschäftlichen Anforderungen ändern und Sie müssen mehrere Unternehmen assigend zu einem Benutzer.

Wie immer, es hängt davon ab.Ich persönlich würde gehen mit Antwort Nummer eins, da hätte es weniger verbindungen und wäre leichter zu pflegen.Weniger Verknüpfungen bedeuten sollte, dass es erfordert weniger Tabelle und einen index-scan.

SELECT userid, username, companyid, companyname
FROM companies c, users u
WHERE userid = companyid

Viel besser als...

SELECT userid, username, companyid, companyname
FROM companies c, users u, usercompanies uc
WHERE u.userid = uc.userid
AND c.companyid = uc.companyid

Die beiden schemas können nicht verglichen werden, Sie haben unterschiedliche Beziehungen haben, sollten Sie proablly schauen, was die Skillung ist für die Tabellen und dann arbeiten Sie heraus, welche für die Beziehung benötigt werden.

Die erste impliziert, dass ein Benutzer kann nur Mitglied werden eine Unternehmen (eine belongs_to Beziehung).In der Erwägung, dass das zweite schema impliziert, dass ein Benutzer kann ein Mitglied von vielen Unternehmen (eine has_many-Beziehung)

Wenn Sie nach einem schema (oder später) unterstützen eine has_many Beziehung, die Sie wollen, gehen Sie mit der zweiten.Aus dem Grund vergleichen:

//select all users in company x with schema 1
select username, companyname from companies
inner join users on users.companyid = companies.companyid
where companies.companyid = __some_id__;

und

//select all users in company x with schema 2
select username, companyname from companies
inner join usercompanies on usercompanies.companyid = companies.companyid
inner join users on usercompanies.userid = users.userid
where companies.companyid = __some_id__;

Sie haben eine extra-join für die Tabelle auswählen.Wenn Sie nur wollen, die belongs_to Beziehung dann die zweite Abfrage nicht mehr Arbeit, als es sein sollte - und so macht es weniger effizient.

Ich denke du meinst "viele zu eins", wenn es um Anwender und Unternehmen - es sei denn, Sie planen, mit einem einzigartigen Unternehmen für jeden Benutzer.

Um deine Frage zu beantworten, gehen Sie mit dem ersten Ansatz.Ein kleiner Tisch zu speichern, reduziert Raum und machen Ihre Abfragen verwenden weniger JOIN-Befehle.Auch, und noch wichtiger, es richtig passt zu Ihrem gewünschten Eingang.Das Datenbank-schema beschreiben soll, das format für alle gültigen Daten - wenn es passt das format als gültig angesehen werden.Da ein Benutzer kann nur eine Firma ist es möglich zu haben, falsche Daten in Ihre Datenbank, wenn Sie das zweite schema.

Wenn Benutzer und Unternehmen wirklich haben eine eins-zu-eins Beziehung, dann müssen Sie nur eine Tabelle:

(ID, UserName, CompanyName)

Aber ich vermute, Sie meinte wirklich, dass es eine eins-zu-viele Beziehung zwischen user und Unternehmen - einen oder mehrere Benutzer eine pr-Firma, sondern nur eine pr-Firma Benutzer.In diesem Fall die zwei-table Lösung richtig ist.

Wenn es gibt ein viele-zu-viele Beziehung (ein Unternehmen kann mehrere Benutzer und kann ein Benutzer an mehreren Firmen), dann die drei-table Lösung richtig ist.

Beachten Sie, dass Effizienz ist nicht wirklich das Problem hier.Seine Art der Daten bestimmt, welche Lösung Sie verwenden sollten.

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