Database Desigm
Minimize data reduncancy with normalization
One Primary Key must be unique, unchanging, non null
Understanding Query Optimization:
Indexes
none indexes mean full table lookups vs index that binary tree the shit, none primary key indexes create new tiny table for 2 binary tree lookups
Updating indexes takes longer
Should I use a id(surrogate key) or a unique attribute(natural key) for the primary key?
Be consistent for your entire database so people don't get confused whats the foreign key
Natural connection to real world that may change and requires some thought, natural more clear when reading in db
Relationships
Parent-child
one to many
child has foreign key that is primary key of parent
Parent is person ordering or author, child is order or book
Many to Many
Problems: Lists of ids are hard to maintain and both try to be parents
Solution: Joining/bridging/intermediate table that becomes the child of both parents. Compound/composite key here
Student
Class
3
4
3
5
5
4
Lookup Table
Now have a lu_membership lookup table, that is foreign key in member table instead of stored with member.
id
Membership
1
Bronze
2
Silver
3
Gold
Foreign key constraints means all members can only have memberships that exist, updates to membership ez
Foreign Key Constraints
FK constraints refers to what happens to parents referenced by children:
on delete
on update
For each action can:
restrict(stops action)
cascade(update/delete children as well)
set null(remove foreign key reference)
Normalization
1st Normal Form: Single elements, not lists. Create new tables with a row with foreign key_id and each element of list
2nd Normal Form: Keep attributes in correct table
3rd Normal Form: Column depends on column which depends on pk. Transitive dependency: an attribute depends on anthoer attribute in the row i.e star, star meaning which depends on type. Should create new table for stars
Other
Enums
Lets say you use gender across tables like as a requirement of group membership or person
Would you make a table with
id
title
1
male
2
female
And then reference it with foreign keys
Compared to just storing male
everywhere db level enums are better b/c:
foreign key database level assurance (not for lists)
easy cross platform changes as not typed to code
Removes constants in code and puts in db
Worse b/c:
support weird/difficult seeing gender = 1
Naming
User
or Users
=> survey says singular cuz
slightly clearer on JOINs like join on user, though worse on slect from user, but you can consider it the user table
Consistency: Plural forms vary word to word(status, news), what if each entry is plural like studentfacts facts
In alphabetical order, order then orderdetails better than orderdetails then orders
less letters :)
Last updated