<?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: Flavio Francisco</title>
    <description>The latest articles on DEV Community by Flavio Francisco (@flaviofrancisco).</description>
    <link>https://dev.to/flaviofrancisco</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F800815%2F2035c7bb-2192-41db-8a94-367faae1bdb3.jpeg</url>
      <title>DEV Community: Flavio Francisco</title>
      <link>https://dev.to/flaviofrancisco</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/flaviofrancisco"/>
    <language>en</language>
    <item>
      <title>Let's be FAIR with Open Science</title>
      <dc:creator>Flavio Francisco</dc:creator>
      <pubDate>Sun, 25 Oct 2026 09:03:09 +0000</pubDate>
      <link>https://dev.to/flaviofrancisco/lets-be-fair-with-open-science-1p37</link>
      <guid>https://dev.to/flaviofrancisco/lets-be-fair-with-open-science-1p37</guid>
      <description>&lt;p&gt;Before starting this article, I need to make a disclaimer: &lt;em&gt;I am not speaking on behalf of my employer, and what I am writing here represents only my personal opinions.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;In this article, I assume that you already know what the FAIR principles mean and that you work with, or at least have some experience with, Research Data Management (RDM), for example, as a research software developer, PhD student, postdoc, master's student, data steward, or researcher.&lt;/p&gt;

&lt;p&gt;As a software developer who has worked with Research Data Management (RDM) for almost 9 years, I have learned some lessons, especially while developing solutions for it.&lt;/p&gt;

&lt;p&gt;My idea here is to present a simple solution architecture to help make research data FAIR, discussing the pros and cons of this solution with supporting arguments. It's important to understand that &lt;strong&gt;FAIR is a set of guiding principles and best practices, not a specific framework, architecture, or technology&lt;/strong&gt;. These principles provide guidance for making research data Findable, Accessible, Interoperable, and Reusable, without prescribing how they should be implemented.&lt;/p&gt;

&lt;p&gt;Every architectural decision has trade-offs, and this is far from being the best or only solution, but it is an approach that I think could help improve FAIR practices and Research Data Management.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Complaints
&lt;/h2&gt;

&lt;p&gt;One of the main complaints I've heard from researchers and students about making their data FAIR is that it adds more work to their already busy schedules, and they don't have enough time to do it.&lt;/p&gt;

&lt;p&gt;But the good news is that part of the responsibility for implementing the FAIR principles lies with the university or research institute you are affiliated with. However, you, as a researcher or student, still need to do your part, as you can see in the picture below:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpdyk0kyhgl6qmtvooqay.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpdyk0kyhgl6qmtvooqay.png" alt=" " width="800" height="1131"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The favorable scenario
&lt;/h2&gt;

&lt;p&gt;FAIR best practices should also be part of an institution's research culture, with IT providing the tools and infrastructure needed to support their implementation.&lt;/p&gt;

&lt;h2&gt;
  
  
  What tools would I propose?
&lt;/h2&gt;

&lt;p&gt;Now comes the fun part, at least for me as a software developer. And sorry, it involves AI.&lt;/p&gt;

&lt;p&gt;I know you may be skeptical about using AI with your data, particularly when dealing with confidential, sensitive, unpublished, or personally identifiable information, but I'll explain how I think it should be used.&lt;/p&gt;

&lt;p&gt;The proposed workflow is simple:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;During your research, prepare your data and its metadata, using open formats as much as possible, such as CSV files, or widely supported formats like JPEG. If proprietary software was used, mention its name and version to help others understand how the data was created or processed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Important files for your dataset include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;README.txt:&lt;/strong&gt; A file explaining the dataset, its contents, how it was created, and how to use it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LICENSE.txt:&lt;/strong&gt; A file describing the license under which the dataset can be used and shared, including any applicable restrictions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;metadata.csv:&lt;/strong&gt; A data dictionary explaining the meaning of the variables, vocabulary, data types, and units used. Keep in mind that a data dictionary is only part of the dataset's metadata. Other information, such as authors, dates, identifiers, and related publications, may also be needed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;provenance.txt:&lt;/strong&gt; The origin story of your data: who, what, where, when, and how. It should describe where the data came from, how it was collected, and any transformations or processing steps applied to it.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These files are practical recommendations, not strict FAIR requirements. The FAIR principles don't prescribe specific filenames or formats. However, providing clear documentation, provenance, and licensing information helps others understand and reuse your research data.&lt;/p&gt;

