<?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>Forem: Davy Baraka</title>
    <description>The latest articles on Forem by Davy Baraka (@davy_baraka_c7e5f37b4e91f).</description>
    <link>https://forem.com/davy_baraka_c7e5f37b4e91f</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%2F3841261%2F5b5e3ba7-5c88-4a07-a376-ae9ef7f7653c.jpg</url>
      <title>Forem: Davy Baraka</title>
      <link>https://forem.com/davy_baraka_c7e5f37b4e91f</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/davy_baraka_c7e5f37b4e91f"/>
    <language>en</language>
    <item>
      <title>Understanding DDL and DML SQL concepts</title>
      <dc:creator>Davy Baraka</dc:creator>
      <pubDate>Wed, 15 Apr 2026 11:14:10 +0000</pubDate>
      <link>https://forem.com/davy_baraka_c7e5f37b4e91f/understanding-ddl-and-dml-sql-concepts-akm</link>
      <guid>https://forem.com/davy_baraka_c7e5f37b4e91f/understanding-ddl-and-dml-sql-concepts-akm</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;1. INTRODUCTION&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;This article will cover an introduction to SQL concepts&lt;br&gt;
SQL (Structured Query Language) is a standard language that is used to communicate with relational databases. It is used to store, retrieve, manipulate, and manage data that is organised in tables.&lt;/p&gt;

&lt;p&gt;Core concepts in SQL consist of the following:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;DDL (Data Definition Language)
Used to define database structure
Includes: create, alter, drop, truncate, rename&lt;/li&gt;
&lt;li&gt;DML (Data Manipulation Language)
Used to modify data
Includes: insert, update, delete&lt;/li&gt;
&lt;li&gt;DQL (Data Query Language)
Used to retrieve data
Includes: select, where, order by, group by, having, join&lt;/li&gt;
&lt;li&gt;DCL (Data Control Language)
Used to control access
Includes: grant, revoke&lt;/li&gt;
&lt;li&gt;TCL (Transaction Query Language)
Used to manage transactions
Includes: commit, rollback, savepoint&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;## 2. What DDL and DML are, and the difference between them&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;DDL&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;DDL commands deal with the structure of a database. They define, modify, or remove the objects that hold data — like tables, schemas, and columns. Think of DDL as the blueprint stage: you are not yet putting data in; you are deciding how that data will be organised.&lt;br&gt;
DDL commands include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CREATE is used to create new tables or databases.&lt;/li&gt;
&lt;li&gt;ALTER is used to modify existing structures.&lt;/li&gt;
&lt;li&gt;DROP is used to delete tables or databases.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;DML&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;DML commands, on the other hand, deal with the actual data inside those structures. Once your table exists, you use DML to add records, update them, or remove them.&lt;br&gt;
DML commands include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;INSERT adds new records&lt;/li&gt;
&lt;li&gt;UPDATE modifies existing records&lt;/li&gt;
&lt;li&gt;DELETE removes records&lt;/li&gt;
&lt;li&gt;SELECT retrieves data&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Key difference:&lt;br&gt;
DDL deals with  the structure of the database, while DML deals with the data inside the database.&lt;/p&gt;

&lt;h2&gt;
  
  
  **3. How you used CREATE, INSERT, UPDATE, and DELETE in your assignment
&lt;/h2&gt;

&lt;p&gt;**&lt;br&gt;
&lt;strong&gt;CREATE&lt;/strong&gt;:I used it to create tables such as students.&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.amazonaws.com%2Fuploads%2Farticles%2Fxg0csyridl0vrj4524yc.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.amazonaws.com%2Fuploads%2Farticles%2Fxg0csyridl0vrj4524yc.png" alt=" " width="481" height="200"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;INSERT&lt;/strong&gt;:I used it to insert records in the tables.&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.amazonaws.com%2Fuploads%2Farticles%2Fe1p936hr5v53670r1cd5.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.amazonaws.com%2Fuploads%2Farticles%2Fe1p936hr5v53670r1cd5.png" alt=" " width="800" height="305"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;UPDATE&lt;/strong&gt;: I used to modify existing records, such as correcting a student's score&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.amazonaws.com%2Fuploads%2Farticles%2Fcf6mv9brepv7p21o3iol.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.amazonaws.com%2Fuploads%2Farticles%2Fcf6mv9brepv7p21o3iol.png" alt=" " width="354" height="78"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;DELETE&lt;/strong&gt;: I used it to delete unwanted or incorrect records, such as deleting a student entry.&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.amazonaws.com%2Fuploads%2Farticles%2Fb0wgzahrzqolacn90mq0.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.amazonaws.com%2Fuploads%2Farticles%2Fb0wgzahrzqolacn90mq0.png" alt=" " width="268" height="64"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;3. How filtering with WHERE works (mention some operators like =, &amp;gt;, BETWEEN, IN, LIKE)&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The WHERE clause is how SQL narrows down which rows a query applies to. Whether you are reading data with SELECT, changing it with UPDATE, or removing it with DELETE, WHERE lets you be precise.&lt;/p&gt;

