﻿<?xml version="1.0" encoding="utf-8"?><rss version="2.0" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule"><channel><title>Stritar's chronolog</title><link>http://www.stritar.net</link><description>Category: Cloud</description><copyright>Neolab d.o.o.</copyright><ttl>5</ttl><item><title>Solving global and local records in SaaS database design</title><pubDate>Sat, 20 Jul 2013 23:50:56 GMT</pubDate><description>&lt;p&gt;Lately, we've been seriously considering developing a &lt;a href="http://www.neolab.si/" class="more" target="_Blank" title="Neolab, Software Development"&gt;new version of our framework&lt;/a&gt;. This one is already a few years old, and besides other problems it's facing, it lacks one very important thing - it's &lt;b&gt;not suited for SaaS&lt;/b&gt; &lt;a href="http://en.wikipedia.org/wiki/Software_as_a_service" class="more" target=_blank" title="Software as a service"&gt;(Software as a Service)&lt;/a&gt; applications. Often, we would like to host a few simple projects (like multiple web pages) in a single database, but we are also thinking about developing a product / service, which we could &lt;b&gt;offer to multiple clients&lt;/b&gt;. Making &lt;a href="http://www.solidcageblog.com/2009/11/top-5-database-design-considerations.html" class="more" target="_blank" title="Top 5 Database Design Considerations For SaaS Software"&gt;a product for different clients&lt;/a&gt; that would &lt;b&gt;live in the same database&lt;/b&gt; is not simple, and requires an architecture that is both rigid and flexible, micro-useful and scalable. &lt;/p&gt;

&lt;p&gt;The database model we currently use is doing quite well. It's able to support complex &lt;a href="http://www.neolab.si/Information-Systems.aspx#down" class="more" target="_blank" title="Neolab Information Systems"&gt;business-oriented systems&lt;/a&gt;, &lt;a href="http://www.neolab.si/Web-Portals.aspx#down" class="more" target="_Blank" title="Neolab Social Web Portals"&gt;social portals&lt;/a&gt; and &lt;a href="http://www.neolab.si/Web-Pages.aspx#down" class="more" target="_blank" title="Neolab Web Sites"&gt;web sites&lt;/a&gt;, the core tables being the same across all applications. Sure, there are many redundant things, but we are aware where we should scale-down. More importantly, we have to decide how to upgrade this database model which is used in different applications to be able to &lt;b&gt;work in a single database&lt;/b&gt;. I'm not that fond of &lt;a href="http://stackoverflow.com/questions/69128/saas-database-design-multiple-databases-split" class="more" target="_blank" title="SaaS database design - Multiple Databases? Split?"&gt;using multiple databases or schemas&lt;/a&gt; in SaaS architecture, since this is a similar situation to which we have now, and it doesn't work that well. &lt;b&gt;I'm certain having the same database for different clients&lt;/b&gt; is most suited for &lt;a href="http://www.neolab.si/Integrated_Information_Solutions.aspx#down" class="more" target="_blank" title="Neolab Integrated Information Solutions"&gt;our business&lt;/a&gt;.&lt;/p&gt;


&lt;p&gt;This means we will be &lt;b&gt;having a ClientID (ApplicationID)&lt;/b&gt; in all the tables that will be used by all clients / applications. But what is the best way to take care of &lt;b&gt;global and local records&lt;/b&gt; - records that are used by everyone versus those in only a few applications?&lt;/p&gt;


&lt;p&gt;Let's assume we are building a CMS system for many sites, for which we will be needing two global Roles (Administrator, Moderator), but one instance will have its own Role as well (News editor). There are many ways we can go.&lt;/p&gt;


&lt;h2&gt;1. Local roles&lt;/h2&gt;


&lt;p&gt;This architecture means &lt;b&gt;each client having it's own Roles&lt;/b&gt;. It's a simple solution, very flexible, but has many flaws - the most obvious being the benefits of global functionalities. E.g. if you're and Administrator, you can restart the site. Since we now have multiple Administrators (ID = 1,3,…), features like these get a bit harder to implement, and you can end up developing a totally different application for each client.&lt;/p&gt;

&lt;br&gt;
&lt;table cellspacing="0" cellpadding="3" border="0" align="center" &gt;
&lt;tr&gt;&lt;th&gt;ApplicationID&lt;/th&gt;&lt;th&gt;RoleID (PK)&lt;/th&gt;&lt;th&gt;Role&lt;/th&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;b&gt;1&lt;/b&gt;&lt;/td&gt;&lt;td&gt;Administrator&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;b&gt;2&lt;/b&gt;&lt;/td&gt;&lt;td&gt;Moderator&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;&lt;b&gt;3&lt;/b&gt;&lt;/td&gt;&lt;td&gt;Administrator&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;&lt;b&gt;4&lt;/b&gt;&lt;/td&gt;&lt;td&gt;Moderator&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;&lt;b&gt;5&lt;/b&gt;&lt;/td&gt;&lt;td&gt;News editor&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;



&lt;h2&gt;2. Global Roles with a M:N table&lt;/h2&gt;


&lt;p&gt;The other option is to have &lt;b&gt;global Roles, which are attached to a single application using a M:N table&lt;/b&gt;. This is an elegant and very flexible solution, but from my experience, you should avoid using M:N tables if possible. Of course, there are logical cases in which you can't, but you should always consider other options. Adding another table to the equation complicates queries, makes direct data browsing less understandable, besides raising the possibilities of errors.&lt;/p&gt;
&lt;br&gt;
&lt;table cellpadding="0" cellspacing="0" width="100%"&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;
&lt;table cellspacing="0" cellpadding="3" border="0"  &gt;
&lt;tr &gt;&lt;th&gt;RoleID (PK)&lt;/th&gt;&lt;th&gt;Role&lt;/th&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;&lt;b&gt;1&lt;/b&gt;&lt;/td&gt;&lt;td&gt;Administrator&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;&lt;b&gt;2&lt;/b&gt;&lt;/td&gt;&lt;td&gt;Moderator&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;&lt;b&gt;3&lt;/b&gt;&lt;/td&gt;&lt;td&gt;News editor&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;/td&gt;
&lt;td align="right"&gt;
&lt;table cellspacing="0" cellpadding="3" border="0"  &gt;
&lt;tr&gt;&lt;th&gt;ApplicationID (PK)&lt;/th&gt;&lt;th&gt;RoleID (PK)&lt;/th&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;&lt;b&gt;1&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;1&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;&lt;b&gt;1&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;2&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;&lt;b&gt;2&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;1&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;&lt;b&gt;2&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;2&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;&lt;b&gt;2&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;3&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;


