<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Walid Bouladam</title>
    <description>The latest articles on DEV Community by Walid Bouladam (@devwalid).</description>
    <link>https://dev.to/devwalid</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F898970%2F51db0a8d-657d-4a7a-8507-82cda650adbf.jpeg</url>
      <title>DEV Community: Walid Bouladam</title>
      <link>https://dev.to/devwalid</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/devwalid"/>
    <language>en</language>
    <item>
      <title>Unit Tests: Why is it important?</title>
      <dc:creator>Walid Bouladam</dc:creator>
      <pubDate>Thu, 19 Jan 2023 08:18:20 +0000</pubDate>
      <link>https://dev.to/devwalid/unit-tests-why-is-it-important-3hkd</link>
      <guid>https://dev.to/devwalid/unit-tests-why-is-it-important-3hkd</guid>
      <description>&lt;p&gt;Unit testing is a software development practice in which individual units or components of a software application are tested in isolation from the rest of the application. The goal of unit testing is to validate that each unit of the software application is working as intended. In this article, we will discuss why unit testing is important and how it can benefit your software development process.&lt;/p&gt;

&lt;p&gt;One of the main benefits of unit testing is that it helps to catch bugs early in the development process. When a unit test fails, it is an indication that there is a problem with the unit of code being tested. By catching bugs early, unit testing can save time and resources that would have been spent on debugging and fixing problems later in the development process. Additionally, unit testing can help to prevent the introduction of new bugs by providing a safety net for code changes.&lt;/p&gt;

&lt;p&gt;Another benefit of unit testing is that it helps to ensure code quality. Unit tests serve as a form of documentation for the code, as they specify how the code should behave. Additionally, by writing unit tests, developers are forced to think about the design of their code and how it can be tested. This can lead to better code design and maintainability.&lt;/p&gt;

&lt;p&gt;Unit testing also helps to increase code reuse. When a unit of code is thoroughly tested, it is more likely to be reused in other parts of the application. Additionally, unit tests can serve as a form of regression testing, ensuring that code changes do not break existing functionality.&lt;/p&gt;

&lt;p&gt;Unit testing also enables developers to work on a codebase with more confidence. With a comprehensive suite of unit tests, developers can make changes to the codebase without worrying about introducing bugs. This can lead to faster development and more efficient use of resources.&lt;/p&gt;

&lt;p&gt;In addition, unit tests can also help to improve code collaboration. When multiple developers are working on a codebase, unit tests can serve as a form of communication, making it clear how the code should behave and how it can be tested. This can help to reduce misunderstandings and prevent bugs from being introduced.&lt;/p&gt;

&lt;p&gt;Finally, unit testing is a key part of continuous integration and delivery (CI/CD) pipeline. Unit tests are run automatically as part of the build process, ensuring that the code is working as intended before it is deployed to production. This can help to reduce the risk of introducing bugs into production and improve the overall quality of the software.&lt;/p&gt;

&lt;p&gt;In conclusion, unit testing is a crucial practice in software development. It helps to catch bugs early, ensures code quality, increases code reuse, enables developers to work with more confidence, improves code collaboration and it is a key part of CI/CD pipeline. By incorporating unit testing into your software development process, you can improve the quality of your software and save time and resources in the long run.&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>voltagent</category>
      <category>github</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>SOLID Principles for Programming and Software Design</title>
      <dc:creator>Walid Bouladam</dc:creator>
      <pubDate>Thu, 15 Dec 2022 07:23:28 +0000</pubDate>
      <link>https://dev.to/devwalid/solid-principles-for-programming-and-software-design-24cl</link>
      <guid>https://dev.to/devwalid/solid-principles-for-programming-and-software-design-24cl</guid>
      <description>&lt;p&gt;Hey y'all!&lt;/p&gt;

&lt;p&gt;This article will go over the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What are the SOLID principles?&lt;/li&gt;
&lt;li&gt;Why are they used in Object-Oriented programming?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I will also provide examples of how we can implement the SOLID principles when programming, using PHP, which is the language I am currently using as I learn about Object-Oriented programming.&lt;/p&gt;

&lt;h1&gt;
  
  
  What are the SOLID principles?
&lt;/h1&gt;

&lt;p&gt;The SOLID principles are a set of five principles of object-oriented software design intended to make software designs more understandable, flexible, and maintainable. The principles are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Single Responsibility Principle: A class should have one and only one reason to change, meaning it should only have one job or responsibility.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Open/Closed Principle: A class should be open for extension, but closed for modification. This means that new functionality should be added by extending the class, rather than modifying its existing code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Liskov Substitution Principle: Derived classes should be substitutable for their base classes. This means that any instance of a base class should be able to be replaced with an instance of a derived class without breaking the application.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Interface Segregation Principle: Clients should not be forced to implement interfaces they don't use. This means that you should split large interfaces into smaller, more specific ones so that clients only have to implement the methods that they need.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Dependency Inversion Principle: High-level modules should not depend on low-level modules. Both should depend on abstractions. This means that you should use abstractions, such as interfaces, to decouple your code and make it more flexible.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Why are they used in Object-Oriented programming?
&lt;/h1&gt;

&lt;p&gt;The SOLID principles are important in Object-Oriented programming because they help to create software designs that are more understandable, flexible, and maintainable. &lt;/p&gt;

&lt;p&gt;The Single Responsibility Principle, for example, helps to ensure that a class has a well-defined purpose and is not trying to do too many things at once. This makes the code easier to understand and reduces the likelihood of introducing bugs when making changes. &lt;/p&gt;

&lt;p&gt;The Open/Closed Principle, on the other hand, promotes code reuse and extensibility by allowing new functionality to be added through inheritance rather than modifying existing code. This makes the code more flexible and easier to maintain. &lt;/p&gt;

&lt;p&gt;Overall, following the SOLID principles can help to create more robust and scalable software designs.&lt;/p&gt;

&lt;h1&gt;
  
  
  Examples
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Single Responsibility Principle
&lt;/h2&gt;

&lt;p&gt;Here is an example of the Single Responsibility Principle being implemented in PHP:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// A class that handles user authentication
class UserAuth
{
    public function login($username, $password)
    {
        // Check the user's credentials and log them in
    }

    public function logout()
    {
        // Log the user out of the system
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this example, the &lt;code&gt;UserAuth&lt;/code&gt; class has a single responsibility, which is to handle user authentication. It has two methods, &lt;code&gt;login()&lt;/code&gt; and &lt;code&gt;logout()&lt;/code&gt;, which allow users to log in and out of the system. This class does not try to do anything else, such as managing user profiles or sending emails, and is therefore following the Single Responsibility Principle. This makes the code easier to understand and maintain.&lt;/p&gt;

&lt;h2&gt;
  
  
  Open/Closed Principle
&lt;/h2&gt;

&lt;p&gt;Here is an example of the Open/Closed Principle being implemented in PHP:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// A base class for a bank account
abstract class BankAccount
{
    protected $balance;

    public function __construct($balance)
    {
        $this-&amp;gt;balance = $balance;
    }

    public function getBalance()
    {
        return $this-&amp;gt;balance;
    }

    abstract public function deposit($amount);
    abstract public function withdraw($amount);
}

// A class that extends the BankAccount class to add support for interest
class SavingsAccount extends BankAccount
{
    private $interestRate;

    public function __construct($balance, $interestRate)
    {
        parent::__construct($balance);
        $this-&amp;gt;interestRate = $interestRate;
    }

    public function deposit($amount)
    {
        // Calculate the interest earned and add it to the balance
    }

    public function withdraw($amount)
    {
        // Withdraw the given amount from the balance
    }
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this example, the &lt;code&gt;BankAccount&lt;/code&gt; class is defined as an abstract base class, which means that it cannot be instantiated on its own. It defines two abstract methods, &lt;code&gt;deposit()&lt;/code&gt; and &lt;code&gt;withdraw()&lt;/code&gt;, which must be implemented by any derived classes. This allows the &lt;code&gt;BankAccount&lt;/code&gt; class to be extended to support different types of accounts, such as savings accounts, without modifying its existing code. For example, the &lt;code&gt;SavingsAccount&lt;/code&gt; class extends &lt;code&gt;BankAccount&lt;/code&gt; and adds support for interest. This follows the Open/Closed Principle by allowing new functionality to be added through inheritance, rather than modifying the base class. This makes the code more flexible and easier to maintain.&lt;/p&gt;

&lt;h2&gt;
  
  
  Liskov Substitution Principle
&lt;/h2&gt;

&lt;p&gt;Here is an example of the Liskov Substitution Principle being implemented in PHP:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// A base class for a rectangle
class Rectangle
{
    protected $width;
    protected $height;

    public function __construct($width, $height)
    {
        $this-&amp;gt;width = $width;
        $this-&amp;gt;height = $height;
    }

    public function getArea()
    {
        return $this-&amp;gt;width * $this-&amp;gt;height;
    }
}

// A class that extends the Rectangle class to represent a square
class Square extends Rectangle
{
    public function __construct($side)
    {
        parent::__construct($side, $side);
    }
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this example, the &lt;code&gt;Rectangle&lt;/code&gt; class defines a base class for a rectangle with a width and a height. It also has a &lt;code&gt;getArea()&lt;/code&gt; method that calculates the area of the rectangle. The &lt;code&gt;Square&lt;/code&gt; class extends &lt;code&gt;Rectangle&lt;/code&gt; and represents a square, which is a special type of rectangle with equal sides. However, instead of defining its own width and height properties, it sets the width and height of the &lt;code&gt;Rectangle&lt;/code&gt; class to the same value, which is the side length of the square. This allows any instance of the &lt;code&gt;Square&lt;/code&gt; class to be used in place of an instance of the Rectangle class without breaking the application. This follows the Liskov Substitution Principle by ensuring that derived classes are substitutable for their base classes. This makes the code more flexible and easier to maintain.&lt;/p&gt;

&lt;h2&gt;
  
  
  Interface Segregation Principle
&lt;/h2&gt;

&lt;p&gt;Here is an example of the Interface Segregation Principle being implemented in PHP:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// An interface that defines methods for a database connection
interface DatabaseConnection
{
    public function connect();
    public function query($sql);
    public function disconnect();
}

// An interface that defines methods for a MySQL database connection
interface MySQLConnection extends DatabaseConnection
{
    public function getMySQLVersion();
}

// A class that implements the MySQLConnection interface
class MySQL implements MySQLConnection
{
    public function connect()
    {
        // Connect to a MySQL database
    }

    public function query($sql)
    {
        // Execute a query on the MySQL database
    }

    public function disconnect()
    {
        // Disconnect from the MySQL database
    }

    public function getMySQLVersion()
    {
        // Return the version of the MySQL server
    }
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this example, the &lt;code&gt;DatabaseConnection&lt;/code&gt; interface defines three methods that must be implemented by any class that implements the interface: &lt;code&gt;connect()&lt;/code&gt;, &lt;code&gt;query()&lt;/code&gt;, and &lt;code&gt;disconnect()&lt;/code&gt;. These methods are common to any type of database connection. However, the &lt;code&gt;MySQLConnection&lt;/code&gt; interface extends &lt;code&gt;DatabaseConnection&lt;/code&gt; and adds a fourth method, &lt;code&gt;getMySQLVersion()&lt;/code&gt;, which is specific to MySQL connections. This allows the &lt;code&gt;MySQLConnection&lt;/code&gt; interface to be implemented by classes that need to connect to MySQL databases, without forcing them to implement the methods from the `DatabaseConnection interface that they don't need. This follows the Interface Segregation Principle by splitting a large interface into smaller, more specific ones. This makes the code more flexible and easier to maintain.&lt;/p&gt;

&lt;h2&gt;
  
  
  Dependency Inversion Principle
&lt;/h2&gt;

&lt;p&gt;Here is an example of the Dependency Inversion Principle being implemented in PHP:&lt;/p&gt;

&lt;p&gt;// An interface that defines methods for a logger&lt;br&gt;
interface Logger&lt;br&gt;
{&lt;br&gt;
    public function log($message);&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;// A class that implements the Logger interface&lt;br&gt;
class FileLogger implements Logger&lt;br&gt;
{&lt;br&gt;
    public function log($message)&lt;br&gt;
    {&lt;br&gt;
        // Log the given message to a file&lt;br&gt;
    }&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;// A class that uses the FileLogger class to log messages&lt;br&gt;
class User&lt;br&gt;
{&lt;br&gt;
    private $logger;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public function __construct(Logger $logger)
{
    $this-&amp;gt;logger = $logger;
}

public function login()
{
    // Log a message when the user logs in
    $this-&amp;gt;logger-&amp;gt;log('User logged in.');
}

public function logout()
{
    // Log a message when the user logs out
    $this-&amp;gt;logger-&amp;gt;log('User logged out.');
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;}&lt;/p&gt;

&lt;p&gt;In this example, the &lt;code&gt;User&lt;/code&gt; class depends on the &lt;code&gt;Logger&lt;/code&gt; interface to log messages. It does not depend on a specific implementation of the &lt;code&gt;Logger&lt;/code&gt; interface, such as the &lt;code&gt;FileLogger&lt;/code&gt; class. This means that the &lt;code&gt;User&lt;/code&gt; class is not tied to a specific logging mechanism and can be used with any class that implements the &lt;code&gt;Logger&lt;/code&gt; interface. For example, you could create a &lt;code&gt;DatabaseLogger&lt;/code&gt; class that implements the &lt;code&gt;Logger&lt;/code&gt; interface and logs messages to a database, and use it with the User class without modifying its code. This follows the Dependency Inversion Principle by depending on abstractions, rather than concretions. This makes the code more flexible and easier to maintain.&lt;/p&gt;

&lt;h1&gt;
  
  
  Summary
&lt;/h1&gt;

&lt;p&gt;The SOLID principles are a set of principles of object-oriented software design that are intended to make software designs more understandable, flexible, and maintainable. The principles focus on the separation of concerns, the use of abstraction, and the dependency of high-level modules on abstractions rather than concretions. By following these principles, developers can create software designs that are more robust, scalable, and easier to maintain.&lt;/p&gt;

</description>
      <category>docker</category>
      <category>kubernetes</category>
      <category>spanish</category>
    </item>
    <item>
      <title>Database Normalisation</title>
      <dc:creator>Walid Bouladam</dc:creator>
      <pubDate>Thu, 08 Dec 2022 07:21:08 +0000</pubDate>
      <link>https://dev.to/devwalid/database-normalisation-ka1</link>
      <guid>https://dev.to/devwalid/database-normalisation-ka1</guid>
      <description>&lt;p&gt;Hey y'all! &lt;/p&gt;

&lt;p&gt;In this blog, I will explain the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;What database normalisation is?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Why database normalisation is important?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;How can we normalise a data model?&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  What database normalisation is?
&lt;/h1&gt;

&lt;p&gt;Database normalisation is the process of organizing a database in a way that reduces redundancy and dependency. It is a fundamental concept in database design, as it helps to ensure data integrity and improve the performance of the database.&lt;/p&gt;

&lt;h1&gt;
  
  
  Why database normalisation is important?
&lt;/h1&gt;

&lt;p&gt;Database normalisation is important because it helps to eliminate data redundancy, which can lead to a number of problems. For example, redundant data can cause data inconsistencies, in which different parts of the database contain conflicting information. This can make it difficult to trust the accuracy of the data, and can lead to errors in applications that rely on the database.&lt;/p&gt;

&lt;p&gt;Redundant data can also take up a lot of unnecessary space, which can slow down the performance of the database. By eliminating redundancy, database normalisation can help to improve the performance of the database, and make it more efficient.&lt;/p&gt;

&lt;h1&gt;
  
  
  How can we normalise a data model?
&lt;/h1&gt;

&lt;p&gt;To normalize a data model, we start by identifying the entities in the model, and the relationships between them. Then, we apply a series of normal forms, which are a set of rules for organizing the data in the database. The most common normal forms are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;First Normal Form (1NF):&lt;br&gt;
The first normal form requires that all data in the database be stored in a simple, flat table, with no repeating groups of data. Each column in the table must have a unique name, and each row must be uniquely identified by a primary key.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Second Normal Form (2NF):&lt;br&gt;
The second normal form builds on the first normal form by requiring that all non-key columns in the table be dependent on the primary key. This means that the data in these columns must be related to the primary key, and cannot be dependent on any other non-key columns in the table.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Third Normal Form (3NF):&lt;br&gt;
The third normal form builds on the second normal form by requiring that all non-key columns in the table be independent of each other. This means that the data in these columns must not be dependent on any other non-key columns in the table, and can only be dependent on the primary key.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Example
&lt;/h1&gt;

&lt;p&gt;Suppose we have a table that stores data about books, with the following columns:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;BookId&lt;/code&gt;: a unique identifier of each book&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Title&lt;/code&gt;: the title of the book&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Author&lt;/code&gt;: the author of the book&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Publisher&lt;/code&gt;: the publisher of the book&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Genre&lt;/code&gt;: the genre of the book&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here's what the table might look like in first normal form (1NF):&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;BookId&lt;/th&gt;
&lt;th&gt;Title&lt;/th&gt;
&lt;th&gt;Author&lt;/th&gt;
&lt;th&gt;Publisher&lt;/th&gt;
&lt;th&gt;Genre&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;The Cat in the Hat&lt;/td&gt;
&lt;td&gt;Dr. Seuss&lt;/td&gt;
&lt;td&gt;Random House&lt;/td&gt;
&lt;td&gt;Children's&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;1984&lt;/td&gt;
&lt;td&gt;Geroge Orwell&lt;/td&gt;
&lt;td&gt;Penguin&lt;/td&gt;
&lt;td&gt;Dystopian&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;The Great Gatsby&lt;/td&gt;
&lt;td&gt;F. Scott Fitzgerald&lt;/td&gt;
&lt;td&gt;Scribner&lt;/td&gt;
&lt;td&gt;Literary&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;In this table, the &lt;code&gt;BookId&lt;/code&gt; column serves as the primary key, and each book has a unique identifier. This table is in first normal form because it satisfies the basic requirements for 1NF, which are:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The data is stored in a table&lt;/li&gt;
&lt;li&gt;The table has a unique primary key&lt;/li&gt;
&lt;li&gt;Each row in the table is unique and identifiable&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Now, let's move on to second normal form (2NF). In order to be in 2NF, a table must satisfy the requirements for 1NF, plus the following additional requirement:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;All data in the table must be fully dependent on the primary key&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In order to make our table meet this requirement, we need to remove any data that is not directly related to the primary key. For example, the &lt;code&gt;Publisher&lt;/code&gt; and &lt;code&gt;Genre&lt;/code&gt; columns are not directly related to the &lt;code&gt;BookId&lt;/code&gt; column, so we should move that data to a seperate table. Here's what the table might look like in 2NF:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;BookId&lt;/th&gt;
&lt;th&gt;Title&lt;/th&gt;
&lt;th&gt;Author&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;The Cat in the Hat&lt;/td&gt;
&lt;td&gt;Dr. Seuss&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;1984&lt;/td&gt;
&lt;td&gt;Geroge Orwell&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;The Great Gatsby&lt;/td&gt;
&lt;td&gt;F. Scott Fitzgerald&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Now, let's move on to third normal form (3NF). In order to be in 3NF, a table must satisfy the requirements for 2nF, plus the following additional requirement:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;No data in the table should be dependent on any other data in the tale, except through the primary key&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In our example, the &lt;code&gt;Publisher&lt;/code&gt; and &lt;code&gt;Genre&lt;/code&gt; data is dependent on the &lt;code&gt;BookId&lt;/code&gt;, but not on any other data in the table. So, we can move that data to a seperate table, like this:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;BookId&lt;/th&gt;
&lt;th&gt;Title&lt;/th&gt;
&lt;th&gt;Author&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;The Cat in the Hat&lt;/td&gt;
&lt;td&gt;Dr. Seuss&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;1984&lt;/td&gt;
&lt;td&gt;Geroge Orwell&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;The Great Gatsby&lt;/td&gt;
&lt;td&gt;F. Scott Fitzgerald&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;BookId&lt;/th&gt;
&lt;th&gt;Publisher&lt;/th&gt;
&lt;th&gt;Genre&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Random House&lt;/td&gt;
&lt;td&gt;Children's&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;Penguin&lt;/td&gt;
&lt;td&gt;Dystopian&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;Scribner&lt;/td&gt;
&lt;td&gt;Literary&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Now, our table is in third normal form because it satisfies the requirements for 1NF, 2NF and 3NF. This means that our data is organized in a logical and efficient way, and we can easily access and manipulate it as needed.&lt;/p&gt;

&lt;p&gt;In summary, database normalisation is a crucial concept in database design, as it helps to ensure data integrity and improve the performance of the database. By applying the normal forms, we can organize the data in a way that eliminates redundancy, and makes the database more efficient and reliable.&lt;/p&gt;

</description>
      <category>database</category>
      <category>beginners</category>
      <category>sql</category>
    </item>
    <item>
      <title>Simple guide to start you off on your programming journey</title>
      <dc:creator>Walid Bouladam</dc:creator>
      <pubDate>Sat, 27 Aug 2022 06:50:04 +0000</pubDate>
      <link>https://dev.to/devwalid/simple-guide-to-start-you-off-on-your-programming-journey-2f1</link>
      <guid>https://dev.to/devwalid/simple-guide-to-start-you-off-on-your-programming-journey-2f1</guid>
      <description>&lt;p&gt;Are you interested in learning how to code but not sure where to begin? Coding can be intimidating for beginners. It often feels like a skill that is reserved for tech-savvy people who understand complex logic and can read monstrous manuals like they’re second nature. Luckily, that’s not the case! Anyone can learn how to code, even if you have no previous experience with programming. Once you learn the basics of coding, it opens up a world of possibilities for your future career or personal endeavours. Let’s take a look at why you should learn how to code and some great resources if you’re ready to get started!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why should you learn how to code?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You can create new websites and apps without hiring developers. You can automate repetitive tasks at work. You can understand how the internet works. These are just a few of the many reasons why you should learn how to code. As more and more of our lives are lived online, it is more important than ever to understand how everything works. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What does coding feel like?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When you are first learning how to code, it can feel a bit like learning a new language. You will likely feel overwhelmed by all of the new terminology, techniques, and concepts. As you begin to understand the basics, though, you’ll notice that you are actually capable of doing a lot more than you ever thought possible! Programming is a creative process. Even experienced coders often find that they need to experiment before they can find a suitable solution. Once you start to get the hang of it, you will find that you can create almost anything you set your mind to. You don’t need to understand how everything works right away. Learning how to code can be overwhelming. That’s why it is important to focus on the basics and build your knowledge from there.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Free resources for beginner programmers&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.codecademy.com/"&gt;Codecademy&lt;/a&gt;&lt;/strong&gt;&lt;br&gt;
Codecademy is easily the best free resource for beginners. The website features interactive lessons that walk you through everything you need to know to get started with web development. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://freecodecamp.org"&gt;Free Code Camp&lt;/a&gt;&lt;/strong&gt;&lt;br&gt;
Free Code Camp features a very helpful beginner curriculum. Once you finish a section, you can unlock a “badge” that verifies your knowledge. Free Code Camp also has a “real-world” section, which challenges you to create real-life projects. These projects can often be turned into your first freelance projects, which can be a great way to start making money as a coder. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://hackerrank.com"&gt;Hacker Rank&lt;/a&gt;&lt;/strong&gt; &lt;br&gt;
Hacker Rank is a platform where you can practice programming challenges. You can also find challenges that employers are looking for on this platform. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bottom line&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Learning how to code is a great skill to have, especially in an age when so much of our lives are lived online. It can open up a lot of opportunities for your future and can even be a source of income if you decide to become a freelance coder. Beginners should focus on the basics but can learn a lot from those free resources. Once you get the hang of it, coding can be a very rewarding skill.&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>webdev</category>
      <category>programming</category>
      <category>codenewbie</category>
    </item>
  </channel>
</rss>
