Rekord struktúrás megvalósítása az "emberek egymást értékelhetik" modellnek?
Ha emberek egymást értékelhetik (1-5 skálán), de önmagukat nem értékelik, csak egymást, ez milyen rekord adatstruktúrával írható le a legegyszerűbben?
Valamint természetesen az is, hogy könnyedén lekérhetőek legyenek az értékelések.
Szövegesenn miképpen definiálnátok ezt?
Lenne egy "személy" rekord, ebből tömb képezve, feltölteni a névsorral, aztán egy másik táblázat, az összes értékeléssel?
személyek tábla - rekord
név : karakterlánc
azonosító : szám
értékelések - tábla : rekord
személy_azonosító, ki_értékelt, kit_értékelt, értékelés : szám
PK - Primary Key
FK - Foreign Key
Peaple:
- id: number [PK] (vagy adott hosszúságú karakter sor pl. UUID részére, ha nem számot akarsz inkrementálni)
- name: text (vagy más szöveges)
Evaluation:
- from: number [PK, FK] (kitől érkezett)
- to: number [PK, FK] (kire érkezett)
- value: number
Aztán algoritmikusan ellenőrzöd, hogy a (evaulation.from != evaulation.to) feltételt, mert ugye kizárod az azonosat.
Lekérdezni meg lekértedet az egész Evaiulation táblát, a number-eket meg egy halmazként lekérdezett a Peaple-től, hogy meglegyenek a nevek is. Kész is.
---
GitHub Copilottal gyorsban írattam egy SQL-t, amit azért nézz át.
SELECT
p1.name AS from_name,
p2.name AS to_name,
e.value AS evaluation_value
FROM
Evaluation e
JOIN
People p1 ON e.from = p1.id
JOIN
People p2 ON e.to = p2.id
WHERE
e.from != e.to;
#14-es vagyok. Gondoltam az egész kérdést felteszem a GitHub Copilot-nak, és számomra is mondott újat. Van ilyen, hogy CHECK: [link]
Teljes válasza változtatás nélkül. A GYÍK egyik problémája a behúzás kezelése. Most nem bajlódtam a code megosztóval.
Bár a SELECT-re szerintem jobb az előző.
---
A leírtak alapján egy egyszerű adatstruktúra kialakítása MySQL adatbázisban a következőképpen nézhet ki:
Két táblát hozunk létre: Person és Rating.
A Person tábla tartalmazza az emberek adatait, minden személynek van egy egyedi azonosítója (id).
A Rating tábla tartalmazza az értékeléseket. Minden értékeléshez tartozik egy rater_id és egy rated_id, amelyek a Person táblában található személyeket azonosítják. A rater_id az értékelő személyt, a rated_id pedig az értékelt személyt azonosítja. Ezen kívül a Rating tábla tartalmaz egy score mezőt is, amely az adott értékelés értékét tárolja (1-5 skálán).
Az adatbázisban lévő adatok lekérdezésekor a Rating táblából választjuk ki azokat az értékeléseket, amelyek az adott személyhez tartoznak, és ezek alapján számoljuk ki az átlagos értékelést.
Az adatstruktúra tehát a következő SQL utasításokkal hozható létre:
CREATE TABLE Person (
... id INT AUTO_INCREMENT,
... name VARCHAR(255),
... PRIMARY KEY (id)
);
CREATE TABLE Rating (
... id INT AUTO_INCREMENT,
... rater_id INT,
... rated_id INT,
... score INT,
... PRIMARY KEY (id),
... FOREIGN KEY (rater_id) REFERENCES Person(id),
... FOREIGN KEY (rated_id) REFERENCES Person(id),
... CHECK (rater_id != rated_id),
... CHECK (score BETWEEN 1 AND 5)
);
Az értékelések lekérdezése pedig a következő SQL utasítással történhet:
SELECT AVG(score) as average_rating
FROM Rating
WHERE rated_id = :person_id;
Ahol a :person_id helyére az értékeléseket kereső személy azonosítóját kell behelyettesíteni.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!