&lt;h2&gt;3. Composite key&lt;/h2&gt;


&lt;p&gt;Another possibility that comes to mind is to &lt;b&gt;use a composite key, which in reality, makes a single table from the above two&lt;/b&gt; (Roles, ApplicationsRoles). This allows using the same IDs for the same Roles in different systems. But it also requires having a composite key, which makes other things more complicated. It prevents making simple joins (you need to make a join by both primary keys), which means all the tables joined to Roles would need the ApplicationID field as well, even if they wouldn't really require it. Not to mention this model simply calls for trouble.&lt;/p&gt;
&lt;br&gt;
&lt;table cellspacing="0" cellpadding="3" border="0" align="center" &gt;
&lt;tr&gt;&lt;th&gt;ApplicationID (PK)&lt;/th&gt;&lt;th&gt;RoleID (PK)&lt;/th&gt;&lt;th&gt;Role&lt;/th&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;&lt;b&gt;1&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;1&lt;/b&gt;&lt;/td&gt;&lt;td&gt;Administrator&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;&lt;b&gt;1&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;2&lt;/b&gt;&lt;/td&gt;&lt;td&gt;Moderator&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;&lt;b&gt;2&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;1&lt;/b&gt;&lt;/td&gt;&lt;td&gt;Administrator&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;&lt;b&gt;2&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;2&lt;/b&gt;&lt;/td&gt;&lt;td&gt;Moderator&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;&lt;b&gt;2&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;3&lt;/b&gt;&lt;/td&gt;&lt;td&gt;News editor&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;



&lt;h2&gt;4. Fake composite key&lt;/h2&gt;
&lt;p&gt;Sometimes, it makes sense using an &lt;b&gt;additional primary key in a M:N relationship&lt;/b&gt;, so you can easily join the table further. We could do this as well, making the previous case a bit more easy-going. But this situation makes all the magic that we could do across the system a bit harder - since all the joins would be made using new local IDs, we are getting too close to the first solution (you can't make joins with the RoleID field, since it's not unique).&lt;/p&gt;
&lt;br&gt;
&lt;table cellspacing="0" cellpadding="3" border="0" align="center" &gt;
&lt;tr &gt;&lt;th&gt;ID (PK)&lt;/th&gt;&lt;th&gt;ApplicationID&lt;/th&gt;&lt;th&gt;RoleID&lt;/th&gt;&lt;th&gt;Role&lt;/th&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;&lt;b&gt;1&lt;/b&gt;&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;Administrator&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;&lt;b&gt;2&lt;/b&gt;&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;Moderator&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;&lt;b&gt;3&lt;/b&gt;&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;Administrator&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;&lt;b&gt;4&lt;/b&gt;&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;Moderator&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;&lt;b&gt;5&lt;/b&gt;&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;News editor&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;



&lt;h2&gt;5. NULL-able ApplicationID&lt;/h2&gt;
&lt;p&gt;A different architecture enables &lt;b&gt;using global Roles that have no ApplicationID, and local Roles that have it&lt;/b&gt;. Each application is set to use both sets of Roles, allowing flexibility and understandability. But this model has a problem as well - we can't prevent an application from seeing a global Role - those are intended for everybody, which means that in the long run, the system would start gravitating towards not having any global roles at all, to assure flexibility. To simplify - this architecture is great, but needs something that takes care of Denying.&lt;/p&gt;
&lt;br&gt;
&lt;table cellspacing="0" cellpadding="3" border="0" align="center" &gt;
&lt;tr&gt;&lt;th&gt;ApplicationID&lt;/th&gt;&lt;th&gt;RoleID (PK)&lt;/th&gt;&lt;th&gt;Role&lt;/th&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;NULL&lt;/td&gt;&lt;td&gt;&lt;b&gt;1&lt;/b&gt;&lt;/td&gt;&lt;td&gt;Administrator&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;NULL&lt;/td&gt;&lt;td&gt;&lt;b&gt;2&lt;/b&gt;&lt;/td&gt;&lt;td&gt;Moderator&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;&lt;b&gt;3&lt;/b&gt;&lt;/td&gt;&lt;td&gt;News editor&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;



&lt;h3&gt;5. a) Creating a table for Deny&lt;/h3&gt;
&lt;p&gt;Let's put another application (ApplicationID = 3) into the equation, which, for some reason, doesn't want to have the global Role named Moderator (RoleID = 2). &lt;b&gt;Adding another table to care of Denied Roles&lt;/b&gt; would solve the problem perfectly, but do we really need another table? We want to keep our database with as little tables as possible, so it's easier to use. That's why we should consider extending the Roles table to handle denying as well. &lt;/p&gt;

&lt;br&gt;
&lt;table cellpadding="0" cellspacing="0" width="100%"&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;
&lt;table cellspacing="0" cellpadding="3" border="0" &gt;
&lt;tr&gt;&lt;th&gt;ApplicationID&lt;/th&gt;&lt;th&gt;RoleID (PK)&lt;/th&gt;&lt;th&gt;Role&lt;/th&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;NULL&lt;/td&gt;&lt;td&gt;&lt;b&gt;1&lt;/b&gt;&lt;/td&gt;&lt;td&gt;Administrator&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;NULL&lt;/td&gt;&lt;td&gt;&lt;b&gt;2&lt;/b&gt;&lt;/td&gt;&lt;td&gt;Moderator&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;&lt;b&gt;3&lt;/b&gt;&lt;/td&gt;&lt;td&gt;News editor&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;/td&gt;
&lt;td align="right" valign="top"&gt;