&lt;p&gt;Keep in mind that having these files doesn't automatically make a dataset FAIR. Other aspects, such as persistent identifiers, machine-readable metadata, findability, accessibility, and appropriate repository infrastructure, are also important.&lt;/p&gt;

&lt;p&gt;Now the diagram with how everything will be connected and the descriptions of this workflow below the image:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fn7ti4bsl9iyfeo3xq0q1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fn7ti4bsl9iyfeo3xq0q1.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The proposed workflow is simple:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Prepare and upload the dataset:&lt;/strong&gt; The researcher or student places their dataset files (&lt;code&gt;README.txt&lt;/code&gt;, &lt;code&gt;LICENSE.txt&lt;/code&gt;, &lt;code&gt;metadata.csv&lt;/code&gt;, &lt;code&gt;provenance.txt&lt;/code&gt;) and a &lt;code&gt;/data&lt;/code&gt; folder containing data files from instruments, sensors, etc., into a predefined folder structure. Each file or folder can also have its own metadata, if applicable.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Harvest and organize the data:&lt;/strong&gt; The application automatically harvests the data and metadata files. Based on the provided metadata, it creates the corresponding entries, assigns unique identifiers, and archives the data files, linking each file to its metadata. Ideally, the application should also support persistent identifiers, such as DOIs, when applicable.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Find and discover data:&lt;/strong&gt; Researchers and other users can now search for and discover datasets and files based on the metadata provided.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Manage access and metadata:&lt;/strong&gt; The tool should also allow users to define who can access or download the data, whether the data is open, restricted, or subject to an embargo period. Users should also be able to edit, create, or delete metadata (using soft deletion where appropriate) and upload files through an interface. Access to restricted data should be controlled according to institutional policies and user permissions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Link data to research projects:&lt;/strong&gt; The application should be able to link harvested data or manually entered data and metadata to specific research projects, allowing researchers to organize and manage their datasets within the context of their research.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Automate as much as possible:&lt;/strong&gt; For example, data generated by lab instruments or sensors could be automatically harvested and linked to existing metadata previously entered into the system by researchers and students. &lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  What if AI is enabled?
&lt;/h3&gt;

&lt;p&gt;AI should be optional, allowing users or institutions to enable or disable it.&lt;/p&gt;

&lt;p&gt;An AI agent could read the data and metadata, suggest metadata fields, identify relevant ontologies and controlled vocabularies, and propose relationships between datasets, files, and metadata. The user should be able to review, approve, modify, or reject the schema proposed by the AI agent before it is applied.&lt;/p&gt;

&lt;p&gt;The AI could also help assess how FAIR a dataset is by evaluating its metadata and other available information against established FAIR assessment criteria. The tool could present an indicative FAIR score or percentage based on a clearly defined assessment method, showing what is already good, what needs improvement, and recommendations based on the FAIR principles.&lt;/p&gt;

&lt;p&gt;However, the score should be treated as guidance, not as an absolute measure of FAIRness, since some aspects cannot be reliably assessed automatically.&lt;/p&gt;

&lt;p&gt;Ideally, the research institute or university would provide a locally hosted AI model so that research data and metadata could remain within the institution's controlled infrastructure, with appropriate security measures, access controls, and safeguards. This would be especially important for confidential, sensitive, or unpublished research data.&lt;/p&gt;

&lt;h3&gt;
  
  
  Metadata standards
&lt;/h3&gt;

&lt;p&gt;The application should support established metadata standards, such as Dublin Core, with a minimum set of required fields defined by the institution or research community. These could include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Title:&lt;/strong&gt; The title of the dataset or file.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Description or Abstract:&lt;/strong&gt; A description of the data and its purpose.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Creators:&lt;/strong&gt; The people or organizations responsible for creating the data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Date of Collection:&lt;/strong&gt; When the data was collected.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Geographic Coverage:&lt;/strong&gt; The geographic area covered by the data, such as a bounding box, when applicable.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keywords:&lt;/strong&gt; Terms describing the dataset, preferably using controlled vocabularies.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Identifier:&lt;/strong&gt; A unique identifier for the dataset or file.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;License and Access Rights:&lt;/strong&gt; Information about how the data can be accessed and reused.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Users should also be able to select other metadata standards, such as Darwin Core for biodiversity data, depending on their research domain and requirements.&lt;/p&gt;

&lt;h3&gt;
  
  
  Final considerations
