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:

