85189

Why aren't all the normal forms used?

Question:

Mostly if you see the internet only up to 3rd or 4th normal forms are discussed, if you read there are up to 7 normal forms so why aren't they discussed by people on the internet you hardly find any example related to them whether on YouTube or any any other place.

Answer1:

Mostly a combination of 1. ignorance of benefits and 2. limitations of DBMSs.

One could blame the limitations on the ignorance--of designers & implementers but maybe mostly of users, leading to no market, leading to limitations. Ignorance includes not just the benefits of normalization but of integrity constraints.

All base tables can be normalized to 5NF. However, that might not preserve all functional dependencies. Preserved ones get enforced by key constraints (that certain column sets are UNIQUE NOT NULL) while non-preserved ones require equality dependency constraints (that the set of subrow values in two column sets are always equal).

The DBMS limitation issue is that declarative constraints necessary for 5NF integrity are not usually available, so people don't normalize that far. But even so, if they only want to use the declarative constraints typically available (PK, UNIQUE NOT NULL, FK & CHECK) then they ought to normalize to 5NF and then consciously denormalize, at the cost of multiple table update transactions to deal with the consequent update anomalies.

PS Normal forms are just different conditions that have been found with helpful properties. Also different axioms and algorithms. The normal forms on the continuum from 1NF to 6NF are those dealing with problematic FDs (functional dependencies) and JDs (join dependencies). They can be ordered so that if a relation value or variable satisfies a form then it satisfies the forms before but not necessarily after. Currently: 1NF, 2NF, 3NF, EKNF, BCNF, 4NF, ETNF, RFNF aka KCNF, SKNF, 5NF aka PJ/NF, Overstrong PJ/NF, 6NF.

Recommend

  • Listing functional dependencies - include transitive or multivalued?
  • Model normalization before model validation in Asp.Net Core 2.0+
  • XmlSerializer enumeration deserialization failing on (non existent) whitespace
  • Why the pattern matches one word while there is two identical word?
  • Average from different columns in shell script
  • Bash replace in CSV multiple columns
  • React Native + Enzyme + Jest: Mocked redux function call is not registered / is called zero times
  • How to convert multiple, different-sized PostScript files to a single PDF?
  • Explain EMV MDK Keys Enc MAC AC
  • How to perform the FFT to a wave-file using NAudio
  • Joining a table to itself in Oracle
  • awk/sed/grep extract part of lines with specific pattern
  • Conditional Foreign Key to multiple tables
  • Modify the content of a std container through a different container
  • Getting java.lang.IllegalStateException: This call must happen in the AWT Event Dispatch Thread! Ple
  • Why are there differences in psych::principal between “Varimax” and “varimax”?
  • The dimensions in hist for numpy.histogram with density = True
  • Locking tables in Access 2010
  • Does Stream.boxed() preserve order?
  • Does data used by an app get deleted when a user installs an update?
  • Find exception hiding/swallowing in C# code in VS2013
  • Storing command output lines into array based on new line character
  • SQL Need a query that returns every field that contains a specified letter
  • UglifyJS2 removes wanted comments at the end of a block or file
  • How to save in openpyxl without losing formulae?
  • Is it good to have multiple database running in a same project?
  • TabBarController: Orienting views in different orientations
  • Displaying and sizing a grayscale from a QImage in Qt
  • What is wrong with this emulation of CMPXCHG16B instruction?
  • How to add new index numbers to the upsampled data while preserving the orginal indices one
  • Catching exception and throwing the same?
  • integrate POCO library in android ndk
  • How to load Q library with Require.js?
  • Unable to resolve Static method?
  • Unzip archive in .Net CORE 1.0
  • Unable to install Git-core+svn by MacPorts
  • How do I exclude a dependency in provided scope when running in Maven test scope?
  • SQL merge duplicate rows and join values that are different
  • Turn off referential integrity in Derby? is it possible?
  • How to get Windows thread pool to call class member function?