&lt;table cellspacing="0" cellpadding="3" border="0" &gt;
&lt;tr &gt;&lt;th&gt;ApplicationID (PK)&lt;/th&gt;&lt;th&gt;DeniedRoleID (PK)&lt;/th&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;


&lt;h3&gt;5. b) Adding two fields for Deny&lt;/h3&gt;
&lt;p&gt;In the most normalized way, we need &lt;b&gt;two fields to take care of Deny&lt;/b&gt; - a boolean to mark we are working with a Deny record type, and an integer to tell which record we are denying. But what if we want to optimize even further?&lt;/p&gt;

&lt;br&gt;
&lt;table cellspacing="0" cellpadding="3" border="0" align="center" &gt;
&lt;tr&gt;&lt;th&gt;ApplicationID&lt;/th&gt;&lt;th&gt;RoleID (PK)&lt;/th&gt;&lt;th&gt;Role&lt;/th&gt;&lt;th&gt;IsDenied&lt;/th&gt;&lt;th&gt;DeniedRoleID&lt;/th&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;NULL&lt;/td&gt;&lt;td&gt;&lt;b&gt;1&lt;/b&gt;&lt;/td&gt;&lt;td&gt;Administrator&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;NULL&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;NULL&lt;/td&gt;&lt;td&gt;&lt;b&gt;2&lt;/b&gt;&lt;/td&gt;&lt;td&gt;Moderator&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;NULL&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;&lt;b&gt;3&lt;/b&gt;&lt;/td&gt;&lt;td&gt;News editor&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;NULL&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;&lt;b&gt;4&lt;/b&gt;&lt;/td&gt;&lt;td&gt;NULL&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;



&lt;h3&gt;5. c) Using an existing field for Deny&lt;/h3&gt;
&lt;p&gt;We could put &lt;b&gt;information about which record we are denying into the existing Roles.Role field&lt;/b&gt;, since we don't really need it in these cases. But there's a major setback; if a non-numeric field would be accidentally stored in the denied Role, the SQL engine would throw an error.&lt;/p&gt;
&lt;br&gt;
&lt;table cellspacing="0" cellpadding="3" border="0" align="center" &gt;
&lt;tr&gt;&lt;th&gt;ApplicationID&lt;/th&gt;&lt;th&gt;RoleID (PK)&lt;/th&gt;&lt;th&gt;Role&lt;/th&gt;&lt;th&gt;IsDenied&lt;/th&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;NULL&lt;/td&gt;&lt;td&gt;&lt;b&gt;1&lt;/b&gt;&lt;/td&gt;&lt;td&gt;Administrator&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;NULL&lt;/td&gt;&lt;td&gt;&lt;b&gt;2&lt;/b&gt;&lt;/td&gt;&lt;td&gt;Moderator&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;&lt;b&gt;3&lt;/b&gt;&lt;/td&gt;&lt;td&gt;News editor&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;&lt;b&gt;4&lt;/b&gt;&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;


&lt;h3&gt;5. d) Using a single field for Deny&lt;/h3&gt;


&lt;p&gt;It's much easier to combine the first two fields into one, &lt;b&gt;marking the record implicitly&lt;/b&gt;. If the DeniedID is NULL, it means we are working with a regular record, otherwise, we are dealing with a denying record. Information about which Role we are denying is stored in the same field, which &lt;b&gt;works both as a boolean, as an integer&lt;/b&gt;. &lt;/p&gt;
&lt;br&gt;

&lt;table cellspacing="0" cellpadding="3" border="0" align="center" &gt;
&lt;tr&gt;&lt;th&gt;ApplicationID&lt;/th&gt;&lt;th&gt;RoleID (PK)&lt;/th&gt;&lt;th&gt;Role&lt;/th&gt;&lt;th&gt;DeniedRoleID&lt;/th&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;NULL&lt;/td&gt;&lt;td&gt;&lt;b&gt;1&lt;/b&gt;&lt;/td&gt;&lt;td&gt;Administrator&lt;/td&gt;&lt;td&gt;NULL&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;NULL&lt;/td&gt;&lt;td&gt;&lt;b&gt;2&lt;/b&gt;&lt;/td&gt;&lt;td&gt;Moderator&lt;/td&gt;&lt;td&gt;NULL&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;&lt;b&gt;3&lt;/b&gt;&lt;/td&gt;&lt;td&gt;News editor&lt;/td&gt;&lt;td&gt;NULL&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;&lt;b&gt;4&lt;/b&gt;&lt;/td&gt;&lt;td&gt;NULL&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;



&lt;h2&gt;The decision&lt;/h2&gt;
&lt;p&gt;&lt;b&gt;The last architecture (5. d) is the one I think it's best.&lt;/b&gt; It's very transparent and flexible, and it has only one major problem I can currently think of; if only a few (of many) applications would require to share a Role, this wouldn't be possible to solve with this model, but I can live with that.&lt;/p&gt;

&lt;br&gt;

&lt;table cellspacing="0" cellpadding="3" border="0" align="center" style="font-size: 17px;" &gt;
&lt;tr&gt;&lt;th&gt;ApplicationID&lt;/th&gt;&lt;th&gt;RoleID (PK)&lt;/th&gt;&lt;th&gt;Role&lt;/th&gt;&lt;th&gt;DeniedRoleID&lt;/th&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;NULL&lt;/td&gt;&lt;td&gt;&lt;b&gt;1&lt;/b&gt;&lt;/td&gt;&lt;td&gt;Administrator&lt;/td&gt;&lt;td&gt;NULL&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;NULL&lt;/td&gt;&lt;td&gt;&lt;b&gt;2&lt;/b&gt;&lt;/td&gt;&lt;td&gt;Moderator&lt;/td&gt;&lt;td&gt;NULL&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;&lt;b&gt;3&lt;/b&gt;&lt;/td&gt;&lt;td&gt;News editor&lt;/td&gt;&lt;td&gt;NULL&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;&lt;b&gt;4&lt;/b&gt;&lt;/td&gt;&lt;td&gt;NULL&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;


