The central challenge of repository implementations is how to provide support for an extensible list of metadata schema. The most common solution is to use a universal schema (e.g. an entity table, a property-value table and a relationship table). This makes writing tools like repository browsers easier but at a significant cost. Repository performance and queriability suffers. Queries run slowly and standard database tools like SQL Server Reporting Services do not work well because they expect well structured data.

Instead of using a universal schema approach, the design of the Oslo repository has focused on making well structured relational APIs work. This makes the engineering effort harder but customers benefit from a performant store that can be easily queried and used with a wide variety of stores. For example, the query to retrieve name and accessibility of a particular CLR method using the universal schema approach would be something like:

select N.[Value] as [Name], A.[Value] as [Accessibility]
from [Properties] as N, [Properties] as A
where N.[Id] = @id and A.[Id] = @id
and
      N.[Property] = ‘82aba91a-ca89-4e4f-bd39-9b67ec02ab5a’ and -- Name Property

      A.[Property] = ‘efad35c8-46bb-439e-8a5d-7bd0f695d27f’  -- Accessibility Property

by contrast the repository query is:

select M.[Name], M.[Accessibility]
from [CLR].[Methods] as M
where M.[Id] = @id

which is a natural SQL query.

Reliance on universal schema are just one of the issues past repository implementations have suffered from. Now that the repository is announced I am free to talk about its design.  In subsequent articles I will go through these design tradeoffs and how we resolve these issues.

Last week, as part of the Oslo announcement, Microsoft announced that we are building a metadata repository that will ship in System Center, BizTalk and Visual Studio. If you are interested in reading more about Oslo and the repository then the Oslo site, press release and Directions on Microsoft articles are good starts.

We need great developers and testers to complete the repository team. If you are interested in helping change the way software is built and managed then please apply for one of the following positions:

Development Manager (position #179184)

Software Developer (position #179188)

Modeler (position #213280)

Program Manager (position #185006)