&lt;/h3&gt;

&lt;p&gt;This is a very high-level overview of how an IT solution could serve as a tool to help researchers make their data FAIR.&lt;/p&gt;

&lt;p&gt;Technical details such as data storage, archiving, backup strategies, security implementation, and infrastructure design are outside the scope of this article.&lt;/p&gt;

&lt;p&gt;The goal is not to propose the perfect architecture, but to show how a relatively simple workflow, supported by institutional IT infrastructure and optionally AI, could reduce the manual work required from researchers while improving the findability, accessibility, interoperability, and reusability of their research data.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Are the Pros and Cons?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The pros:&lt;/strong&gt; The main advantage of this process is having a practical and standardized way to collect research data and help make it FAIR, with minimal additional work for researchers and students. We only ask them to prepare their data and metadata and upload their files into a predefined folder structure on the platform or through a user interface, such as a web browser or an installed application.&lt;/p&gt;

&lt;p&gt;This approach could reduce repetitive tasks, especially metadata entry and dataset registration, while allowing researchers to focus more on their research. However, researchers would still need to provide meaningful documentation and verify that their data and metadata are accurate.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The cons:&lt;/strong&gt; We may lose some granularity in the metadata and predefined relationships between entities. A simplified metadata model might not capture all the details required by specific research communities. However, nothing prevents us from adding more detailed metadata and defining these relationships based on the specific needs of each research project.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;I have seen several applications with very cool features, but from my experience, I've noticed that many researchers and students want to make their data FAIR. However, we, as IT professionals, should provide them with feasible and practical solutions rather than tools that create more work for them.&lt;/p&gt;

&lt;p&gt;Of course, not all researchers have the same understanding of FAIR principles or access to the same resources, which is why institutions should provide the necessary support, infrastructure, and guidance.&lt;/p&gt;

&lt;p&gt;The goal should be to make FAIR practices a natural part of the research workflow, not an additional burden.&lt;/p&gt;

&lt;p&gt;Also, Data governance is one of the pillars of FAIR and Open Science practices. It establishes the responsibilities, policies, and processes needed to manage research data effectively, while institutional infrastructure and tools help support their implementation.&lt;/p&gt;

&lt;p&gt;This proposed framework is just one tool to help facilitate these practices, not a replacement for proper data governance.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Sources:&lt;br&gt;
&lt;a href="https://www.gofair.foundation/fair-principles" rel="noopener noreferrer"&gt;GO FAIR - the FAIR principles explained&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>science</category>
      <category>softwaredevelopment</category>
      <category>fair</category>
    </item>
    <item>
      <title>The AI Iceberg</title>
      <dc:creator>Flavio Francisco</dc:creator>
      <pubDate>Sat, 24 Oct 2026 12:01:39 +0000</pubDate>
      <link>https://dev.to/flaviofrancisco/the-ai-iceberg-1def</link>
      <guid>https://dev.to/flaviofrancisco/the-ai-iceberg-1def</guid>
      <description>&lt;p&gt;We see a lot of news about AI everywhere, and much of it can bring anxiety and uncertainty about the future. While nobody can predict exactly how far AI will go, think back to when the internet was first created—who could have imagined it would one day replace our home phones and completely change how we watch TV?&lt;/p&gt;

&lt;p&gt;But what is just hype, and what should we actually take seriously? That is exactly what I will explore in this article.&lt;/p&gt;

&lt;p&gt;First, let's look at the "AI iceberg" represented in the picture below, where I will try to break down each layer in a friendly, easy-to-understand way.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxrddjcm6v1ppbfmz5jyb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxrddjcm6v1ppbfmz5jyb.png" alt=" " width="800" height="1131"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;On the surface, it represents all the most well-known, user-friendly tools available on the market to use the power of LLMs (&lt;em&gt;Large Language Models&lt;/em&gt;), Agents, and image generation through prompts— but wait: What are prompts?&lt;/p&gt;

&lt;p&gt;Prompts are instructions that you can give to the AI to do a task, create an Agent (I will explain later what it is), create a skill, generate an image, summarize a text, or just correct spelling and grammar errors.&lt;/p&gt;