&lt;h2&gt;The SQL statement&lt;/h2&gt;
&lt;p&gt;I have played around a bit with the 5. d) and it works very well. Here's the &lt;b&gt;SELECT statement that retrieves the records for each specific application&lt;/b&gt;, supporting the mentioned scenarios.&lt;/p&gt;

&lt;p&gt;
&lt;i&gt;SELECT Roles.*&lt;br&gt;

FROM Roles &lt;br&gt;

WHERE &lt;br&gt;

(Roles.ApplicationID = 3 OR Roles.ApplicationID IS NULL) --retrieve local and global roles&lt;br&gt;

AND&lt;br&gt;

Roles.DeniedRoleID IS NULL --use only regular records&lt;br&gt;

AND &lt;br&gt;

Roles.RoleID NOT IN --remove denied roles&lt;br&gt;

(&lt;br&gt;

    SELECT DeniedRoles.DeniedRoleID FROM Roles AS DeniedRoles&lt;br&gt;

    WHERE DeniedRoles.ApplicationID = 3&lt;br&gt;

    AND DeniedRoles.DeniedRoleID IS NOT NULL&lt;br&gt;

)&lt;br&gt;

&lt;/i&gt;&lt;/p&gt;


&lt;p&gt;The same query, solved with a &lt;b&gt;JOIN instead of WHERE IN&lt;/b&gt;, which is faster, but probably less understandable.&lt;/p&gt;



&lt;p&gt;
&lt;i&gt;SELECT RealRoles.*&lt;br&gt;

FROM Roles AS RealRoles --regular records&lt;br&gt;

LEFT OUTER JOIN&lt;br&gt;

Roles AS DeniedRoles --denying records&lt;br&gt;

ON RealRoles.RoleID = DeniedRoles.DeniedRoleID --join by the ID of the role&lt;br&gt;

AND RealRoles.DeniedRoleID IS NULL  --but only those records that are real&lt;br&gt;

AND DeniedRoles.DeniedRoleID IS NOT NULL --vs those that are denying&lt;br&gt;

AND DeniedRoles.ApplicationID = 3&lt;br&gt;

WHERE &lt;br&gt;

(RealRoles.ApplicationID = 3 OR RealRoles.ApplicationID IS NULL) --retrieve my and global roles&lt;br&gt;

AND &lt;br&gt;

RealRoles.DeniedRoleID IS NULL -- take all regular roles&lt;br&gt;
AND &lt;br&gt;

DeniedRoles.RoleID IS NULL --that don't have a deny
&lt;/i&gt;&lt;/p&gt;

&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;There are many ways to solve a database model in a SaaS architecture, but because of many reasons, &lt;a href="http://www.neolab.si/Organization_Marketing_Consulting_And_Information_Technologies.aspx#down" class="more" target="_Blank" title="Neolab, Software Development Team"&gt;we've decided&lt;/a&gt; to &lt;b&gt;use a single database with an additional foreign key&lt;/b&gt; that defines the client in all the required tables. One of the biggest concerns in this architecture is solving global and local records, but the &lt;b&gt;model presented here takes care of most requirements&lt;/b&gt; a typical Saas system might stumble upon, by using a NULL-able ApplicationID, with another field to take care of exceptions that require denying.&lt;/p&gt;

&lt;p&gt;This architecture solves most of the problems, and if you're leaning towards a single database architecture, it's probably the best way to go.&lt;/p&gt;







 





</description><link>http://stritar.net/Post/Solving-global-and-local-records-in-SaaS-database-design.aspx</link></item><item><title>The final destination, part 1: technologies and concepts enterprise IT will have to adopt</title><pubDate>Mon, 02 Jul 2012 18:38:09 GMT</pubDate><description>&lt;p&gt;In the past years, we've witnessed a very &lt;b&gt;important transformation&lt;/b&gt;: the &lt;a href="http://en.wikipedia.org/wiki/Consumerization" class="more" target="_blank" title="Consumerization on Wikipedia"&gt;consumerization of information technologies&lt;/a&gt;. &lt;b&gt;Billions of connected users&lt;/b&gt; living their &lt;a href="http://gizmodo.com/5922792/there-is-no-offline-anymore" class="more" target="_blank" title="There Is No Offline Anymore"&gt;life online&lt;/a&gt;, overwhelmed by millions of information systems that have been tailored to suit their &lt;b&gt;every need and desire&lt;/b&gt;. &lt;a href="http://stritar.net/Post/The-Great-Technology-Wars-And-The-Transition-Of-Software-From-B2B-To-B2C.aspx" class="more" target="_blank" title="The great technology wars and the transition of software from B2B to B2C"&gt;Google, Facebook, Apple and Amazon&lt;/a&gt; came a long way with their &lt;b&gt;products and infrastructure&lt;/b&gt;, but the enterprise isn't &lt;b&gt;losing any time&lt;/b&gt;. Learning from the new paradigms and &lt;b&gt;adopting new funky technologies&lt;/b&gt;, that have traditionally been developed in &lt;b&gt;corporate laboratories&lt;/b&gt;. Can the &lt;a href="http://www.fastcompany.com/magazine/160/tech-wars-2012-amazon-apple-google-facebook" class="more" target="_blank" title="The Great Tech War Of 2012"&gt;Fab 4&lt;/a&gt; also predict where &lt;a href="http://stritar.net/Series/The-final-destination.aspx" class="more" target="_blank" title="The final destination of enterprise IT"&gt;enterprise IT is headed&lt;/a&gt;? And what will it become?&lt;/p&gt;

