All pastes #984150 Raw Edit

Anonymous

public text v1 · immutable
·published 2008-04-13 23:34 UTC
rendered paste body
I am writing this tutorial into database design to help assist anyone who needs a crash course into good database design.   This is just a intro, there is far more to database design then what is going to be described in this tutorial

So lets say you wanted to create a database to list every city in the US.   Where do you start.   Simple, you list what you need to store, its fairly simple:

CityName	CountyName	StateName

Now, lets put data into our table (note this data is totally made up)

CityName	CountyName	StateName	StateAddv	Population

City1		County1		StateA		SA		1000
City2		County1		StateA		SA		2000
City3		County2		StateA		SA		3000
City4		County2		StateA		SA		4000
City5		County3		StateB		SB		5000
City6		County3		StateB		SB		6000
City7		County4		StateB		SB		7000
City8		County4		StateB		SB		8000
City9		County5		StateC		SC		9000
City10		County5		StateC		SC		10000
City11		County6		StateC		SC		11000
City12		County6		StateC		SC		12000

In this table, we have 12 cities, in 6 unique counties, in 3 states.   Its perfect, each city is can be uniquely identified, no issues... right?

Well no, What is a state name is entered incorrectly, or misspelled, you created a entire state!   Plus your saving a state name for each city in that state, so we need to reduce redundancy.  Lets try it

OK, first we find our entities.   We have three.   State, City, and County.  Each one of these is a unique thing, with their own attributes.  A attribute could be something such as Names, StateAddv, and population.

State:
StateName, StateAddv

County:
CountyName

City:
CityName, Population

Next thing we must to, is be able to uniquely identify each entity.  For a state, Both StateName, and StateAddv can be used to uniquely identify, but StateNames can be different lengths, and long.   But StateAddv will ALWAYS be 2 charters longs, so it would make a much better option.

For the County, the name of the county can not be used to uniquely identify a county, since it would be possible that two counties in the entire US could be the same, plus you run into issues with StateName such as length and spelling.  So we need to add the key, we will call it 'CountyID'

The city will be similar to the county, it would be possible for two cities to have same name, or population, so we will add a unique key.

State:
(StateAddv), StateName

County:
(CountyID), CountyName

City:
(CityID), CityName, Population

Now we have to setup our relation ships, lucky in this situation its pretty easy.   There are three types of relation ships, one to one, many to one, and many to many.  How do we see these relationships?

There are many counties in one state (County-State is a Many to One)
There are many cities in one county (City-County is a Many to One)
There are many cities in one state (City-State is a Many to one)

Now there is a special situation, County is dependent on State, and City is dependent on County.  So are diagram looks somewhat like this:

(City)M - 1(County)M - 1(State)

This would be a effective way to setup out database, so how do it look?



StateAddv	StateName

SA		StateA
SB		StateB
SC		StateC

CountyID	CountyName	StateAddv

1		County1		SA
2		County2		SA
3		County3		SB
4		County4		SB
5		County5		SC
6		County6		SC

CityID		CountyID	CityName	Population

1		1		City1		1000
2		1		City2		2000
3		2		City3		3000
4		2		City4		4000
5		3		City5		5000
6		3		City6		6000
7		4		City7		7000
8		4		City8		8000
9		5		City9		9000
10		5		City10		10000
11		6		City11		11000
12		6		City12		12000

And there we have it, a small intro into the world of database design