wiki:RelationalModel

Релационен модел

ЕР Дијаграм

Дополнителен Опис

  • Табелите Roles и Permissions служат за дефинирање на сите достапни улоги и пермисии во системот, соодветно, додека User_Roles и Role_Permissions ги чуваат сите ролји доделени на корисниците и сите пермисии доделени на ролјите, соодветно. Resource_Shares служи за чување некои отстапки од овие правила, на пример доколку Корисник А сподели приватна плејлиста со Корисник Б, таа информација ќе се чува во оваа табела и иако плејлистата е приватна Корисник Б сепак ќе има пристап до неа.
  • Во табелите Songs, Albums и Resource_Shares имаме подмножества на foreign keys коишто се nullable, но доколку сите од нив се null тогаш тој запис во табелата не би правел смисла. Станува збор за следните подмножества:
    • Songs(published_by_artist_id, published_by_label_admin_id)[*] - информација за кој ја објавил песната
    • Albums(published_by_artist_id, published_by_label_admin_id) - информација за кој го објавил албумот
    • Resource_Shares(song_id, playlist_id, album_id) - ресурс на кој се однесува дадената дозвола
    • Resource_Shares(user_id, role_id) - дали улогата ја додаваме на конкретен корисник или на одредена ролја

За секое од наведените подмножества има меѓусебна исклучивост, поточно точно еден од клучевите мора да биде non-null. Ова не можеме да го опфатиме во релациониот модел, но истото ќе биде опфатено понатаму во DDL скриптата.

[*] Во дијаграмот има грешка при именување на вториот атрибут (Label_Adminsid треба да биде published_by_label_admin_id).

  • Чуваме табели Playback_Sessions и Song_Streams. Причината за ова е бидејќи Playback_Sessions ги чува сите сесии каде некој корисник слушал некоја песна, макар и да ја слушал само неколку секунди или ја прескокнал додека барал некоја друга. Јасно е дека доколку ова го чуваме како едно слушање на песната ќе води до многу инфлаторни податоци, па затоа ќе поставиме одреден праг кој треба да се постигне за една сесија да се смета за валидно слушање (пр. 30 секунди). За секоја од овие валидни сесии при надминување на прагот ќе следи запис во Song_Streams табелата. Оваа табела намерно е денормализирана (содржи редундантни податоци за streamed_at, song_id кои би можеле да се земат и со join преку playback_session_id) со цел сите аналитики околу бројот на слушања да се прават директно на оваа табела бидејќи нема да ги содржи оние записи коишто не ни се од интерес.
  • Song_Relationships табелата служи за опфаќање на различни изданија од песни - нешто како Remix, Cover, Only Instrumental и слично, што е честа практика во индустријата. Ова би се постигнало преку додавање на нов запис во Songs со новото издание на песната, а потоа додавање на соодветен запис во Song_Relationships, каде relationship_type ја опишува релацијата за која станува збор, пример некој од горенаведените термини.
Last modified 11 hours ago Last modified on 04/17/26 07:34:47

Attachments (1)

Download all attachments as: .zip

Note: See TracWiki for help on using the wiki.