&lt;p&gt;For example, this is the prompt that I often use when I am writing emails or other texts, like this article:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;From now on, for any text I paste here in English, French, Dutch, or Brazilian Portuguese (just for this session), please fix any grammar and spelling mistakes. Keep in mind that my native language is Brazilian Portuguese. With as few changes as possible, adapt the text so it sounds natural in those specific cultures: US/Canadian for English, Metropolitan French for French, and Netherlandic Dutch for Dutch. Keep the original meaning and wording as close to mine as possible.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;To keep this text from getting too long, I'll stop diving into this ocean of an iceberg at the Agent level.&lt;/p&gt;

&lt;h2&gt;
  
  
  AI Agents
&lt;/h2&gt;

&lt;p&gt;Let's now dive a little bit below the surface, where some of those popular Generative AI tools use AI agents to perform more complex tasks. With the following image, I will explain in a nutshell what is what, without too much technical jargon or detail.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fegwp5ed55mujm7whwfle.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fegwp5ed55mujm7whwfle.png" alt=" " width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  LLM
&lt;/h3&gt;

&lt;p&gt;Why are they called Large Language Models? The word "large" refers specifically to the sheer number of parameters inside the AI's network—typically ranging from billions to trillions—which makes them massive compared to older language models.&lt;/p&gt;

&lt;p&gt;When we talk about "parameters," think of them like the billions of connections in a human brain. They allow the AI to learn how language works, using statistics to predict the next most likely word.&lt;/p&gt;

&lt;h3&gt;
  
  
  MCP (Tools)
&lt;/h3&gt;

&lt;p&gt;Model Context Protocol (MCP) is a little technical, but to keep things simple and understandable to everyone, it provides a standardized way for AI applications to discover and interact with predefined functions (from services on the internet or locally), external tools, and data sources, making them accessible to LLMs.&lt;/p&gt;

&lt;h3&gt;
  
  
  Memory
&lt;/h3&gt;

&lt;p&gt;Memory can be classified as short-term or long-term and can use databases, files, or other storage mechanisms. Memory helps retain information that can be retrieved later by the runtime orchestration system.&lt;/p&gt;

&lt;h3&gt;
  
  
  Run Time Orchestration System
&lt;/h3&gt;

&lt;p&gt;Software that manages the execution loop, state management, tool execution, routing and handoffs, error handling, and safety limits. It could execute the following process, for example, as shown in the image below:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fv4tdxfp7byvrqposfxry.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fv4tdxfp7byvrqposfxry.png" alt=" " width="775" height="513"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What are the impacts of AI now?
&lt;/h2&gt;

&lt;p&gt;This is a very good question. We see a lot of hype and news aimed at driving engagement, which can cause anxiety for many of us, especially if we don't understand what AI is and what it's capable of.&lt;/p&gt;

&lt;p&gt;Think of AI as an iceberg. Deep at the bottom, its foundation is mathematics and statistics. Then, as we move up a level, we have machine learning, followed by deep learning, until we reach the surface with generative AI (ChatGPT, Copilot, Claude, Gemini).&lt;/p&gt;

&lt;p&gt;AI can perform tasks based on what it has learned during training. Depending on the AI system, it can do things like generate text and images, drive a car, pilot a drone, or describe images and videos.&lt;/p&gt;

&lt;p&gt;A good metaphor I heard from a colleague is: "Using AI is like giving your brain a car."&lt;/p&gt;

&lt;p&gt;However, there's an interesting nuance. A car doesn't automatically make someone a better driver, and AI doesn't automatically make someone a better thinker.&lt;/p&gt;

&lt;p&gt;AI can improve your productivity if you use it as a tool for many tasks. For example, as a software developer, today I can create new features for an application in minutes or hours, whereas before, it could take days, weeks, or even a month. But AI doesn't replace me. Quite the opposite: it takes my knowledge and expertise to determine whether the generated results are safe, maintainable, and correct before they can be used.&lt;/p&gt;

&lt;p&gt;But what could happen as AI evolves?&lt;/p&gt;

&lt;p&gt;I believe many jobs will be transformed rather than completely replaced, although the impact will vary significantly across professions.&lt;/p&gt;

&lt;p&gt;A team could become more productive with the same number of people.&lt;/p&gt;

&lt;p&gt;Some fields are already feeling the effects of AI, such as translators, voice actors, and visual artists, including illustrators. Other fields are also being affected by the use of AI-powered robots in automation processes.&lt;/p&gt;

&lt;p&gt;I cannot say what the future impact of AI will be as it continues to develop, but we can already see changes in our work environments. For some professions, the way we work today is not the same as it was three years ago.&lt;/p&gt;

