Software Engineering & the Basics of Good Database Design
What are the basics of good database design? How does one go about effectively administering a database? How does database design relate to the creation, maintenance and scalability of software? This article will answer those questions and more, in an effort to help you understand the software development process.
Read the full, pdf version of this article: http://mikestratton.net/assets/database_design_process.pdf
Basics of Database Design
Although this article does briefly touch on the software development process, the main focus is the basics of database design, a “sub-set” of software engineering. This article focuses on a few basic concepts, such as:
- Relational Databases
- Good Database Design Methods
To help insure that your database design is efficient and easy to maintain, it helps to think of normalization as a set of rules to follow, known as normal forms. There are three steps to follow in the process of normalization; a) first normal form, b) second normal form, and c) third normal form.
The Design Process (Database)
A continuing problem in the design, development, and maintenance of applications is the lack in planning. The design process must include an extensive evaluation of the database. Some things to consider while designing your database are as follows. What should your database hold? How does the data relate to other data? It is also imperative that your database is scalable. Is your database scalable?
Generally, the design process of a database can be broken down into just a few steps.
- Define objective of the database
- Design structures (tables, fields)
- Define, evaluate, and re-evaluate relationships
- Define and implement business rules
- Develop/code the application
Please note: Some software analysts take an agile approach in the development of software and will spend little or no time in the design stage, moving directly into the coding stage. The argument that exists supporting this methodology states that this improves on the timeframe, usability and performance as a result of the stages being iterative (repetitive) as opposed to being incremental. This article was written from a non-agile perspective; yet, I do not agree or disagree with the agile approach. I believe that agile software development can be an extremely useful software development methodology, especially when there are extreme time constraints. My view is that both the traditional (waterfall methodology) and modern (agile methodology) have their place.
In the same manor that a mechanical aircraft engineer plans analyzes, designs and creates the blueprints for an airplane, a software analyst/engineer must analyze, design and code by a set of industry standards. Complete comprehension of relational databases is essential in the development of any systems application, as is the ability to evaluate and choose the proper methodology for a specific software project Database design is one small portion of the creation of robust, performance-driven, extensible software. Whether using the waterfall, agile or other approach when creating software, it is imperative that a software engineer focus on functionality, maintenance and scalability.
Element K. (Unknown). SAMS Teach Yourself PHP, MySQL and Apache All in One [2nd Edition]. Retrieved July 3, 2012, from Element K Corporation: http://www.elementk.com
Comment: The online course, “SAMS Teach Yourself PHP, MySQL and Apache All in One [2nd Edition]”, was provided by the Association for Computing Machinery, in partnership with Element K Corporation. Association for Computing Machinery (2012), http://www.acm.org