&lt;p&gt;SQL provides several operators you can use inside a WHERE condition:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;= (equals) — Matches an exact value. Example: WHERE score = 80 returns only students with a grade of A.&lt;/li&gt;
&lt;li&gt;&amp;gt; and &amp;lt; (greater/less than) — Compare numeric or date values. Example: WHERE score &amp;gt; 80 returns students who scored above 80.&lt;/li&gt;
&lt;li&gt;BETWEEN — Selects values within a range (inclusive on both ends). Example: WHERE score BETWEEN 50 AND 80 returns students who scored between 50 and 80.&lt;/li&gt;
&lt;li&gt;IN — Checks whether a value appears in a given list. Example: WHERE subject IN ('Math', 'Science') returns students doing either maths or science.&lt;/li&gt;
&lt;li&gt;LIKE — Enables pattern matching in text. The % symbol acts as a wildcard. Example: WHERE full_name LIKE 'A%' returns all students whose names start with the letter A.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These operators can also be combined using AND and OR to build more complex filters, making WHERE one of the most powerful tools in SQL.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;4. How CASE WHEN helps in transforming data&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;CASE WHEN is SQL's way of applying conditional logic — similar to an if/else statement in programming. It lets you create a new column in your query result based on conditions, without changing the underlying data in the table.&lt;/p&gt;

&lt;p&gt;The basic structure looks like this:&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.amazonaws.com%2Fuploads%2Farticles%2Fmf5i1ik89q0l0x5hwz3x.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.amazonaws.com%2Fuploads%2Farticles%2Fmf5i1ik89q0l0x5hwz3x.png" alt=" " width="656" height="272"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>database</category>
      <category>sql</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Understanding Data Modeling in Power BI: Joins, Relationships, and Schemas</title>
      <dc:creator>Davy Baraka</dc:creator>
      <pubDate>Sun, 29 Mar 2026 17:58:28 +0000</pubDate>
      <link>https://forem.com/davy_baraka_c7e5f37b4e91f/understanding-data-modeling-in-power-bi-joins-relationships-and-schemas-20cd</link>
      <guid>https://forem.com/davy_baraka_c7e5f37b4e91f/understanding-data-modeling-in-power-bi-joins-relationships-and-schemas-20cd</guid>
      <description>&lt;ol&gt;