&lt;p&gt;A few weeks ago I &lt;a href="http://www.pi-pl.net/2012/dan-poslovne-informatike-2012/" class="more" target="_blank" title="Dan Poslovne Informatike 2012"&gt;participated in a panel&lt;/a&gt; for &lt;a href="http://www.pi-pl.net/" class="more" target="_blank" title="PI-PL - Društvo poslovnih informatikov in poslovnih logistov"&gt;PI-PL&lt;/a&gt; on Ljubljana's &lt;a href="http://www.ef.uni-lj.si/" class="more" target="_blank" title="Ekonomska Fakulteta, Univerza v Ljubljani"&gt;Faculty of Economics&lt;/a&gt;, where I was asked this exact question: &lt;a href="http://www.youtube.com/watch?v=pYIcnx_J5V0#t=33m20s" class="more" target="_blank" title="Dan Poslovne Informatike 2012"&gt;where do I see corporate IT in 10 years&lt;/a&gt;. A very hard question indeed, but the more I thought about the it, the clearer it became. &lt;b&gt;Enterprise data, software and technology&lt;/b&gt; will sooner or later &lt;b&gt;integrate everything&lt;/b&gt;. Simple as that. But to fully understand how this will happen, we must first try to identify the &lt;b&gt;most important trends&lt;/b&gt; that have &lt;b&gt;shaped information technologies&lt;/b&gt; as we know them today. Yes, most of them don't have that much to do with the enterprise. But things are changing.&lt;/p&gt;

&lt;h2&gt;Cloud technologies&lt;/h2&gt;
&lt;p&gt;While &lt;a href="http://en.wikipedia.org/wiki/Cloud_computing" class="more" target="_blank" title="Cloud computing on Wikipedia"&gt;cloud computing&lt;/a&gt; may have been present in the enterprise for &lt;b&gt;quite some time&lt;/b&gt;, it's still pretty much dominated by web players like &lt;b&gt;Google&lt;/b&gt; (mail, docs, etc.) and &lt;b&gt;Amazon&lt;/b&gt; (hardware), who are also &lt;a href="http://www.technobuffalo.com/companies/google/google-to-introduce-amazon-microsoft-cloud-rival-for-enterprise-customers/" class="more" target="_blank" title="Google to Introduce Amazon, Microsoft Cloud Rival for Enterprise Customers"&gt;flirting with the enterprise&lt;/a&gt;. Who wouldn't? There are &lt;b&gt;massive benefits&lt;/b&gt; for businesses to move their stuff to the cloud, from &lt;b&gt;scalable physical Infrastructure&lt;/b&gt; to higher level &lt;b&gt;Platform or Software as a service&lt;/b&gt; information systems. &lt;/p&gt;

&lt;p&gt;Perhaps the most important thing the Cloud achieved was to render &lt;b&gt;technology infrastructure irrelevant&lt;/b&gt;. It doesn't matter any more, what kind of environment you use. What type of &lt;b&gt;security, infrastructure, servers and network&lt;/b&gt; you have installed. You can &lt;b&gt;outsource these things to others&lt;/b&gt;, and it will be much easier and cheaper, while all your migrating-to-a-bigger-thing problems will be solved with a &lt;b&gt;swipe of a credit card&lt;/b&gt;. I was fascinated that Microsoft now offers &lt;a href="http://www.windowsazure.com/en-us/manage/linux/tutorials/intro-to-linux/" class="more" target="_blank" title="Introduction to Linux on Windows Azure"&gt;Linux based servers on their Azure cloud services&lt;/a&gt;, which can be changed to Windows with a click of a button. &lt;b&gt;Architecture doesn't matter anymore&lt;/b&gt;, and this fact helps IT departments to focus on &lt;b&gt;more important things than system administration&lt;/b&gt;. &lt;/p&gt;

&lt;h2&gt;APIs, mashups, platforms and ecosystems&lt;/h2&gt;
&lt;p&gt;Heavily connected with the whole Cloud concept, data and information never had it easier to &lt;b&gt;travel from one place to another&lt;/b&gt;. &lt;a href="http://en.wikipedia.org/wiki/System_migration" class="more" target="_blank" title="System migration on Wikipedia"&gt;System migrations&lt;/a&gt; (moving data from one information system to another) and &lt;a href="http://en.wikipedia.org/wiki/System_integration" class="more" target="_blank" title="System integration on Wikipedia"&gt;system integrations&lt;/a&gt; (connecting multiple information systems into one) have always been one of the &lt;b&gt;biggest challenges of IT&lt;/b&gt;. But the web didn't have as much resources as the enterprise, so it had to &lt;b&gt;simplify things&lt;/b&gt;. By offering &lt;a href="http://en.wikipedia.org/wiki/Application_programming_interface" class="more" target="_blank" title="Application programming interface - Wikipedia"&gt;APIs&lt;/a&gt; (Application Programming Interface), web applications allowed others applications to &lt;b&gt;work with their data in an easy way&lt;/b&gt;. &lt;a href="http://en.wikipedia.org/wiki/Mashup_(web_application_hybrid)" class="more" target="_blank" title="Mashup (web application hybrid) - Wikipedia"&gt;Mashups&lt;/a&gt;, hybrid information systems &lt;b&gt;built on top of others&lt;/b&gt;, were born.&lt;/p&gt;

&lt;p&gt;Pretty much every noteworthy web service &lt;b&gt;has its own API&lt;/b&gt;. This helped a lot of them to &lt;a href="http://stritar.net/Post/The-future-of-software-is-in-platforms.aspx" class="more" title="The future (of software) is in platforms" target="_blank"&gt;become a platform&lt;/a&gt;. You know, like &lt;a href="http://stritar.net/Series/Facebook_Vs_Twitter.aspx" class="more" target="_blank" title="Facebook vs. Twitter on Stritar's chronolog"&gt;Facebook and Twitter&lt;/a&gt;, who have &lt;a href="http://buzzmachine.com/2009/11/11/the-future-of-business-is-in-ecosystems/" class="more" target="_blank" title="The future of business is in ecosystems"&gt;created an ecosystem&lt;/a&gt;, where thousands of other &lt;a href="http://www.briansolis.com/2011/01/exploring-the-twitterverse/" class="more" title="Exploring the Twitterverse" target="_blank"&gt;applications live around them&lt;/a&gt;? Soon, similar concepts will &lt;b&gt;dominate the enterprise too&lt;/b&gt;. There are already players like &lt;a href="http://www.salesforce.com/" class="more" target="_blank" title="Social Enterprise &amp; CRM in the cloud - Salesforce.com"&gt;Salesforce&lt;/a&gt;, who not only offer business-oriented Software as a service solutions, but the also a &lt;a href="http://www.salesforce.com/paas/" class="more" target="_blank" title="What is Platform as a Service (PaaS) - salesforce.com"&gt;Platform for other developers&lt;/a&gt; to build services &lt;b&gt;on top of their services&lt;/b&gt;. And since everything is so &lt;b&gt;open&lt;/b&gt;, all this data can &lt;b&gt;easily be integrated&lt;/b&gt; with other information systems or &lt;b&gt;transferred to a different environment&lt;/b&gt;. Modern information systems don't have problems with &lt;b&gt;understanding each other&lt;/b&gt;, but IT departments have problems with &lt;b&gt;understanding information systems&lt;/b&gt;, since different, &lt;b&gt;more business oriented skills&lt;/b&gt; are needed to support these integrations.&lt;/p&gt;

