Archenet Database
Da Wikipedia, l'enciclopedia libera.
Il database di archenet è già attivo. Attualmente, tuttavia, è creato in Plone (su Zope + database relazionale). L'esperienza maturata ci fa preferire il passaggio ad un altro framework: Ruby on Rails (RoR). I dati, in RoR, sono memorizzati anch'essi in database relazionale. Si recupera, dunque, parte del lavoro fatto.
Vediamo di seguito la struttura proposta per il nuovo database
Contents |
Premessa
Il database è composto principalmente da 4 tabelle, corrispondenti ai 4 elementi (oggetti) principali del database:
- Organizzazioni
- Persone (facce)
- News
- Eventi
Questi elementi sono legati tra loro da diverse relazioni, vediamole nel dettaglio.
- Ogni Organizzazione ha zero, una o più Persone
- Ogni Organizzazione ha zero, una o più News
- Ogni Organizzazione ha zero, uno o più Eventi
ora, è vero che
- Ogni News appartiene ad una sola Organizzazione
- Ogni Evento appartiene ad una sola Organizzazione
ma non è (sempre) vero che
- Ogni Persona appartiene ad una sola Organizzazione (ci possono essere difatti persone che appartengono a più Organizzazioni, cioè non è vero che se una persona appartiene ad una organizzazione, non possa anche appartenere ad altre organizzazioni).
La tabella Organizzazioni e la tabella Persone sono difatti legate da una relazione molti a molti, mentre la tabella Organizzazioni e le tabelle News ed Eventi sono legate da relazioni uno a molti
Un ragionamento analogo vale per le tabelle:
- GeneralContacts
- MusicProgrammingContacts
- MusicProgrammingContacts
La tabella GeneralContacts mi permette di sapere chi, tra le persone del database, rappresenta una persona di riferimento per contattare una certa Organizzazione. Ogni Organizzazione ha zero, una o più Persone con il ruolo di GeneralContacts, ma non è vero che se una persona è GeneralContacts di una organizzazione non lo possa anche essere di un'altra. Quindi la tabelle GeneralContacts è in relazione molti a molti con le tabelle Organizzazioni e Persone.
Stesso dicasi per MusicProgrammingContacts e MusicProgrammingContacts.
La tabella
- LegalRepresentative
è invece in chiara relazione uno a molti con la tabella organizzazione (ogni organizzazione ha uno ed uno solo responsabile legale)
Infine la tabella
- FriendsOf
E' una chiara tabelle molti a molti che memorizza le coppie di persone che si conoscono.
Organizations
La tabella Organizations ha come elementi (oggetti) le organizzazioni, e come variabili (attributi) le caratteristiche principali di una organizzazione.
Ogni organizzazione ha degli elementi nelle tabelle faces, news ed events.
Schema:
id primary key Name, stringa FullName, stringa OrganisationType, stringa WebAddress, stringa Photo, image Logo, image ShortDescription, text Why, text InitiatorsProfile, text * AddressField("BuildingAddress", Latitude, float Longitude, float * AddressField("PostalAddress", * AddressField("LegalAddress", Phone1, stringa Phone2, stringa Fax, stringa EmailAddress1, stringa EmailAddress2, stringa Activities, LinesField OtherActivities, stringa HaveBuilding, stringa SquareMeters, integer Facilities, LinesField OtherFacilities, text PercentageOfWheelChairAccess, integer OpeningDate, stringa FormerUse, stringa ContractType, stringa ProprietyOfSpace, stringa NotesOnBuilding, text Open, stringa PercentageOfFreeEvents, integer AverageTicketPrice, float CardIsMandatory, stringa CardFee, float CardAffiliateOrganisation, stringa AverageMembersPerYear, integer SelfFinanceSupport, integer PublicFinanceSupport, integer PrivateFinanceSupport, integer SponsorshipFinanceSupport, integer OthersFinanceSupport, integer Network, text Notes, text
Link a feed news RSS, stringa Link a feed events iCal, stringa Num. of employee Yearly gross budget
Nella attuale versione del database ci sono anche i seguenti campi (che ora metteremo in apposite tabelle: vedi oltre)
* ReferenceField("LegalRepresentative", * ReferenceField("GeneralContacts", * ReferenceField("MusicProgrammingContacts", * ReferenceField("WebmasterContacts",
Faces (persone)
La tabella Faces ha come elementi (oggetti) le persone, e come variabili (attributi) le caratteristiche principali di una persona.
Ogni persona (face) appartiene ad un elemento della tabella Organizations.
Schema:
id primary key organization_id StringField('Firstname', StringField('Surname', ComputedField('Fullname', StringField('Nickname', ImageField('Photo', StringField('Username', StringField('EmailAddress1', StringField('Skype', StringField('BusinessPhone', StringField('BusinessFax', StringField('HomePhone', StringField('MobilePhone', AddressField('PostalAddress', StringField('WebAddress', ReferenceField('Employer', StringField('JobTitle', StringField('Gender', DateTimeField('BirthDate', TextField('Notes',
News_items
La tabella News_items ha come elementi (oggetti) le notizie, e come variabili (attributi) le caratteristiche principali di una notizia.
Ogni notizia (news_item) appartiene ad un elemento della tabella Organizations.
Schema:
id primary key organization_id titolo link a news descrizione categoria pubDate (data di pubblicazione) utente che ha creato la news link (url) all'immagine
Come si vede lo schema include le variabili tipiche di un RSS. Ecco ad esempio un RSS di wordpress
preambolo (unico per tute le news)
<channel> <title>TITOLO SITO WEB</title> <link>LINK SITO WEB</link> <description>BREVE DESCRIZIONE SITO WEB...</description> <pubDate>Tue, 03 Apr 2007 16:05:02 +0000</pubDate> <generator>http://wordpress.org/?v=2.1</generator> <language>en</language>
ecco la news (i campi necessari per le specifiche RSS 2.0 sono title, link, description)
<item> <title>TITOLO NEWS</title> <link>LINK A NEWS</link> <description><![CDATA[Descrizione ecc. ecc. ecc. ecc. ecc. ecc. ecc. ecc. ecc. [...]]></description> <comments>LINK A PAGINA COMMENTI</comments> <pubDate>Tue, 03 Apr 2007 15:30:01 +0000</pubDate> <dc:creator>admin</dc:creator> <category>Categoria</category> <guid isPermaLink="false">http://www.migramedia.it/nuovo/2007/04/03/39/ </guid> <content:encoded><p>Descrizione ecc. ecc. ecc. ecc. ecc. ecc. ecc. ecc. ecc.</p></content:encoded>Insert non-formatted text here <wfw:commentRss>http://www.migramedia.it/nuovo/2007/04/03/39/feed/</wfw:commentRss> </item>
chiusura del feed
</channel> </rss>
Events
La tabella Events ha come elementi (oggetti) gli eventi, e come variabili (attributi) le caratteristiche principali di un evento.
Ogni evento (event) appartiene ad un elemento della tabella Organizations.
Schema:
id primary key luogo: (stato, città, provincia, indirizzo, coordinate geografiche) titolo evento data e ora inizio l'evento data e ora fine evento link a evento descrizione categoria pubDate (data di pubblicazione) utente che ha creato l'evento link (url) all'immagine biglietto
Come si vede lo schema include le variabili tipiche del protocollo iCalendar: