{"id":265,"date":"2006-08-10T22:58:01","date_gmt":"2006-08-10T22:58:01","guid":{"rendered":"http:\/\/archive.zucklog.net\/?p=265"},"modified":"2006-08-10T22:58:01","modified_gmt":"2006-08-10T22:58:01","slug":"database-ad-oggetti","status":"publish","type":"post","link":"http:\/\/archive.zucklog.net\/?p=265","title":{"rendered":"Database ad oggetti?"},"content":{"rendered":"<div align=\"justify\">Chiunque abbia fatto un po&#8217; di programmazione ad <a href=\"http:\/\/en.wikipedia.org\/wiki\/Object_%28computer_science%29\" target=\"_blank\">oggetti<\/a> sa benissimo che le difficolt&agrave; pi&ugrave; grandi si affrontano quando si deve gestire la <a href=\"http:\/\/en.wikipedia.org\/wiki\/Persistence\" target=\"_blank\">persitenza<\/a> delle informazioni.<br \/>\nQuesto perch&eacute; il nostro modello ad oggetti deve essere salvato su un database che nella totalit&agrave; dei casi &egrave; un <a href=\"http:\/\/en.wikipedia.org\/wiki\/Relational_model\" target=\"_blank\">database relazionale<\/a>. Cio&egrave; fatto di tabelle piatte su cui salvare i dati. Questo porta ad una dicotomia (<a href=\"http:\/\/en.wikipedia.org\/wiki\/Impedance_mismatch\" target=\"_blank\">impedance mismatch<\/a>): da una parte il modello usato dai programmi applicativi dovrebbe essere quanto pi&ugrave; ad oggetti, dall&#8217;altra il modello deii dati sul database deve essere puramente relazionale.<br \/>\nIl problema viene risolto in vari <a href=\"http:\/\/en.wikipedia.org\/wiki\/Object-relational_mapping\" target=\"_blank\">modi<\/a>: si pu&ograve; sacrificare il modello ad oggetti alla logica del database, individuando come oggetti le tabelle dove andranno a salvarsi i dati oppure si pu&ograve; utilizzare uno strato di software che si occupa di fare la conversione tra i due modelli. <br \/>\nEntrambi i metodi hanno, chiaramente, degli svantaggi, sia dal punto di vista delle performance, sia dal punto di vista della manutenibilit&agrave; del codice e della sua chiarezza.<br \/>\nUna soluzione, che gi&agrave; era stata percorsa una decina di anni fa con scarsi risultati, &egrave; quella di avere dei database ad oggetti, che salvano gli oggetti mantenendone le caratteristiche.<br \/>\nUno di questi &egrave; <a href=\"http:\/\/www.db4o.com\/\" target=\"_blank\">db4o<\/a> (db for objects), che &egrave; rilasciato mediante <a href=\"http:\/\/www.gnu.org\/licenses\/gpl.html\" target=\"_blank\">GPL<\/a> per scopi non commerciali (una licenza uguale a quella di <a href=\"http:\/\/www.sql.org\" target=\"_blank\">MySQL<\/a>). Scritto in versione <a href=\"http:\/\/java.sun.com\" target=\"_blank\">java<\/a> e <a href=\"http:\/\/www.microsoft.com\/net\/default.mspx\" target=\"_blank\">.NET<\/a>, fornisce al programmatore delle semplici API che consentono di salvare oggetti complessi direttamente con una istruzione.<br \/>\nCerto si perde tutto l&#8217;SQL, la teoria sulle normalizzazioni e gli <a href=\"http:\/\/en.wikipedia.org\/wiki\/Relational_database_management_system\" target=\"_blank\">RDBMS<\/a>, ma ci si pu&ograve; fare un pensierino per modelli ad oggetti di una certa complessit&agrave;.<br \/>\n<a href=\"http:\/\/en.wikipedia.org\/wiki\/ODBMS\" target=\"_blank\">Qui<\/a> e <a href=\"http:\/\/www.itmanagersjournal.com\/article.pl?sid=06\/08\/09\/1528244\" target=\"_blank\">qui<\/a> approfondimenti sul tema.<br \/>\nDottori, non preoccupatevi, sto bene (si fa per dire, naturalmente), &egrave; che volevo un po&#8217; fare il <a href=\"http:\/\/www.andreabeggi.net\/\" target=\"_blank\">Beggi<\/a>, oppure il <a href=\"http:\/\/www.fullo.net\/blog\" target=\"_blank\">Fullo<\/a>.\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Chiunque abbia fatto un po&#8217; di programmazione ad oggetti sa benissimo che le difficolt&agrave; pi&ugrave; grandi si affrontano quando si deve gestire la persitenza delle informazioni. Questo perch&eacute; il nostro modello ad oggetti deve essere salvato su un database che nella totalit&agrave; dei casi &egrave; un database relazionale. Cio&egrave; fatto di tabelle piatte su cui &hellip; <a href=\"http:\/\/archive.zucklog.net\/?p=265\" class=\"more-link\">Leggi tutto<span class=\"screen-reader-text\"> &#8220;Database ad oggetti?&#8221;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[12],"tags":[],"class_list":["post-265","post","type-post","status-publish","format-standard","hentry","category-informatica"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/p4jVpV-4h","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"http:\/\/archive.zucklog.net\/index.php?rest_route=\/wp\/v2\/posts\/265","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/archive.zucklog.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/archive.zucklog.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/archive.zucklog.net\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/archive.zucklog.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=265"}],"version-history":[{"count":0,"href":"http:\/\/archive.zucklog.net\/index.php?rest_route=\/wp\/v2\/posts\/265\/revisions"}],"wp:attachment":[{"href":"http:\/\/archive.zucklog.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=265"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/archive.zucklog.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=265"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/archive.zucklog.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=265"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}