&lt;li&gt;What Is Data Modeling?&lt;/li&gt;
&lt;li&gt;  Data modeling is how you organize tables in Power BI so reports are accurate and fast&lt;/li&gt;
&lt;li&gt;  A good model keeps data clean, calculations correct, and DAX formulas simple&lt;/li&gt;
&lt;li&gt;  Two places where modeling happens in Power BI:&lt;/li&gt;
&lt;li&gt;  Power Query - where you load and clean tables&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Model View - where you connect tables using relationships&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;SQL Joins&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A join combines two tables based on a shared column (called a key)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In Power BI, joins are done in Power Query under Home &amp;gt; Merge Queries&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The 6 Join Types&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  INNER JOIN - returns only rows that match in both tables&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Example: customers who have placed an order (customers with no orders are excluded)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;LEFT JOIN - returns all rows from the left table, and matched rows from the right&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Example: all customers, whether they ordered or not (blank if no order)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;RIGHT JOIN - returns all rows from the right table, and matched rows from the left&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Example: all orders, even if the customer record is missing&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;FULL OUTER JOIN - returns all rows from both tables&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Example: full data audit - show everything whether it matches or not&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;LEFT ANTI JOIN - returns left rows with no match in the right table&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Example: customers who have never placed an order&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;RIGHT ANTI JOIN - returns right rows with no match in the left table&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Example: orders with no matching customer (orphan records)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Power BI Relationships&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Relationships link tables in Model View without merging them&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Filters pass between related tables when slicers or visuals are used&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cardinality&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  One-to-Many (1:M) - most common. One row in Table A matches many rows in Table B&lt;/li&gt;
&lt;li&gt;  Example: one product appears in many sales rows&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Dimension table is always on the '1' side, fact table on the 'Many' side&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Many-to-Many (M:M) - many rows in both tables can match each other&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Example: students and courses (one student takes many courses, one course has many students)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid if possible - can cause double-counting in measures&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;One-to-One (1:1) - each row in Table A matches exactly one row in Table B&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Example: Employee table and EmployeeDetails table&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cross-Filter Direction&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Single - filters flow from the '1' side to the 'Many' side only (recommended)&lt;/li&gt;
&lt;li&gt;  Both - filters flow in both directions (use carefully, can cause errors)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Active vs Inactive Relationships&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Only one active relationship is allowed between two tables at a time&lt;/li&gt;
&lt;li&gt;  Extra relationships can be inactive and used in DAX with USERELATIONSHIP()&lt;/li&gt;
&lt;li&gt;  Example: Sales has OrderDate and ShipDate, both connected to a Date table&lt;/li&gt;
&lt;li&gt;  OrderDate is active, ShipDate is inactive and activated in a DAX measure&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;How to Create a Relationship&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Method 1: In Model View, drag a column from one table onto the matching column in another&lt;/li&gt;
&lt;li&gt;  Method 2: Home &amp;gt; Manage Relationships &amp;gt; New, then select both tables and key columns&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;Power BI Relationships&lt;/li&gt;
&lt;li&gt;  Relationships link tables in Model View without merging them&lt;/li&gt;
&lt;li&gt;  Filters pass between related tables when slicers or visuals are used&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Cardinality&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  One-to-Many (1:M) - most common. One row in Table A matches many rows in Table B&lt;/li&gt;
&lt;li&gt;  Example: one product appears in many sales rows&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Dimension table is always on the '1' side, fact table on the 'Many' side&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Many-to-Many (M:M) - many rows in both tables can match each other&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Example: students and courses (one student takes many courses, one course has many students)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid if possible - can cause double-counting in measures&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;One-to-One (1:1) - each row in Table A matches exactly one row in Table B&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Example: Employee table and EmployeeDetails table&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cross-Filter Direction&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Single - filters flow from the '1' side to the 'Many' side only (recommended)&lt;/li&gt;
&lt;li&gt;  Both - filters flow in both directions (use carefully, can cause errors)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Active vs Inactive Relationships&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Only one active relationship is allowed between two tables at a time&lt;/li&gt;
&lt;li&gt;  Extra relationships can be inactive and used in DAX with USERELATIONSHIP()&lt;/li&gt;
&lt;li&gt;  Example: Sales has OrderDate and ShipDate, both connected to a Date table&lt;/li&gt;
&lt;li&gt;  OrderDate is active, ShipDate is inactive and activated in a DAX measure&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;How to Create a Relationship&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Method 1: In Model View, drag a column from one table onto the matching column in another&lt;/li&gt;
&lt;li&gt;  Method 2: Home &amp;gt; Manage Relationships &amp;gt; New, then select both tables and key columns&lt;/li&gt;
&lt;li&gt;Fact and Dimension Tables&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Fact Table&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Stores measurable numbers: revenue, quantity, cost&lt;/li&gt;
&lt;li&gt;  Each row = one transaction or event&lt;/li&gt;
&lt;li&gt;  Usually large (millions of rows)&lt;/li&gt;
&lt;li&gt;  Always on the 'Many' side of a relationship&lt;/li&gt;
&lt;li&gt;  Example: Sales table with OrderID, Date, CustomerID, ProductID, Revenue&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Dimension Table&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Stores descriptions: product names, customer details, dates&lt;/li&gt;
&lt;li&gt;  Each row = one unique item&lt;/li&gt;
&lt;li&gt;  Usually smaller (thousands of rows)&lt;/li&gt;
&lt;li&gt;  Always on the '1' side of a relationship&lt;/li&gt;
&lt;li&gt;  Example: Products table with ProductID, Name, Category, Brand&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;Schemas&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Star Schema (Recommended)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  One fact table in the center, dimension tables connected around it&lt;/li&gt;
&lt;li&gt;  Best performance in Power BI&lt;/li&gt;
&lt;li&gt;  Simple to understand and write DAX for&lt;/li&gt;
&lt;li&gt;  Example: Sales connected to Date, Products, Customers, Location&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Snowflake Schema&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Like a star schema but dimension tables are split into sub-tables&lt;/li&gt;
&lt;li&gt;  Example: Product &amp;gt; Sub-Category &amp;gt; Category (three tables instead of one)&lt;/li&gt;
&lt;li&gt;  Slower in Power BI - flatten dimension tables where possible&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Flat Table&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Everything in one big table, no relationships needed&lt;/li&gt;
&lt;li&gt;  Easy to set up but causes data repetition and slow performance&lt;/li&gt;
&lt;li&gt;  Only suitable for very small or prototype projects&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;Role-Playing Dimensions&lt;/li&gt;
&lt;li&gt;  When one dimension table is used more than once in the same model&lt;/li&gt;
&lt;li&gt;  Common example: a Date table used for both OrderDate and ShipDate&lt;/li&gt;
&lt;li&gt;  Power BI only allows one active relationship per table pair&lt;/li&gt;
&lt;li&gt;  Solution: make one relationship active, others inactive&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use USERELATIONSHIP() in DAX to switch on an inactive relationship in a measure&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Common Modeling Issues&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;No Date table: creates problems with time intelligence functions - always create a dedicated Date table&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Wrong cardinality: duplicates on the '1' side break the relationship - key column must be unique&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Too many bidirectional filters: causes circular filter errors - use single direction by default&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Flat table in a complex model: hard to maintain and slow - break it into fact and dimension tables&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;M:M without a bridge table: leads to double-counting - use a junction table to split into two 1:M links&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Quick Summary&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Data modeling = organizing tables for accurate, fast Power BI reports&lt;/li&gt;
&lt;li&gt;  6 join types in Power Query: INNER, LEFT, RIGHT, FULL OUTER, LEFT ANTI, RIGHT ANTI&lt;/li&gt;
&lt;li&gt;  Relationships link tables in Model View - use 1:M for most cases&lt;/li&gt;
&lt;li&gt;  Joins merge tables physically; relationships filter between separate tables&lt;/li&gt;
&lt;li&gt;  Fact tables hold numbers; dimension tables hold descriptions&lt;/li&gt;
&lt;li&gt;  Star schema is the best structure for Power BI&lt;/li&gt;
&lt;li&gt;  Role-playing dimensions use USERELATIONSHIP() for inactive relationships&lt;/li&gt;
&lt;li&gt;  Avoid flat tables, wrong cardinality, and unnecessary bidirectional filters&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
    <item>
      <title>How Linux is Used in Real-World Data Engineering</title>
      <dc:creator>Davy Baraka</dc:creator>
      <pubDate>Tue, 24 Mar 2026 08:30:46 +0000</pubDate>
      <link>https://forem.com/davy_baraka_c7e5f37b4e91f/how-linux-is-used-in-real-world-data-engineering-a8j</link>
      <guid>https://forem.com/davy_baraka_c7e5f37b4e91f/how-linux-is-used-in-real-world-data-engineering-a8j</guid>
      <description>&lt;p&gt;Linux is widely used in real-world data engineering because it provides a stable, efficient, and flexible environment for handling large amounts of data. Most data systems are hosted on cloud platforms like Amazon Web Services and Google Cloud Platform, which rely heavily on Linux servers. Data engineers use these Linux systems to store, process, and manage data pipelines. Many powerful data tools such as Apache Spark for processing data and Apache Kafka for handling real-time data streams are built to run on Linux, making it the preferred environment.&lt;/p&gt;

&lt;p&gt;In addition, Linux allows engineers to automate repetitive tasks using scripts and scheduling tools, which is important for running data pipelines smoothly without constant manual input. It also supports databases like PostgreSQL, where processed data is stored and accessed. With its powerful command-line tools, Linux makes it easy to handle large files, monitor system performance, and control access to data securely. Overall, Linux acts as the foundation of modern data engineering by enabling efficient data processing, automation, and system management.&lt;/p&gt;

</description>
      <category>automation</category>
      <category>cloud</category>
      <category>dataengineering</category>
      <category>linux</category>
    </item>
  </channel>
</rss>
