sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur man bygger relationstabeller på en dubbelsidig marknadsplats

Du måste förstå det grundläggande sättet att registrera information relationellt, dvs. i tabeller.

Hitta tillräckligt med tabeller

Ha bara en bastabell för varje påstående du behöver för att beskriva en affärssituation:

User(user_id,name,...)
    // User [user_id] is named [name]
Contacted(contact_id,item,offer_id)
    // user [contact_id] was contacted re item [item] offered by user [offer_id]
...etc...

Parametrarna för satsen är kolumnerna i tabellen.

Om du vill prata om de delar av något som du tror har flera delar (heterogena eller homogena) betyder det bara att vissa påståenden kommer att involvera en sak och dess delar:

table request(request_id,start_date,end_date,...)
    // [request_id] goes from [start_date] to [end_date] and ...
table requested(request_id,item_id,person_id,...)
    // person [person_id] requested item [item_id] in request [request_id]

Vad finns i en tabell

En bastabells värde är raderna som gör dess påstående sann. (Varje frågeunderuttryck har också en sats, och dess värde är raderna som gör dess sats sann.)

Blanda inte ihop tabelluppgifter med affärsregler. Affärsregler anger sanningar. Men en tabellsats är ett påstående som någon tupel gör sant (och går i tabellen) eller falskt (som lämnas utanför tabellen). Alla sanna och falska påståenden från tabellerna berättar allt du behöver veta om verksamheten. Affärsreglerna kommer aldrig att motsäga dem. (Eftersom de alltid är sanna.)

Arrangera om till bättre tabeller

En nyckel är en uppsättning kolumner som alla andra kolumner är sådana funktioner av men ingen av vars delmängder har den egenskapen. Ett bord kan ha mer än en nyckel.

För att göra en databas lättare att uppdatera och fråga bör du bryta upp vissa påståenden som är andra påståenden som AND förenar. Bryt upp tills varje påstående består av ett påstående endast om nyckelkolumner OCH med påståenden i denna form:

[my_column]=my_function([key_k_column_1],[key_k_column_2],...)

där key_k_column_1,... är kolumner med samma nyckel key_n.

(En sådan tabell är "i femte normalform" och ämnet är "normalisering".)




  1. Hur visar jag bilder från MySQL-databas i ett JavaScript-bildskjutreglage?

  2. Överför variabel till GoLang Query

  3. Användarkontohantering, roller, behörigheter, autentisering PHP och MySQL - Del 6

  4. Portera en Ruby/Rails/MRI-app till JRuby