&lt;p&gt;Some companies are also reducing the number of junior professionals they hire in AI-exposed occupations as AI advances.&lt;/p&gt;

&lt;p&gt;The only recommendation I can give you is to learn how to use and get the most out of AI tools like ChatGPT, Claude, Copilot, Gemini... you name it. These tools &lt;strong&gt;could&lt;/strong&gt; become as essential to our work as Excel, Word, and PowerPoint became 10 or 20 years ago.&lt;/p&gt;

&lt;p&gt;Another thing to consider is how we should use AI without harming our careers and reputations. For example, some people use AI to read documents, generate summaries, and respond to colleagues. I don't think this is always a good idea. If your colleague is asking for your opinion, are you using Copilot to help you understand the document, or are you letting Copilot form your opinion for you?&lt;/p&gt;

&lt;p&gt;AI should help us think, not do all our thinking for us.&lt;/p&gt;

&lt;p&gt;I'll leave this question open for you to think about: How are you using AI today?&lt;/p&gt;

</description>
      <category>ai</category>
      <category>beginners</category>
      <category>automation</category>
      <category>agents</category>
    </item>
    <item>
      <title>Database normalization.</title>
      <dc:creator>Flavio Francisco</dc:creator>
      <pubDate>Mon, 20 Mar 2023 12:07:35 +0000</pubDate>
      <link>https://dev.to/flaviofrancisco/wip-database-normalization-j5e</link>
      <guid>https://dev.to/flaviofrancisco/wip-database-normalization-j5e</guid>
      <description>&lt;h2&gt;
  
  
  Some facts
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;The words normalization and normal from refer to the structure of a database.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Normalization was developed by IBM researcher E.F. Codd in the 1970s.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Normalization increases clarity in organizing data in databases.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Scenario
&lt;/h2&gt;

&lt;p&gt;Let's say that you are hired to develop a new eCommerce website for some company, than your client shows you the following table:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--sXBbdod1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/h4xz8l5ltqzyzpyxfkub.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--sXBbdod1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/h4xz8l5ltqzyzpyxfkub.png" alt="a non normilized table" width="818" height="150"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As you can see the table above has duplicated data and to better organize and optmize our data to be consumed by our new application we do the data modelling called: database normalization.&lt;/p&gt;

&lt;p&gt;The 3 most used database normalization are: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;First Normal Form (1NF); &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Second Normal Form (2NF) and &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Third Normal Form (3NF). &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Also we have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Boyce-Codd Normal Form (BCNF); &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fourth Normal Form (4NF) and &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fifth Normal Form (5NF). &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I will explain only the 1NF, 2NF and the 3NF because they are the most common used. &lt;br&gt;
The other forms will be explained in different articles.&lt;/p&gt;

&lt;h3&gt;
  
  
  First Normal Form (1NF)
&lt;/h3&gt;

&lt;p&gt;To be considered a 1NF table:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Each table must have unique columns;&lt;/li&gt;
&lt;li&gt;Using row order to convey information is not permitted;&lt;/li&gt;
&lt;li&gt;Mixing data types within a primary key is not permitted;&lt;/li&gt;
&lt;li&gt;Having a table without a primary key is not permitted and&lt;/li&gt;
&lt;li&gt;Repeating groups are not permitted.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--NMcxMh8M--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/s3chzh7024n0buhxg2sg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--NMcxMh8M--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/s3chzh7024n0buhxg2sg.png" alt="a table normalized as 1NF" width="611" height="151"&gt;&lt;/a&gt;&lt;br&gt;
As you can see the 'Product Types' columns now is one column, but we can improve our data using the 2NF and that I will explain below.&lt;/p&gt;

&lt;h3&gt;
  
  
  Second Normal Form (2NF)
&lt;/h3&gt;