&lt;h2&gt;Mobile devices and new distribution channels&lt;/h2&gt;
&lt;p&gt;More than ten years ago, when I was an Information Sciences student, there was still a debate going on about the &lt;a href="http://www.ehow.com/list_6699016_differences-between-client-server-applications.html" class="more" target="_blank" title="Differences Between Client Server &amp; Web Applications"&gt;benefits of web based enterprise information systems over traditional Client - Server architecture&lt;/a&gt;. In the end, &lt;a href="http://stritar.net/Post/The_Influence_Of_New_Generation_Information_Systems_On_Modern_Organizations.aspx" class="more" target="_blank" title="The influence of new generation information systems on modern organizations"&gt;the Web won&lt;/a&gt;, mostly because &lt;b&gt;distribution was so easy&lt;/b&gt;, you make the update on the server, and every user gets it instantly. Employees need &lt;b&gt;nothing but a browser&lt;/b&gt;. They are &lt;b&gt;acquainted with the environment&lt;/b&gt; ever since they started using Hotmail, and took it for their own ever since they started using Facebook.&lt;/p&gt;

&lt;p&gt;But today, it seems the Web is losing its ground as the leading infrastructure, since a &lt;a href="http://stritar.net/Post/Web-2-5-Looking-For-The-Missing-Link-Between-Web-2-0-And-Web-3-0.aspx" class="more" target="_blank" title="Web 2.5: Looking for the missing link between Web 2.0 and Web 3.0"&gt;new technology came into town&lt;/a&gt;. Capable &lt;b&gt;mobile devices&lt;/b&gt;, like smartphones and tablets, now enable access to information systems from &lt;b&gt;anywhere, anytime in real-time&lt;/b&gt;. Besides, they arrived with &lt;a href="http://www.topdesignmag.com/in-a-galaxy-far-far-away-the-app-store-market-infographic/" class="more" target="_blank" title="In a Galaxy Far Far Away: The App Store Market [Infographic]"&gt;their own app markets&lt;/a&gt;, which enabled a whole potential for &lt;b&gt;software distribution&lt;/b&gt;, and perhaps more importantly, for &lt;b&gt;software billing&lt;/b&gt;. You give a fair share to the store owner, who also promotes your solution, and you can freely focus on &lt;b&gt;developing and marketing the product&lt;/b&gt;. It's true that mobile apps may not be as &lt;b&gt;flexible as web applications&lt;/b&gt;, since the users need to &lt;b&gt;install the updates&lt;/b&gt; (even though this can also be achieved by &lt;a href="http://mobileenterprise.edgl.com/top-stories/The-Right-Mobile-Apps--Native,-HTML5-or-Hybrid--Yes-80285" class="more" target="_blank" title="The Right Mobile Apps: Native, HTML5 or Hybrid? Yes."&gt;combining native mobile and hosted HTML 5&lt;/a&gt;), but the trend is clear. Apple already has its &lt;a href="http://www.apple.com/osx/apps/app-store.html" class="more" target="_blank" title="The Mac App Store"&gt;Mac store&lt;/a&gt;, Microsoft &lt;a href="http://techcrunch.com/2011/04/11/windows-app-store/" class="more" target="_blank" title="Windows App Store? I Swear I've Seen This Before…"&gt;Windows will follow soon&lt;/a&gt;. Distribution of mobile and Software as a service information systems is &lt;b&gt;becoming trivial&lt;/b&gt;.&lt;/p&gt;

&lt;h2&gt;Big data and The internet of things&lt;/h2&gt;
&lt;p&gt;Traditionally, &lt;b&gt;banks, retailers and financial institutions&lt;/b&gt; have been the organizations that operated with the &lt;b&gt;most data in the world&lt;/b&gt;. Well, things are changing, and we can only wonder who owns the &lt;a href="http://en.wikipedia.org/wiki/Big_data" class="more" target="_blank" title="Big data on Wikipedia"&gt;most bytes today&lt;/a&gt;: is it &lt;b&gt;Google, Facebook or someone else&lt;/b&gt;? Since there are &lt;b&gt;less transactions than there are interactions&lt;/b&gt;, we can estimate consumer oriented information systems with &lt;a href="http://www.huffingtonpost.com/2011/06/22/google-1-billion-users_n_881969.html" class="more" target="_blank" title="Google: The First Web Company To Hit 1 Billion Users"&gt;billions of users&lt;/a&gt; are the &lt;a href="http://www.datacenterknowledge.com/archives/2011/08/01/report-google-uses-about-900000-servers/" class="more" target="_blank" title="Report: Google Uses About 900,000 Servers"&gt;biggest in existence&lt;/a&gt;. While this data is &lt;b&gt;accessible to the enterprise&lt;/b&gt; to some extent, there are also &lt;a href="http://www.unisys.com/unisys/ri/topic/researchtopicdetail.jsp?id=700004" class="more" target="_blank" title="Consumerization of IT: Riding the Next Wave of Productivity"&gt;hundreds of other systems&lt;/a&gt; the enterprise or its employees use, and they all create &lt;b&gt;massive amounts of data and information&lt;/b&gt;, which needs to be &lt;b&gt;integrated into a wider picture&lt;/b&gt;.&lt;/p&gt;

