Kezdőoldal » Számítástechnika » Programozás » Rekord struktúrás megvalósítás...

Rekord struktúrás megvalósítása az "emberek egymást értékelhetik" modellnek?

Figyelt kérdés

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?



márc. 10. 09:16
1 2
 11/16 A kérdező kommentje:

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

márc. 11. 11:39
 12/16 anonim válasza:
0%
ez még mindig nem jau
márc. 12. 07:14
Hasznos számodra ez a válasz?
 13/16 A kérdező kommentje:
Megigazítod úgy, hogy jó legyen?
márc. 12. 07:27
 14/16 anonim ***** válasza:

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;

márc. 13. 22:36
Hasznos számodra ez a válasz?
 15/16 anonim ***** válasza:
52%

#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.

márc. 13. 22:44
Hasznos számodra ez a válasz?
 16/16 A kérdező kommentje:
Köszönöm szépen.
márc. 15. 04:37
1 2

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!