&lt;p&gt;To be considered normalized in the 2NF our table must be already normalized as 1NF and each field of a table that is not the primary key is determined by that primary key. &lt;br&gt;
But what is a primary key (PK)? Basically is a code the identifies a unique row in a table.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--jrZfYclr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/epq13ef2jd0to0we8lo6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--jrZfYclr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/epq13ef2jd0to0we8lo6.png" alt="a table with a new column id" width="719" height="156"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Take a look at the table above now. We have: Id, Client Name, Phone Number, Product Name, Quantity, Value and Product Type. Since the Id is the PK of the client we can apply the 2NF in the following way:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Does the phone number can be unique for a client? (for simplicity let's say: yes)&lt;/li&gt;
&lt;li&gt;Does a product can be unique for a client? (no)&lt;/li&gt;
&lt;li&gt;Does the quantity of an ordered product can be unique by a client? (no)&lt;/li&gt;
&lt;li&gt;Does the value belongs to the client? (no)&lt;/li&gt;
&lt;li&gt;Does the product type belongs to the client? (no).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Based on the answers above we can group the information in a such way that each data will be represented by an unique primary key.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;NOTE: a primary key (PK) is a unique value for each row in a table. The PK is used to identify a unique record (row) in a database. &lt;br&gt;
This value cannot be null and can be either a unique column or a set of column that represents an unique combination in a table.&lt;br&gt;
We may have also the foreign Key (FK) is a column or group of columns in a relational database that represents the data in a linked table. A foreign key is just the reference from an table in another table.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h4&gt;
  
  
  Client
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--tg6W2ELS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/i3y84eb2i1sabci4h6nd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--tg6W2ELS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/i3y84eb2i1sabci4h6nd.png" alt="client table" width="319" height="87"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Product
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--71vp2p-p--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6xtzhssqe6uy1vb16s38.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--71vp2p-p--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6xtzhssqe6uy1vb16s38.png" alt="product table" width="421" height="71"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But what does happened with the information of the orders? Now we will apply the third normal form (3NF).&lt;/p&gt;

&lt;h3&gt;
  
  
  Third Normal Form (3NF)
&lt;/h3&gt;

&lt;p&gt;Every non-key attribute in a table should depend on the key, the whole key, and nothing but the key.&lt;/p&gt;

&lt;p&gt;An entity is said to be in the third normal form when, it satisfies the criteria to be in the second normal form (2NF) and there is &lt;strong&gt;&lt;em&gt;no transitive functional dependency&lt;/em&gt;&lt;/strong&gt;. What this mean? If the table A dependent on table B and the table B is dependent in on the table C then C is transitively dependent on A and B.&lt;/p&gt;

&lt;p&gt;So we need to identify the tables were the non-primary-keys field depend on something other than the primary key.&lt;/p&gt;

&lt;p&gt;Our candidate for that is the Product table and the field: Product Type. Why? Because a product can only belong to a specific product type and product type can belong to multiple products and also the relations between clients and orders. &lt;br&gt;
We will than have the following entities to have our database in a 3NF.&lt;/p&gt;

&lt;h4&gt;
  
  
  Client
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--tg6W2ELS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/i3y84eb2i1sabci4h6nd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--tg6W2ELS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/i3y84eb2i1sabci4h6nd.png" alt="client table" width="319" height="87"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Product
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--gke7Nxad--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xfn7wq8j5y0h7xxdw28c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--gke7Nxad--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xfn7wq8j5y0h7xxdw28c.png" alt="product table" width="417" height="72"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Product Type
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--cF1wwoM6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/03rge4l6ex4vvj80jbgb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--cF1wwoM6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/03rge4l6ex4vvj80jbgb.png" alt="product type table" width="209" height="65"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Order
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--jd4mrAwB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/itnccezuuex6nuhy36oy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--jd4mrAwB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/itnccezuuex6nuhy36oy.png" alt="order table" width="618" height="150"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;NOTE: I just decided to keep this database model simple. Of course we can include more columns as: creation time; total value; price before taxes and etc, but for explanation I would like to keep it simple.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;To conclude our database model will look like the picture below:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--xvWtltKA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/w2yhuv6aozrb8rohzeut.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xvWtltKA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/w2yhuv6aozrb8rohzeut.png" alt="data model diagram" width="880" height="183"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Translating our data model we can say that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;1 client can have either 0 or many orders (0 to N);&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;1 product can be either in 0 or many orders (0 to N);&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;1 product can have 1 product type (1 to 1) and&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;1 product type can be assigned to many products (1 to N).&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Normalization of a database offers several advantages, including the elimination of redundant information and the maintenance of data consistency. By avoiding the repetition of data, you can optimize storage space and reduce the likelihood of errors. Additionally, by using a unique identifier like the product's ID (primary key) to refer to data, changes to one piece of information, such as a product name, will not affect other related data. This can help ensure the accuracy and reliability of your database over time.&lt;/p&gt;

&lt;p&gt;Well this is my first article on the internet and I hope that you enjoyed it.&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
