Community Call to Action: NOT Northwind
I'm just sick of Northwind. Sick to death of the Northwind Database. You know, this is the Products, Categories, Suppliers, yada yada yada sample database that you've been seeing in Microsoft demos since the beginning of time. (FYI, the beginning of time was about 1997. ;) )
Why do we use it? Because it's there. Because it's easy, it exists, and it takes two seconds to install. It's full of good sample data that has international characters. It has a few views and a few sprocs and it's wholly harmless.
Now, some folks don't like Microsoft's (often) focus on "Database Driven Development," and I'm basically Switzerland at this point. Consider me neutral because I've done it both ways, both Domain Driven and Database Driven. With an ORM and without. I'm not 100% convinced either way and I like to have choice.
Plus, when I'm showing some technology that is talking to a Database or to POCO (Plain Ol' CLR Objects) I still need good sample data to pull from. Thus, the Northwind Virus continues.
And I hate it with the heat of a thousand suns.
There are others I could use, like AdventureWorks and its variants and specifically the AdventureWorksLT example is pretty lightweight, but still it doesn't quite turn me on.
I suspect, though, that if we (the community) took a few weeks, did some Skype conference calls, assigned some tasks, brainstormed and did it, we could come up with NotNorthwind. The Lazy Web, the Web of Clay Shirkey, .NET Flash Mobs included, could create a sample database, (we can argue about whether to start in the middle or in the db in the first meeting) as well as some good examples of things like NHibernate, LINQ to SQL or Whatever,
Requirements
- Complex enough to be called Real World but simple enough that someone could "get it" in 5-10 minutes
- In a familiar Domain Space that makes sense to folks all over the world
- Has a decent amount of sample data with strings that are more than just [a-z|A-Z|0-9]
Deliverable(s)
- Have a single .SQL file that one can run and immediately get a working database
- Sample Code for any of a number of Database access patterns, ORMs, whatever. This might require a few subtle versions.
I'm making http://www.codeplex.com/notnorthwind and I want:
- A Project Manager (probably best if it's not me)
- Modelers, Sample Code Writers
- Sample Data Creators
- Documentation Person
- Release Manager
Who's with me? Leave a comment with your CodePlex Username, Skype Username, your TimeZone offset, and your level of interest and let's do a Skype call to kick this off and be rid of Northwind. Also, if you think this is a stupid idea, why?
Oh, by the way, if you're at TechEd US this next week, be sure to say Hi if you see me, and let's talk about this project, because most of my demos at TechEd 2008 are <gulp> Northwindian in their heritage.
About Scott
Scott Hanselman is a former professor, former Chief Architect in finance, now speaker, consultant, father, diabetic, and Microsoft employee. He is a failed stand-up comic, a cornrower, and a book author.
About Newsletter
In Orlando about 20 minutes from TechEd actually. I'll be there on Wed. only, got a day pass for hosting an INETA Birds of a Feather session (the one about user groups in the last time slot of the evening). I'll also be at InBetween Sunday for Russ' Tool Shed (going both days had a low wife acceptance factor, since one of us has to stay home with the kids... yeah, it's cool being a .NET dev married to another .NET dev).
I think I have a winner here: Lots of sample apps out there (for Rails, a few I've seen for ASP.NET and MVC, etc) are simple Blog engines.
Maybe the new de-facto sample DB should be a simple blog db. It seems to cover the gambit of things and could easily be used either for domain-driven or model-driven (DB-driven). It could contain I18N data, secure data (passwords), etc.
Whatchathink?
I'm in. jfiorato for Skype and Codeplex. Happy to help with coding/modeling, project management, or sample data.
I don't think it's a stupid idea. I'd love to see what percentage of databases out there actually have a table called "Products" or "Orders". 20% maybe?
Seems like it could be difficult to gather all the folks required to do things other than modeling and coding. But, I'm willing to give it a whirl.
Jim
I'd love to be involved in some way. I'm not sure how best I could contribute, but I will help out where I can. I have some decent SQL and C# skills as well as an overall sponge-like demeanor when it comes to picking up new skills.
I'm on CodePlex and skype as jerhinesmith.
Justin
++Alan
That said, I'm a fan of AdventureWorksLT - small enough I don't mind including it in a download, but enough tables and data to make an effective demo. It may not be the way I would design a database, but it's quirks make it great for demos to show off complex queries (like using LINQ to SQL to pull products with their model descriptions).
I've not used it yet, but the fact AdventureWorks comes is a few versions (include a version with a data warehouse) is also a plus.
To be honest, the Blog database is a good suggestion, if it can be complex enough.
+1 on the single SQL file. There is nothing better than being able to spin up a DB in a heartbeat (or to regen it in a pinch).
+1 on the sample code. Nice way to grok other methods!
A blog database could work, or even the old "CD library" idea where you have artists, genres, albums, songs, playlists etc. An example of normalization there might be a child table of artists for solo artists, which had extra fields for personal information like date of birth or sex. So inserting a single "artist" into the db (which might be a solo artist or a band) could mean inserting into two tables at once.
ps. This is the first time I've ever left a comment anywhere using my new MyOpenID identity. Hope it works! :)
I'm really glad you thought of that NotNorthwind thing, i've been working as an instructor since 3 months, and i have to admit, i find it quite easy to get a nice demo using northwind, still i hate to do the very same thing over and over again, I find it lousey. Anyways, that's my codeplex user name "Galilyou". Hope i can provide as much assistance as i can .. regards !
Northwind
Aaaaaaaaiiiiiiiiiieeeeeeeeee!!!!!!!!!
So we gathered around coffee and decided on 'Z' -- it was way cooler than 'Northwind' and because it's a letter of the alphabet there weren't any thorny issues.
But yeah, count me in...
Codeplex=CharlieO
Skype=retrosight
Yes, AdventureWorksLT might be a good starting point, but it exists already, so I guess, point taken, it exists, and no need to "fix it."
Scott Galloway from MSFT - I knew you'd be here eventually to squash my idea. ;) Seriously, I suspected that we'd come up with something NOT producty like a game or a blog, so we're still cool. We can use the names from Northwind for blog commenters, we can use public domain NYTimes stories or Guttenburg books for blog posts, and categories are just that. Then I'll run it through legal. Plus, we don't have to distribute it, it's owned by the community! Bam!
Nathan - Why do you think a blog would be hard? Posts, Comments, Categories, Tracking (referals, trackbacks), config, what else?
mabster - Yes, I like that idea.
Shane - You mean a database of tables representing metadata? That is a scenario I've seen, but rarely. Seems not-mainstream. Am I wrong?
So, here's the ideas so far:
* Blog
* Media/Library (like the Delicious Monster app) including games, cds, books, etc.
* Game - MUD?
This is really a great idea. I am ready for the project as Modelers and Sample Code Writer. I can't access skype from my office but I am always available on live messanger.
I will create skype id in the evening and let you know.
Messanger ID: yaneshtyagi@hotmail.com
Codeplex Id: yaneshtyagi
Timezone: India (+5:30)
I'm down for helping. And @scott and @shane: Microsoft Dynamics is based on that principle. There are only about 10 tables in the database.
Here's my info.
Codeplex: darren
Timezone: MST (-7:00)
Skype: clanaota
AdventureWorksLT seems to have cured most of the Enterprisitis in AdventureWorks, and you don't explain what you don't like about it.
I guess my question is, is there a real reason other than that you're bored of Northwind? Is this something we could get "blessed" so we'll see official sample code on it, or is it just something that presenters who are bored with Northwind will use?
And can you please call it AdventureWind?
@Shane Milton: "What about metadata-based databases?" You're not talking about a database-within-a-database are you?
"For want of a better term, it is usually called ‘One True Lookup syndrome’ or OTLS. It is in the same league as the rather more severe affliction ‘EAV disease’ (Entity Attribute Value). It is like measles or Mumps in that it afflicts the sufferer just once and he, or she, is thereafter immune."
Phil Factor, When the fever is over, and one's work is done
I say screw databases - be cool and use Twitter's XML API with Astoria or something.
Time zone: GMT +1 (West Europe)
Codeplex: WouterDemuynck
Skype: demuynckwouter
I'd like to get involved in this too. While there seems to be a few votes for basing it on a blog; I'd like to throw soe support behind a game. Say something like poker? Although I'm not sure it would internationalise very well. Chess might work better, but I'm not sure the demo apps would be exciting enough - check out http://www.shockwave.com/gamelanding/emailchess.jsp.
Since it's a community effort we could do the naming with our tongue firmly in our cheeks - for example "Rainforest" for an online retailer, "FaceSpace" for a social networking site or "BirdSong" for the previously mentioned messaging service. While you don't want something too cheesy, I think something like that could work.
Another idea would be the db behind a personalised startpage...
Here are my details:
skype: mclarkeuk
codeplex: mclarke
Timezone: Scotland (GMT)
My time zone is not realy relevant. Officially I'm GMT+2, but I work as I would be on the East Coast.
AdventureWorks is ok, but with flaws.
Could NotNorthwind address the following?
- Cross Platform (scripts for Sql 2000, Sql 2005 etc, MySQL, Oracle, PostgreSQL, Firebase etc)
- Multiple data creation scripts (for small, large and huge databases)
I'd happily contribute if so, it's better to share the effort than just developing my own!
1. Animal shelter system (animals, rescues, tags, etc)
2. Library system (books, check-out, patrons etc)
3. Simple Medical system
4. Gamer tracking system (much like what xbox live is)
I'd love to see a db that makes sense for the web, windows and compact framework worlds (ie. not just for ASP.NET). There's just something about the Blog idea that makes me cringe :-)
Time zone: GMT
Codeplex: Ben2004uk
Skype: Ben2005uk
I like the idea of going for sample Media shop having CD's Games, Songs etc rather then blog as i beleive Blogs are still contain Acronames of our field while media thing would be generic and more domain specific.
my skype and codeplex id are gripusa
while my timezone is +1 (Edinburgh/London)
I've been a C#/SQL developer for several years, and I'd love to help with some development.
I don't have skype though and it's blocked at work anyway, so the only way to contact me is via GoogleTalk
My codeplex id: configurator
Timezone: Israel, GMT+3
Between watch lists, a crossing-engine to simulate executions, analytics, position management, product lookups, news, etc, there's quite a bit of stuff there.
It can start simple, like a list current positions, but it can branch out provide room for niche examples as needed.
Btw, I still think that the blog db would be a good idea simply because it is something that people understand and use quite frequently in one for or another.
- Users
- Blogs
- Forums
- Wikis
- Articles
- Tagging-system -- so you can tag almost every other type of "post" in above tables
- Security and permissions
This would make it meaningful to a lot of users, be complex, but not to complex and have some relations. It fills all above list requirements. Just my input.
Thanks
Something related to sports would be familiar to more people than many business domains, IMO.
I think it simple but tackles a number of current challenges such as localization, e-commerce, and others. Plus, it's a community project already :).
Right Rob?
As for a metadata based DB, I've worked on a couple, and they work really well in situations where you have to capture standardized data, but what that data is changes from one group to another, and you can let the users set up what they need to capture. It is a lot of work, though. It might be useful for a media database, where what you're capturing differs by media type. (CDs have an artist and song tracks, DVDs have a director, I'm not sure what games would have, other than an ESRB rating.)
Skype: jim..blanchard (yes 2 ..)
CodePlex: jimindenver
Time Zone: Mountain (GMT -7)
It needs to be a fresh idea but something everyone can relate to. Plus we need to think in terms of the applications going to be using it - do we want to write another blog sample? Or would we want something more interesting to base our demos around.
E-Commerce and ordering systems are out too - Northwind and AdventureWorks, plus the many others.....
I like the idea of a football database, been done before but not done to death. Sure we can come up with something better.
I posted here (http://geekswithblogs.net/jwatson/archive/2005/08/31/51790.aspx) about using VPC to get WfW 3.11 going and just for you, here's a screenshot of Northwind circa Access 1.1 (http://www.flickr.com/photos/82888146@N00/38888911/in/set-857251/)
I'm interested in helping with modeling, sample apps, or sample data.
skype: alvinashcraft
CodePlex: alashcraft
TimeZone: Eastern (GMT -4)
And I hate it with the heat of a thousand suns.
Oh come on Scott, tell us how you really feel...
I like the idea of a media/library database, enough information to use stock, orders and a lot of statistics...
I think the next step would be to setup a SharedView.com session along with a Skype call. We could do up to 15 people.
I like the Media Library the most as it's very generic and can be as complex as we want to make it.
codeplex:loudej
skype:loudej
tz:central -6
Rename stuff like SalesFor1997 to SalesFor2008 and NorthWind to LighthouseTraders and you'll have a good database!
I mean It's still a good database for demos. Developers are familiar with it.
I don't understand the urgency for using Skype.
I think the 'let's get some smart people together to build different DALs based on differnt data-access technologies all against the same database' is actually a really good one, but I wouldn't personally waste any precious cycles at all on 'inventing' a completely new database model to do this against.
-Steve B.
How about a mini IMDB? Could have entries for the movie names and/or summaries in different languages and even charsets (for instance Norwegian, Russian, Hebrew and Japanese), could include images (for instance of Movie posters), linkable to actors, directors, etc. Could be a legal problem with including the images though...
I'm Norwegian myself so I could help supply content in Norwegian (we have the characters æøå) and as a C# programmer I could help with sample code as well. I'm familliar with both MSSQL and MySQL.
Codeplex and Skype: GlennFHenriksen
Time zone: GMT + 1 (Norway)
I have created my skype id. This is yaneshtyagi.
I will create skype id in the evening and let you know.
Messanger ID: yaneshtyagi@hotmail.com
Codeplex Id: yaneshtyagi
Timezone: India (+5:30)
My coolplex id : kashyapa.
Hotmail : kashyapa78@hotmail.com
I've conducted about 800 interviews for webdevs, and part of that interview is always designing the schema for a webapp. The two that have been most successful, across multiple cultures, and across multiple platforms, have been:
- Recipes (ingredients, measures, instructions, dishes, complimentary dishes, etc)
- Local sports/activities league (teams, players, schedule, etc)
The further away from a specific business vertical, the better. Remember that a lot of people code for science or non-profits. However, in my experience, everyone knows the entities that go into a recipe, and everyone knows the entities that go into a community league.
There seems to be growing consensus on "blog" or "media library", but I agree with mabster -- those examples are not ideal because when you add a "post" or "CD" you pretty much only add one record to one table. (Compare to adding a "recipe", which involves upserting ingredients, adding ordinal instructions, etc.)
However, both "blog" and "media library" are an order of magnitude more accessible than Northwinds and Adventureworks, so three cheers to the effort, no matter what you end up selecting.
CodePlex: willsllc
Timezone: EST
People are talking about media library OR blog. I think we should merge the two.
I imagin a media library that maintains a blog and forum. Their blog contains post about the titles, interesting stories behind these titles and interviews with the artists etc. In the forum section, members of the media library put their comments on the titles, people seek suggestions for good titles etc.
I know, I am thinking on the higher side, but today most of the websites supports forums. So if we can come up with a media library with blog and forum, it would serve our purpose in better way.
Yanesh Tyagi
It could be used for a social type website, or just on your local system for keeping track of things, you could integrate it with email through VSTO, wrap it up in a web service, access it through WCF, make a WPF interface that looks like a stack of 3x5 index cards, etc...
It's mundane enough that it's easy to understand, but you can pack lots of clever content into the data so that it's amusing to look over the list of stuff to do.
Even better... The list of stuff to do could, in itself be another sub-adventure, comprising a scavenger hunt, obscure research topics, travel destinations, or around the town tours.. One of the lists could be "What to do in Portland on a Saturday night", or tasty recipes.
Blah blah blah... Anyway, a todo list structure is pretty generic without being totally abstract and unengaging like the Northwind one is, and it, and it's examples, could make a nice component that's sort of missing from (or just lamely implemented in) a lot of applications.
I'd offer to help, but it seems you're already over-run with support.
As i think inserting a CD item still contain related records in it as a recipe. (especially ppl from sub contient know it well like me :) ) becuase a CD may contain an artist, band etc associated with it, then rents, price history blah blah. apology if i am wrong
That said if the new Antiwind hotness is going forward a few things to consider are...
- It'll need a self-referential/hierarchy table, where ParentID references the ID column in the same table. Useful for making sure your ORM of choice can handle those types of tables.
- As painful as it is it will need some non-standard table, stored proc and column names. A huge use for Northwind is for making sure funky names don't break your ORM.
- Sample data that should be escaped, again useful for unit tests. This is a place where Northwind lets me down.
Basically Antiwind/NotNorthwind should be wrench throwing supermodel: super clean database design for others to learn from while having enough non-standard things to not let ORM's off the hook.
http://www.youtube.com/watch?v=0JptwfPC0Zg
I think Northwind has 2 things going for it we need to consider:
1) LEGACY. People know it immediately.
2) LEGAL. You know the rest.
Perhaps we can make an "AltWind" DB and really quickly just tweak what's there to be more performant, more relational, and more sexxy. Cause let's face it, Northwind is pretty 80's (Flock of Seagulls). We need to Maroon 5 it (that was the CD you had in your car that day wasn't it? I don't know what you kids are listening to these days...).
Whaddya say? Let's REV it!
Comments are closed.
Product Coolness = 1 / TTN
What do you think? ;-)