<?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: Qi Chen</title>
    <description>The latest articles on DEV Community by Qi Chen (@consultantstack).</description>
    <link>https://dev.to/consultantstack</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%2F4242455%2F0d981a02-00a2-4148-8b86-4129363c02ab.png</url>
      <title>DEV Community: Qi Chen</title>
      <link>https://dev.to/consultantstack</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/consultantstack"/>
    <language>en</language>
    <item>
      <title>How to Set Up Seven Linked Notion Databases Without Watching a Tutorial</title>
      <dc:creator>Qi Chen</dc:creator>
      <pubDate>Fri, 13 Nov 2026 16:16:06 +0000</pubDate>
      <link>https://dev.to/consultantstack/how-to-set-up-seven-linked-notion-databases-without-watching-a-tutorial-3ejc</link>
      <guid>https://dev.to/consultantstack/how-to-set-up-seven-linked-notion-databases-without-watching-a-tutorial-3ejc</guid>
      <description>&lt;p&gt;The tutorial problem is not that videos are bad. It is that you cannot skim them at the moment you are stuck — and the moment you are stuck is always the same one: you imported seven databases and now nothing links to anything.&lt;/p&gt;

&lt;p&gt;This is the order that works, written so you can follow it in one pass. It assumes the databases come as CSV files — any Notion client, project and invoice kit ships that way, because CSV is the only import format that gives you ownership rather than a shareable link somebody can revoke.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the order matters
&lt;/h2&gt;

&lt;p&gt;Notion's CSV import is literal. It guesses what each column is, and it guesses badly in a predictable direction:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Dates become text.&lt;/strong&gt; They look like dates, sort like text, and break every formula that expects a date.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Numbers become text.&lt;/strong&gt; Same problem, with currency symbols making it worse.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Relations cannot be imported at all.&lt;/strong&gt; A CSV has no way to say "this row points at that row in another database."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Formulas are not imported either.&lt;/strong&gt; They reference properties that do not exist yet at import time.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So the sequence is forced: import, fix types, create relations, add formulas, build views. Do it in any other order and you will redo work.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1 — Import one database at a time
&lt;/h2&gt;

&lt;p&gt;Not seven at once. One database, checked, then the next. The checking is the part that saves the hour: open the imported table, look at the property types in the header row, and confirm each one is what you expect.&lt;/p&gt;

&lt;p&gt;Import order that avoids dead ends: &lt;strong&gt;Clients → Projects → Tasks → Proposals → Invoices → Leads → Weekly Reviews.&lt;/strong&gt; Clients first because almost every relation points at it; Projects second because tasks, proposals and invoices all point at it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2 — Fix property types before anything else
&lt;/h2&gt;

&lt;p&gt;This is the step people skip, and it is the reason their formulas show errors later. For each database, set the types explicitly:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Column kind&lt;/th&gt;
&lt;th&gt;Set the type to&lt;/th&gt;
&lt;th&gt;Watch for&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;A date&lt;/td&gt;
&lt;td&gt;Date&lt;/td&gt;
&lt;td&gt;Text dates will not sort chronologically&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Money or hours&lt;/td&gt;
&lt;td&gt;Number → currency or number format&lt;/td&gt;
&lt;td&gt;Remove symbols from the cell first&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A status or stage&lt;/td&gt;
&lt;td&gt;Select&lt;/td&gt;
&lt;td&gt;Create the options now, not later&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A link to another table&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Leave as text for now&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Relations are step 3&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The money column deserves a warning: &lt;code&gt;$4,800&lt;/code&gt; imports as text. Strip the symbol and the comma, keep the number, then set the format in Notion. Doing it the other way round produces a column that looks right and calculates nothing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3 — Create relations once all seven exist
&lt;/h2&gt;

&lt;p&gt;Now, and only now, convert the text columns into relations. A relation needs the target database to exist, which is why this cannot happen during import.&lt;/p&gt;