&lt;p&gt;Not only that. Today, there are already are more &lt;b&gt;connected devices&lt;/b&gt; that &lt;a href="http://websearch.about.com/od/i/a/Ipv6-What-It-Means-For-The-Future-Of-The-Internet.htm" class="more" target="_blank" title="IPv6: What It Means For The Future of the Internet"&gt;we have initially anticipated&lt;/a&gt;. These devices (cameras, sensors, tools, etc.) &lt;b&gt;create even more data&lt;/b&gt;, which the enterprise needs to process. This trend of wired gadgets is called &lt;a href="http://www.bitrebels.com/technology/the-internet-of-things-every-device-that-connects-us-infographic/" class="more" target="_blank" title="The Internet Of Things: Every Device That Connects Us [Infographic]"&gt;The internet of things&lt;/a&gt;, and together with the large amount of &lt;b&gt;interconnectable information systems&lt;/b&gt; businesses use, points to one important trend: the typical enterprise was never faced with &lt;b&gt;so much data and information&lt;/b&gt;, which somehow needs to be &lt;b&gt;integrated and understood in an interdisciplinary way&lt;/b&gt;.&lt;/p&gt;

&lt;h2&gt;New ways of doing things, on a higher level&lt;/h2&gt;
&lt;p&gt;In the mean time, &lt;a href="http://stritar.net/Post/The-Great-Technology-Wars-And-The-Transition-Of-Software-From-B2B-To-B2C.aspx" class="more" target="_blank" title="The great technology wars and the transition of software from B2B to B2C"&gt;these consumer oriented (B2C) web corporation&lt;/a&gt; not only became a few of the &lt;b&gt;biggest technology companies&lt;/b&gt; in existence, they've also invented &lt;b&gt;new ways of how to get things done&lt;/b&gt;. From &lt;a href="http://googleblog.blogspot.com/2006/05/googles-20-percent-time-in-action.html" class="more" target="_blank" title="Google's 20 percent time in action"&gt;Google's 20%&lt;/a&gt;, to &lt;a href="http://www.designstaff.org/articles/design-valve-collaborating-innovating-flat-organization-2012-06-06.html" class="more" target="_blank" title="Design at Valve: collaborating and innovating in a flat organization"&gt;flat organizations without management&lt;/a&gt;, more and more companies (not only startups) set out to &lt;b&gt;revolutionize how business is done&lt;/b&gt;. In the service oriented society, &lt;b&gt;creativity&lt;/b&gt; is important, but so is &lt;b&gt;productivity&lt;/b&gt; and the ability to &lt;b&gt;ship fast&lt;/b&gt;. &lt;a href="http://lifehacker.com/5870379/done-is-better-than-perfect" class="more" target="_blank" title="Done is better than perfect"&gt;Done is better than perfect&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;With new types of management concepts, such as &lt;a href="http://epistemologic.com/2007/11/15/how-lean-and-agile-are-different-not-that-it-matters/" class="more" target="_blank" title="How Lean and Agile are different, not that it matters"&gt;lean and agile&lt;/a&gt;, modern organizations are becoming &lt;b&gt;more and more flexible&lt;/b&gt;. Not only in &lt;a href="http://arstechnica.com/information-technology/2012/06/ask-stack-what-is-the-best-way-to-divide-work-between-developers/" class="more" target="_blank" title="What is the best way to divide work between developers?"&gt;doing things&lt;/a&gt;, but also in switching &lt;b&gt;from one technology to another&lt;/b&gt;. These companies have developed their own way of &lt;b&gt;thinking about which software to use&lt;/b&gt;. And it probably has a lot to do its price, how fast can you start using it, how scalable and connectable it is, and how fast can you dump if for another. IT requirements are &lt;b&gt;moving to a higher level&lt;/b&gt;, and information systems have become just pieces of a &lt;b&gt;puzzle that needs to be completed&lt;/b&gt;.&lt;/p&gt;

&lt;h2&gt;Design and user experience&lt;/h2&gt;
&lt;p&gt;&lt;b&gt;Design and user experience&lt;/b&gt; probably still don't have that much to do with enterprise IT, but they are very much worth mentioning nevertheless. Face it, users are becoming &lt;b&gt;more and more demanding&lt;/b&gt;, and software developers need to make better and &lt;b&gt;better software&lt;/b&gt;. Even though the above mentioned facts are probably the dominating factor for the choice of which information systems the enterprise will use, &lt;b&gt;design and user experience matter more and more&lt;/b&gt;. &lt;/p&gt;

&lt;p&gt;Businesses have always had problems with &lt;a href="http://askjanbrass.hubpages.com/hub/How_to_success_with_your_new_software" class="more" target="_blank" title="Steps to success with your new software"&gt;implementing new software&lt;/a&gt;, educating the users, going through the whole status quo change. But beautiful and &lt;b&gt;useful software penetrates faster&lt;/b&gt;. People perceive &lt;a href="http://www.jnd.org/dn.mss/is_perceived_usabili.html" class="more" target="_blank" title="Is perceived usability/aesthetics more important than real"&gt;beautiful things to be more useful&lt;/a&gt;, and it's the whole &lt;b&gt;intuitiveness and usability&lt;/b&gt; of software that helps them adopt something without &lt;b&gt;too much resistance and problems&lt;/b&gt;. Some software vendors already found out &lt;a href="http://stritar.net/Post/The-Silicon-Valley-tour-part-8-Lessons-learned-time-to-reevaluate.aspx" class="more" target="_blank" title="The Silicon Valley tour, part 8: Lessons learned, time to reevaluate"&gt;user experience is the new competitive advantage&lt;/a&gt;, and in the end it may be the thing that tips the scale. But the whole point behind it is that I can see better, more clever and detailed, information systems force out older ones on an even &lt;b&gt;faster pace&lt;/b&gt;. The whole world of information systems need &lt;b&gt;reinvention&lt;/b&gt;, and &lt;a href="http://stritar.net/Post/What-Apple-s-headphones-can-teach-us-about-user-experience-design.aspx" class="more" target="_blank" title="What Apple's headphones can teach us about user experience design"&gt;user experience design&lt;/a&gt; will be the science behind these upgrades. &lt;b&gt;Benefits&lt;/b&gt; are becoming more important than &lt;b&gt;features&lt;/b&gt;.&lt;/p&gt;

