ODTUGFlexible Design and Modeling Planning for Constant Change Gwen Shapira and Robyn Sands
ODTUGThere is nothing permanent except change
ODTUG Agile ValuesIndividuals and interactions OVER processes and tools.Working software OVER comprehensive documentation.Customer collaborations OVER contract negotiation.Responding to change OVER following a plan. from ‘The Manifesto for Agile Development’ at agilemanifesto.org
ODTUG Is this ‘Agile’?• Database design is neglected• Object models do not translate to good database design• Scalability and performance are not last minute add-ons• Systems can not be flexible unless you plan for change
ODTUG The Emperor has no clothes!• Database performance and scalability left out• Normalization and constraints are ‘old school• ‘Just good enough’ doesn’t scale• If all ideas come from the user, where’s the innovation?
ODTUGWhy aren’t database people Agile? Data professionals are resistant to change. Missed the <blank>* revolution of the <time period>. Haven’t kept up with modern software development. Besides, DBAs hate all developers .... * insert favorite trend here (object, agile, extreme, etc) with the appropriate timeframe.
ODTUG It’s really development’s faultDevelopers create performance problems and expectDBAs to fix them later.Missed the <blank>* foundational studies of the <timeperiod>.Don’t take enough time to understand the data.Developers just hate data people on principle. * insert favorite university course title here with the appropriate timeframe.
ODTUGBlame and finger-pointing doesn’t fix anything. We need the best of both worlds to succeed.
ODTUG Waterfall doesn’t work Chaos doesn’t workWe need controlled iterations
ODTUG What is important to a database?• Entities, relationships and data types• Access paths• Number of records• Distribution of the data• Lifespan of the information
ORM is not a Data Model • It hides the data model • Which is a good thing… • But if no one ever sees the data model… • How do you know it will scale?
ODTUG Building a refactorable databaseDesign for the inevitable change: • Structure schema for the data at rest. • Speed up data access with narrow tables, indexed organized tables or partitioning. • Delay normalization for unknowns, unused values. • Packages and procedures make possible to change the schema without changing the application code.
ODTUG Normalization• Prevents redundant data• Goal is a ‘single source of truth’• Integrity and relationships protected by keys and constraints• Denormalize for performance when you must• Normalization is what makes a database ‘Agile’.
ODTUG Transactional API• Everything in PL/SQL calls – Application doesn’t touch tables – Suggestion of table design changes does not incite panic• Clean interface between application and the database – Unit Testing – Simplify Builds – Minimize impact of DB changes• Prepare for caching
ODTUGThe interface between the database and the application should be jointly designed by application and database developers. Meet in the ring and fight it out.
ODTUG Evolutionary designPlan the interface: • What does development need? • How will you provide it?Using old dogs for new tricks: • Procedures, packages and views • Table structures can change without impacting the application layerBuild the concept • Adapt as you gain knowledge
ODTUG Basic Design #Fail1. Inappropriate table and column names2. Mismatching data types3. Multi-purpose columns4. Lack of unique and non-volatile primary key5. Lack of common vocabulary6. Skipping the procedure - just this once.7. Hiding the data from the developer8. Duplicate processing
ODTUGA duck is developer’s best friend
ODTUGWar Stories I – One Table to Rule Them All
ODTUGWar Stories II –Hiding the Data
ODTUG Keep the good• Watch your end users to understand how they use data.• Know your data and application goals, and anticipate the changes.• Design applications for the process, design databases for data access.• Create a normalized ERD to understand the entities and relationships.• Use an evolutionary modeling with an iterative approach• Normalize for performance AND agility.• Use denormalization to ‘preassemble’ data when you must but avoid secondary sources of truth‘.
ODTUG Lose the bias Agile is not ‘code and fix’. Normalization is not dead. Logical and physical database design will have a significant impact on your application’s success. (and performance)Whether that impact is positive or negative is up to us.
ODTUGDesign ends when theapplication is shelved.As long as someone isusing the application –expect changes…And enjoy the ride.