&lt;p&gt;The relations that make the system worth having:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Projects → Clients&lt;/strong&gt; (many projects, one client)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tasks → Projects&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Proposals → Clients&lt;/strong&gt; and &lt;strong&gt;Proposals → Projects&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Invoices → Clients&lt;/strong&gt; and &lt;strong&gt;Invoices → Projects&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Weekly Reviews → Projects&lt;/strong&gt; (optional, but it is what makes the review answer questions)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Two rules while you are here. Turn on the back-relation for each one — it is how you open a client and see their projects, proposals and invoices in one place instead of four tabs. And keep the relation single-direction where the reverse adds no information; every unnecessary relation is another property to maintain by hand.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4 — Add the formulas last
&lt;/h2&gt;

&lt;p&gt;Formulas go in after the relations, because most of them read across one. Four do the real work in this kind of kit:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Hours Over&lt;/strong&gt; — actual hours minus estimated hours. Positive means the project is paying below your rate.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Effective Rate&lt;/strong&gt; — fee divided by actual hours. The number that decides whether you take the next similar job.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Days Overdue&lt;/strong&gt; — today minus the due date, blank when the invoice is paid.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Days Silent&lt;/strong&gt; — days since the last contact, so silence becomes visible instead of felt.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Notion's formula syntax changes occasionally, and a formula copied from an older guide will fail without telling you why. If one returns an error, check the property names it references first — a renamed property is the usual cause, and the fix is a rename, not a rewrite.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 5 — Build four views, not eight
&lt;/h2&gt;

&lt;p&gt;Views are cheap to make and expensive to maintain, so start with the four that answer questions:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Pipeline by stage&lt;/strong&gt; — what is live, what is waiting, what is dead.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Money Leak&lt;/strong&gt; — projects where actual hours exceed the estimate, sorted by the gap.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Unpaid&lt;/strong&gt; — invoices not marked paid, sorted by days overdue.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;This week&lt;/strong&gt; — tasks and next actions with a date in the next seven days.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Add the rest once you have used these four for a fortnight and know what is missing. Views you do not open are not a system; they are decoration.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 6 — Put real data in, on day one
&lt;/h2&gt;

&lt;p&gt;A kit with demo rows in it teaches you nothing, because demo rows never have the awkward cases. Open your current projects and enter them: the estimated hours you quoted, the actual hours you know you have spent, the invoices that are outstanding.&lt;/p&gt;

&lt;p&gt;This takes about twenty minutes and it is the moment the system starts paying for itself. It is also the moment most people discover a project that is already in the red — usually the one they were least worried about.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 7 — Pick one review time and keep it
&lt;/h2&gt;

&lt;p&gt;The databases do not review themselves. One slot a week, twenty minutes, same morning: look at the Money Leak view, the Unpaid view, and the pipeline. Three questions: what moved, what is leaking, what am I doing about it this week.&lt;/p&gt;

&lt;p&gt;That is the whole system. The rest is maintenance.&lt;/p&gt;

&lt;h2&gt;
  
  
  The mistakes that cost the most
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Importing everything, then fixing types.&lt;/strong&gt; You will re-import at least once.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Creating relations as the databases arrive.&lt;/strong&gt; You cannot link to a table that does not exist yet.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Adding formulas before relations.&lt;/strong&gt; They will error, and you will blame the formula.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Building twenty views.&lt;/strong&gt; You will use four.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Leaving the demo data in.&lt;/strong&gt; You will mistake invented numbers for your own.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of these is a Notion problem. They are sequencing problems, and the sequence above is the whole fix.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This note describes a setup method. It claims no time savings, and the failure modes described are behaviours of Notion's CSV import, not observations of specific projects.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Full version and more notes: &lt;a href="https://consultant-stack.netlify.app/" rel="noopener noreferrer"&gt;consultant-stack.netlify.app&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>database</category>
      <category>productivity</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