&lt;h2&gt;Social, crowdsourcing and gamification&lt;/h2&gt;
&lt;p&gt;More than 3 years ago, I was very excited to present a concept we have been developing in &lt;a href="http://neolab.si/" class="more" target="_blank" title="Neolab, software development"&gt;Neolab&lt;/a&gt; on &lt;a href="http://dsi2009.si/default.aspx?id=4&amp;l1=40" target="_blank" title="DSI 2009" class="more"&gt;Days of Slovenian IT&lt;/a&gt;. I called it &lt;a href="http://stritar.net/Post/IT_Plus_Web_20_Equals_IT_20.aspx" class="more" target="_blank" title="IT + Web 2.0 = IT 2.0"&gt;IT 2.0&lt;/a&gt;, since it meant &lt;a href="http://neolab.si/Information-Solutions-2-0.aspx#down" class="more" target="_blank" title="IT 2.0: Information Solutions 2.0 - Neolab
"&gt;integrating social services into enterprise software&lt;/a&gt; (at that time, &lt;a href="http://en.wikipedia.org/wiki/Enterprise_2.0" class="more" target="_blank" title="Enterprise 2.0 on Wikipedia"&gt;Enterprise 2.0&lt;/a&gt; was more widely used for stand-alone social software such as wikis or corporate blogs). The truth is, I didn't get the chance to sell it well, and in the mean time, &lt;a href="http://stritar.net/Post/Why_Web_2-0_Is_So_Important.aspx" class="more" target="_blank" title="Why Web 2.0 is so important"&gt;disruptive social services&lt;/a&gt; managed to &lt;b&gt;fully find their way into the enterprise&lt;/b&gt;. But business won't stop here; there are many other &lt;b&gt;fascinating things&lt;/b&gt; the internet has invented that can fully be applied to &lt;b&gt;corporate environments&lt;/b&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://gigaom.com/collaboration/gamification-network-2011/" class="more" target="_blank" title="Gamification: more than fun and games, it’s about engagement"&gt;Gamification&lt;/a&gt;, the art of using &lt;b&gt;gaming mechanics&lt;/b&gt; in non gaming environments, is getting more and more &lt;a href="http://blog.softwareinsider.org/2011/12/07/research-summary-demystifying-enterprise-gamification-for-business/" class="more" target="_blank" title="Research Summary: Demystifying Enterprise Gamification For Business"&gt;claim beyond the web&lt;/a&gt;. Both for motivating &lt;b&gt;employees&lt;/b&gt;, as for motivating &lt;b&gt;clients&lt;/b&gt;. We all like to play, so why should &lt;b&gt;work be any different&lt;/b&gt;? And we all like to &lt;b&gt;participate in something bigger&lt;/b&gt;, that is why &lt;a href="http://en.wikipedia.org/wiki/Crowdsourcing" class="more" target="_blank" title="Crowdsourcing on Wikipedia"&gt;crowdsourcing&lt;/a&gt;, where people &lt;a href="http://www.cracked.com/article_19431_5-mind-blowing-things-crowds-do-better-than-experts.html" class="more" target="_blank" title="5 Mind Blowing Things Crowds Do Better Than Experts"&gt;coproduce something&lt;/a&gt;, can bring such exciting results. Can you see where I'm headed?&lt;/p&gt;

&lt;p&gt;We are all &lt;b&gt;human&lt;/b&gt;, and in the end, behaving on a &lt;b&gt;very basic level&lt;/b&gt;. Sometimes we perform better, sometimes worse, and we all hold &lt;b&gt;hidden potential&lt;/b&gt; even ourselves aren't aware of. That is what software in the workplace can sometimes &lt;b&gt;help us discover&lt;/b&gt;, and it's something more and more businesses are aware of. &lt;b&gt;Social, gamification and crowdsourcing&lt;/b&gt; are only a few approaches that can make us &lt;a href="http://www.jeffbullas.com/2012/02/06/10-ways-social-media-is-transforming-our-world/" class="more" target="_blank" title="10 Ways Social Media is Transforming our World"&gt;feel better and more motivated&lt;/a&gt;, and they are all concepts that enterprise IT will adopt sooner or later. &lt;b&gt;Behind every company, there are only people&lt;/b&gt;.&lt;/p&gt;

&lt;h2&gt;The final destination of enterprise IT&lt;/h2&gt;
&lt;p&gt;These are the &lt;b&gt;concepts and technologies&lt;/b&gt; that will shape &lt;b&gt;enterprise IT of tomorrow&lt;/b&gt;. And with it, &lt;b&gt;new challenges&lt;/b&gt; will emerge, together with &lt;b&gt;new profiles of people&lt;/b&gt;, who will &lt;a  href="http://mashable.com/2012/01/13/career-of-the-future-data-scientist-infographic/" class="more" target="_blank" title="Career of the Future: Data Scientist [INFOGRAPHIC]"&gt;understand and use all of the above&lt;/a&gt;. These profiles, such as &lt;b&gt;data scientists&lt;/b&gt; and &lt;b&gt;business analysts&lt;/b&gt;, will help enterprise IT do what it was destined to do: Integrate &lt;b&gt;life, the universe and everything&lt;/b&gt;.&lt;/p&gt;

&lt;p&gt;But that's another story. Coming up soon.&lt;/p&gt;

&lt;p class="infoseries"&gt;Check out the complete &lt;a href="http://stritar.net/Series/The-final-destination.aspx" class="more"  title="The final destination of enterprise IT"&gt;The final destination&lt;/a&gt; series.&lt;/p&gt;</description><link>http://stritar.net/Post/The-final-destination-part-1-technologies-and-concepts-enterprise-IT-will-have-to-adopt.aspx</link></item></channel></rss>