Frage

Meine aktuelle Datenbank besteht aus den folgenden Tabellen.

Store-Nutzer Bewertungen von bestimmten Fragen -

user( uid(varchar), qid(varchar), rating(varchar), primary key(uid, qid) )

Speichern Sie die Frage und ihre id -

questions( uid(varchar), question(text), primary key(qid) )

Speichern Sie die Beziehung, die Fragen untereinander haben -

related( qid(varchar), related_qid(varchar), relation(varchar), primary key(qid, related_qid, relation) )

Jede Frage in Bezug auf mindestens eine andere Frage; zum Beispiel question1 und question2 könnte, dass im Zusammenhang wird die durchschnittliche Bewertung von question1 erwartet, dass sie größer als die von question2. Diese Beziehung würde in der „verwandten“ Tabelle gespeichert werden, wie

INSERT INTO verwendet (qid, related_qid, Beziehung) VALUES (1, 2, gt)
wobei ‚GT‘ bedeutet „größer als“.

Das Problem ist, dass die Beziehungen kodieren, nicht alle elegant scheint. Hat jemand eine bessere Lösung?

War es hilfreich?

Lösung

würde ich die Typen der Spalten ändern. Ich denke, qid und related_qid würden als ganze Zahlen schnell am besten für Joins und related könnte zu einem Aufzählungstyp geändert werden, wenn man in der Datenbank vorhanden ist (zB MySQL hat ENUM ).

PS:. Es ist auch möglich, eine Aufzählung in Datenbanken zu simulieren, die durch die Verwendung einer Tabelle, die die möglichen Werte zu speichern, keinen Aufzählungstyp und einen Fremdschlüssel zu dieser Tabelle einrichten

Ich bin auch nicht sicher, warum Ihre Benutzertabelle eine zweispaltige Primärschlüssel hat. Ich könnte mir vorstellen, dass eine einzelne Säule ausreichend sein würde, aber es ist schwer, sicher zu sein, ohne mehr über Ihre Anwendung zu kennen.

Anders als diese Punkte scheint es ein vernünftiges Design.

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