[{"data":1,"prerenderedAt":984},["ShallowReactive",2],{"blog-what-is-a-data-model":3},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":8,"description":9,"date":10,"author":11,"tags":14,"image":19,"body":20,"_type":978,"_id":979,"_source":980,"_file":981,"_stem":982,"_extension":983},"\u002Fblog\u002Fwhat-is-a-data-model","blog",false,"","What is a data model?","Data model means different things depending on who you ask. Here's a plain definition, a real example in SQL, and how a model differs from a table, a report and a semantic model.","2026-12-07",{"name":12,"title":13},"Joe Fusaro","Founder, Datachef",[15,16,17,18],"data model","data modeling","sql","metrics","\u002Fblog\u002Fwhat-is-a-data-model.png",{"type":21,"children":22,"toc":969},"root",[23,32,83,87,92,98,103,128,133,138,143,148,494,499,699,712,725,730,769,774,843,848,853,883,888,908,911,917,937,940,963],{"type":24,"tag":25,"props":26,"children":28},"element","h2",{"id":27},"table-of-contents",[29],{"type":30,"value":31},"text","Table of Contents",{"type":24,"tag":33,"props":34,"children":35},"ul",{},[36,47,56,65,74],{"type":24,"tag":37,"props":38,"children":39},"li",{},[40],{"type":24,"tag":41,"props":42,"children":44},"a",{"href":43},"#what-does-data-model-mean",[45],{"type":30,"value":46},"What does \"data model\" mean?",{"type":24,"tag":37,"props":48,"children":49},{},[50],{"type":24,"tag":41,"props":51,"children":53},{"href":52},"#what-does-one-look-like",[54],{"type":30,"value":55},"What does one look like?",{"type":24,"tag":37,"props":57,"children":58},{},[59],{"type":24,"tag":41,"props":60,"children":62},{"href":61},"#how-is-it-different-from-a-table-a-report-or-a-semantic-model",[63],{"type":30,"value":64},"How is it different from a table, a report or a semantic model?",{"type":24,"tag":37,"props":66,"children":67},{},[68],{"type":24,"tag":41,"props":69,"children":71},{"href":70},"#what-makes-a-good-data-model",[72],{"type":30,"value":73},"What makes a good data model?",{"type":24,"tag":37,"props":75,"children":76},{},[77],{"type":24,"tag":41,"props":78,"children":80},{"href":79},"#where-should-you-start",[81],{"type":30,"value":82},"Where should you start?",{"type":24,"tag":84,"props":85,"children":86},"hr",{},[],{"type":24,"tag":25,"props":88,"children":90},{"id":89},"what-does-data-model-mean",[91],{"type":30,"value":46},{"type":24,"tag":93,"props":94,"children":95},"p",{},[96],{"type":30,"value":97},"A data model is a defined way of organizing raw data so that it can answer business questions.",{"type":24,"tag":93,"props":99,"children":100},{},[101],{"type":30,"value":102},"You'll hear the term used in two ways, which is where the confusion comes from:",{"type":24,"tag":104,"props":105,"children":106},"ol",{},[107,118],{"type":24,"tag":37,"props":108,"children":109},{},[110,116],{"type":24,"tag":111,"props":112,"children":113},"strong",{},[114],{"type":30,"value":115},"Database design",{"type":30,"value":117}," - the blueprint of what's stored: which tables exist, what columns they have and how they relate. This is the world of entity-relationship diagrams, star schemas, and fact and dimension tables.",{"type":24,"tag":37,"props":119,"children":120},{},[121,126],{"type":24,"tag":111,"props":122,"children":123},{},[124],{"type":30,"value":125},"Analytics",{"type":30,"value":127}," - a saved SQL query, with a name, that turns raw data into something a team can use. dbt helped make this meaning popular, and it's usually what people on business teams mean.",{"type":24,"tag":93,"props":129,"children":130},{},[131],{"type":30,"value":132},"Both are about the same thing: deciding how data should be structured and what it should mean. This post focuses on the second. (And neither has anything to do with an AI model like Claude, though AI can help you build one.)",{"type":24,"tag":25,"props":134,"children":136},{"id":135},"what-does-one-look-like",[137],{"type":30,"value":55},{"type":24,"tag":93,"props":139,"children":140},{},[141],{"type":30,"value":142},"Say you want to report on qualified pipeline. Salesforce has the raw ingredients, but no field that says which opportunities count.",{"type":24,"tag":93,"props":144,"children":145},{},[146],{"type":30,"value":147},"The first model cleans up the source data and joins it together:",{"type":24,"tag":149,"props":150,"children":153},"pre",{"className":151,"code":152,"language":17,"meta":7,"style":7},"language-sql shiki shiki-themes github-light github-dark","-- opportunities_clean\nSELECT\n  o.id,\n  o.amount,\n  o.stagename,\n  o.type,\n  o.isclosed,\n  o.closedate,\n  a.name AS account,\n  a.billingcountry AS country\nFROM salesforce.opportunity o\nJOIN salesforce.account a ON a.id = o.accountid\nWHERE a.name NOT ILIKE '%test%'\n",[154],{"type":24,"tag":155,"props":156,"children":157},"code",{"__ignoreMap":7},[158,170,180,206,227,248,269,290,311,339,365,393,457],{"type":24,"tag":159,"props":160,"children":163},"span",{"class":161,"line":162},"line",1,[164],{"type":24,"tag":159,"props":165,"children":167},{"style":166},"--shiki-default:#6A737D;--shiki-dark:#6A737D",[168],{"type":30,"value":169},"-- opportunities_clean\n",{"type":24,"tag":159,"props":171,"children":173},{"class":161,"line":172},2,[174],{"type":24,"tag":159,"props":175,"children":177},{"style":176},"--shiki-default:#D73A49;--shiki-dark:#F97583",[178],{"type":30,"value":179},"SELECT\n",{"type":24,"tag":159,"props":181,"children":183},{"class":161,"line":182},3,[184,190,196,201],{"type":24,"tag":159,"props":185,"children":187},{"style":186},"--shiki-default:#005CC5;--shiki-dark:#79B8FF",[188],{"type":30,"value":189},"  o",{"type":24,"tag":159,"props":191,"children":193},{"style":192},"--shiki-default:#24292E;--shiki-dark:#E1E4E8",[194],{"type":30,"value":195},".",{"type":24,"tag":159,"props":197,"children":198},{"style":186},[199],{"type":30,"value":200},"id",{"type":24,"tag":159,"props":202,"children":203},{"style":192},[204],{"type":30,"value":205},",\n",{"type":24,"tag":159,"props":207,"children":209},{"class":161,"line":208},4,[210,214,218,223],{"type":24,"tag":159,"props":211,"children":212},{"style":186},[213],{"type":30,"value":189},{"type":24,"tag":159,"props":215,"children":216},{"style":192},[217],{"type":30,"value":195},{"type":24,"tag":159,"props":219,"children":220},{"style":186},[221],{"type":30,"value":222},"amount",{"type":24,"tag":159,"props":224,"children":225},{"style":192},[226],{"type":30,"value":205},{"type":24,"tag":159,"props":228,"children":230},{"class":161,"line":229},5,[231,235,239,244],{"type":24,"tag":159,"props":232,"children":233},{"style":186},[234],{"type":30,"value":189},{"type":24,"tag":159,"props":236,"children":237},{"style":192},[238],{"type":30,"value":195},{"type":24,"tag":159,"props":240,"children":241},{"style":186},[242],{"type":30,"value":243},"stagename",{"type":24,"tag":159,"props":245,"children":246},{"style":192},[247],{"type":30,"value":205},{"type":24,"tag":159,"props":249,"children":251},{"class":161,"line":250},6,[252,256,260,265],{"type":24,"tag":159,"props":253,"children":254},{"style":186},[255],{"type":30,"value":189},{"type":24,"tag":159,"props":257,"children":258},{"style":192},[259],{"type":30,"value":195},{"type":24,"tag":159,"props":261,"children":262},{"style":186},[263],{"type":30,"value":264},"type",{"type":24,"tag":159,"props":266,"children":267},{"style":192},[268],{"type":30,"value":205},{"type":24,"tag":159,"props":270,"children":272},{"class":161,"line":271},7,[273,277,281,286],{"type":24,"tag":159,"props":274,"children":275},{"style":186},[276],{"type":30,"value":189},{"type":24,"tag":159,"props":278,"children":279},{"style":192},[280],{"type":30,"value":195},{"type":24,"tag":159,"props":282,"children":283},{"style":186},[284],{"type":30,"value":285},"isclosed",{"type":24,"tag":159,"props":287,"children":288},{"style":192},[289],{"type":30,"value":205},{"type":24,"tag":159,"props":291,"children":293},{"class":161,"line":292},8,[294,298,302,307],{"type":24,"tag":159,"props":295,"children":296},{"style":186},[297],{"type":30,"value":189},{"type":24,"tag":159,"props":299,"children":300},{"style":192},[301],{"type":30,"value":195},{"type":24,"tag":159,"props":303,"children":304},{"style":186},[305],{"type":30,"value":306},"closedate",{"type":24,"tag":159,"props":308,"children":309},{"style":192},[310],{"type":30,"value":205},{"type":24,"tag":159,"props":312,"children":314},{"class":161,"line":313},9,[315,320,324,329,334],{"type":24,"tag":159,"props":316,"children":317},{"style":186},[318],{"type":30,"value":319},"  a",{"type":24,"tag":159,"props":321,"children":322},{"style":192},[323],{"type":30,"value":195},{"type":24,"tag":159,"props":325,"children":326},{"style":186},[327],{"type":30,"value":328},"name",{"type":24,"tag":159,"props":330,"children":331},{"style":176},[332],{"type":30,"value":333}," AS",{"type":24,"tag":159,"props":335,"children":336},{"style":192},[337],{"type":30,"value":338}," account,\n",{"type":24,"tag":159,"props":340,"children":342},{"class":161,"line":341},10,[343,347,351,356,360],{"type":24,"tag":159,"props":344,"children":345},{"style":186},[346],{"type":30,"value":319},{"type":24,"tag":159,"props":348,"children":349},{"style":192},[350],{"type":30,"value":195},{"type":24,"tag":159,"props":352,"children":353},{"style":186},[354],{"type":30,"value":355},"billingcountry",{"type":24,"tag":159,"props":357,"children":358},{"style":176},[359],{"type":30,"value":333},{"type":24,"tag":159,"props":361,"children":362},{"style":192},[363],{"type":30,"value":364}," country\n",{"type":24,"tag":159,"props":366,"children":368},{"class":161,"line":367},11,[369,374,379,383,388],{"type":24,"tag":159,"props":370,"children":371},{"style":176},[372],{"type":30,"value":373},"FROM",{"type":24,"tag":159,"props":375,"children":376},{"style":186},[377],{"type":30,"value":378}," salesforce",{"type":24,"tag":159,"props":380,"children":381},{"style":192},[382],{"type":30,"value":195},{"type":24,"tag":159,"props":384,"children":385},{"style":186},[386],{"type":30,"value":387},"opportunity",{"type":24,"tag":159,"props":389,"children":390},{"style":192},[391],{"type":30,"value":392}," o\n",{"type":24,"tag":159,"props":394,"children":396},{"class":161,"line":395},12,[397,402,406,410,415,420,425,430,434,438,443,448,452],{"type":24,"tag":159,"props":398,"children":399},{"style":176},[400],{"type":30,"value":401},"JOIN",{"type":24,"tag":159,"props":403,"children":404},{"style":186},[405],{"type":30,"value":378},{"type":24,"tag":159,"props":407,"children":408},{"style":192},[409],{"type":30,"value":195},{"type":24,"tag":159,"props":411,"children":412},{"style":186},[413],{"type":30,"value":414},"account",{"type":24,"tag":159,"props":416,"children":417},{"style":192},[418],{"type":30,"value":419}," a ",{"type":24,"tag":159,"props":421,"children":422},{"style":176},[423],{"type":30,"value":424},"ON",{"type":24,"tag":159,"props":426,"children":427},{"style":186},[428],{"type":30,"value":429}," a",{"type":24,"tag":159,"props":431,"children":432},{"style":192},[433],{"type":30,"value":195},{"type":24,"tag":159,"props":435,"children":436},{"style":186},[437],{"type":30,"value":200},{"type":24,"tag":159,"props":439,"children":440},{"style":176},[441],{"type":30,"value":442}," =",{"type":24,"tag":159,"props":444,"children":445},{"style":186},[446],{"type":30,"value":447}," o",{"type":24,"tag":159,"props":449,"children":450},{"style":192},[451],{"type":30,"value":195},{"type":24,"tag":159,"props":453,"children":454},{"style":186},[455],{"type":30,"value":456},"accountid\n",{"type":24,"tag":159,"props":458,"children":460},{"class":161,"line":459},13,[461,466,470,474,478,483,488],{"type":24,"tag":159,"props":462,"children":463},{"style":176},[464],{"type":30,"value":465},"WHERE",{"type":24,"tag":159,"props":467,"children":468},{"style":186},[469],{"type":30,"value":429},{"type":24,"tag":159,"props":471,"children":472},{"style":192},[473],{"type":30,"value":195},{"type":24,"tag":159,"props":475,"children":476},{"style":186},[477],{"type":30,"value":328},{"type":24,"tag":159,"props":479,"children":480},{"style":176},[481],{"type":30,"value":482}," NOT",{"type":24,"tag":159,"props":484,"children":485},{"style":192},[486],{"type":30,"value":487}," ILIKE ",{"type":24,"tag":159,"props":489,"children":491},{"style":490},"--shiki-default:#032F62;--shiki-dark:#9ECBFF",[492],{"type":30,"value":493},"'%test%'\n",{"type":24,"tag":93,"props":495,"children":496},{},[497],{"type":30,"value":498},"The second model builds on the first, and it's where your definition lives:",{"type":24,"tag":149,"props":500,"children":502},{"className":151,"code":501,"language":17,"meta":7,"style":7},"-- qualified_pipeline\nSELECT\n  country,\n  date_trunc('quarter', closedate) AS close_quarter,\n  SUM(amount) AS pipeline\nFROM opportunities_clean\nWHERE isclosed = false\n  AND type = 'New Business'\n  AND stagename IN ('Proposal', 'Negotiation')\nGROUP BY 1, 2\n",[503],{"type":24,"tag":155,"props":504,"children":505},{"__ignoreMap":7},[506,514,521,529,557,579,591,613,635,677],{"type":24,"tag":159,"props":507,"children":508},{"class":161,"line":162},[509],{"type":24,"tag":159,"props":510,"children":511},{"style":166},[512],{"type":30,"value":513},"-- qualified_pipeline\n",{"type":24,"tag":159,"props":515,"children":516},{"class":161,"line":172},[517],{"type":24,"tag":159,"props":518,"children":519},{"style":176},[520],{"type":30,"value":179},{"type":24,"tag":159,"props":522,"children":523},{"class":161,"line":182},[524],{"type":24,"tag":159,"props":525,"children":526},{"style":192},[527],{"type":30,"value":528},"  country,\n",{"type":24,"tag":159,"props":530,"children":531},{"class":161,"line":208},[532,537,542,547,552],{"type":24,"tag":159,"props":533,"children":534},{"style":192},[535],{"type":30,"value":536},"  date_trunc(",{"type":24,"tag":159,"props":538,"children":539},{"style":490},[540],{"type":30,"value":541},"'quarter'",{"type":24,"tag":159,"props":543,"children":544},{"style":192},[545],{"type":30,"value":546},", closedate) ",{"type":24,"tag":159,"props":548,"children":549},{"style":176},[550],{"type":30,"value":551},"AS",{"type":24,"tag":159,"props":553,"children":554},{"style":192},[555],{"type":30,"value":556}," close_quarter,\n",{"type":24,"tag":159,"props":558,"children":559},{"class":161,"line":229},[560,565,570,574],{"type":24,"tag":159,"props":561,"children":562},{"style":186},[563],{"type":30,"value":564},"  SUM",{"type":24,"tag":159,"props":566,"children":567},{"style":192},[568],{"type":30,"value":569},"(amount) ",{"type":24,"tag":159,"props":571,"children":572},{"style":176},[573],{"type":30,"value":551},{"type":24,"tag":159,"props":575,"children":576},{"style":192},[577],{"type":30,"value":578}," pipeline\n",{"type":24,"tag":159,"props":580,"children":581},{"class":161,"line":250},[582,586],{"type":24,"tag":159,"props":583,"children":584},{"style":176},[585],{"type":30,"value":373},{"type":24,"tag":159,"props":587,"children":588},{"style":192},[589],{"type":30,"value":590}," opportunities_clean\n",{"type":24,"tag":159,"props":592,"children":593},{"class":161,"line":271},[594,598,603,608],{"type":24,"tag":159,"props":595,"children":596},{"style":176},[597],{"type":30,"value":465},{"type":24,"tag":159,"props":599,"children":600},{"style":192},[601],{"type":30,"value":602}," isclosed ",{"type":24,"tag":159,"props":604,"children":605},{"style":176},[606],{"type":30,"value":607},"=",{"type":24,"tag":159,"props":609,"children":610},{"style":192},[611],{"type":30,"value":612}," false\n",{"type":24,"tag":159,"props":614,"children":615},{"class":161,"line":292},[616,621,626,630],{"type":24,"tag":159,"props":617,"children":618},{"style":176},[619],{"type":30,"value":620},"  AND",{"type":24,"tag":159,"props":622,"children":623},{"style":176},[624],{"type":30,"value":625}," type",{"type":24,"tag":159,"props":627,"children":628},{"style":176},[629],{"type":30,"value":442},{"type":24,"tag":159,"props":631,"children":632},{"style":490},[633],{"type":30,"value":634}," 'New Business'\n",{"type":24,"tag":159,"props":636,"children":637},{"class":161,"line":313},[638,642,647,652,657,662,667,672],{"type":24,"tag":159,"props":639,"children":640},{"style":176},[641],{"type":30,"value":620},{"type":24,"tag":159,"props":643,"children":644},{"style":192},[645],{"type":30,"value":646}," stagename ",{"type":24,"tag":159,"props":648,"children":649},{"style":176},[650],{"type":30,"value":651},"IN",{"type":24,"tag":159,"props":653,"children":654},{"style":192},[655],{"type":30,"value":656}," (",{"type":24,"tag":159,"props":658,"children":659},{"style":490},[660],{"type":30,"value":661},"'Proposal'",{"type":24,"tag":159,"props":663,"children":664},{"style":192},[665],{"type":30,"value":666},", ",{"type":24,"tag":159,"props":668,"children":669},{"style":490},[670],{"type":30,"value":671},"'Negotiation'",{"type":24,"tag":159,"props":673,"children":674},{"style":192},[675],{"type":30,"value":676},")\n",{"type":24,"tag":159,"props":678,"children":679},{"class":161,"line":341},[680,685,690,694],{"type":24,"tag":159,"props":681,"children":682},{"style":176},[683],{"type":30,"value":684},"GROUP BY",{"type":24,"tag":159,"props":686,"children":687},{"style":186},[688],{"type":30,"value":689}," 1",{"type":24,"tag":159,"props":691,"children":692},{"style":192},[693],{"type":30,"value":666},{"type":24,"tag":159,"props":695,"children":696},{"style":186},[697],{"type":30,"value":698},"2\n",{"type":24,"tag":93,"props":700,"children":701},{},[702,704,710],{"type":30,"value":703},"Now anyone can run ",{"type":24,"tag":155,"props":705,"children":707},{"className":706},[],[708],{"type":30,"value":709},"SELECT * FROM qualified_pipeline",{"type":30,"value":711}," and get the same answer. Your stage names and rules will differ, and that's the point. These definitions are specific to your company, and they don't exist in any source system until someone writes them down.",{"type":24,"tag":93,"props":713,"children":714},{},[715,717,723],{"type":30,"value":716},"Layering them also means a fix only happens once. If you find another test account, update ",{"type":24,"tag":155,"props":718,"children":720},{"className":719},[],[721],{"type":30,"value":722},"opportunities_clean",{"type":30,"value":724}," and everything built on it picks up the change.",{"type":24,"tag":25,"props":726,"children":728},{"id":727},"how-is-it-different-from-a-table-a-report-or-a-semantic-model",[729],{"type":30,"value":64},{"type":24,"tag":33,"props":731,"children":732},{},[733,743,753],{"type":24,"tag":37,"props":734,"children":735},{},[736,741],{"type":24,"tag":111,"props":737,"children":738},{},[739],{"type":30,"value":740},"A table",{"type":30,"value":742}," stores data. A model usually describes how to produce data, and may or may not store the result.",{"type":24,"tag":37,"props":744,"children":745},{},[746,751],{"type":24,"tag":111,"props":747,"children":748},{},[749],{"type":30,"value":750},"A report",{"type":30,"value":752}," shows an answer to one question. A model is what many reports can be built on. If you've ever rebuilt the same filters in five Salesforce reports, those filters wanted to be a model.",{"type":24,"tag":37,"props":754,"children":755},{},[756,767],{"type":24,"tag":111,"props":757,"children":758},{},[759,761],{"type":30,"value":760},"A ",{"type":24,"tag":41,"props":762,"children":764},{"href":763},"\u002Fblog\u002Fwhat-is-a-semantic-model",[765],{"type":30,"value":766},"semantic model",{"type":30,"value":768}," sits on top of your data models and defines metrics, so that a tool can generate new queries from them.",{"type":24,"tag":25,"props":770,"children":772},{"id":771},"what-makes-a-good-data-model",[773],{"type":30,"value":73},{"type":24,"tag":33,"props":775,"children":776},{},[777,803,813,823,833],{"type":24,"tag":37,"props":778,"children":779},{},[780,785,787,793,795,801],{"type":24,"tag":111,"props":781,"children":782},{},[783],{"type":30,"value":784},"A clear name",{"type":30,"value":786}," - ",{"type":24,"tag":155,"props":788,"children":790},{"className":789},[],[791],{"type":30,"value":792},"qualified_pipeline",{"type":30,"value":794}," tells you what you're getting. ",{"type":24,"tag":155,"props":796,"children":798},{"className":797},[],[799],{"type":30,"value":800},"q3_report_final_v2",{"type":30,"value":802}," doesn't.",{"type":24,"tag":37,"props":804,"children":805},{},[806,811],{"type":24,"tag":111,"props":807,"children":808},{},[809],{"type":30,"value":810},"A description",{"type":30,"value":812}," - say what it returns and spell out the definitions in it. People read this, and so do AI tools deciding whether it's the right model to use.",{"type":24,"tag":37,"props":814,"children":815},{},[816,821],{"type":24,"tag":111,"props":817,"children":818},{},[819],{"type":30,"value":820},"Visible logic",{"type":30,"value":822}," - anyone looking at a number should be able to see how it was calculated.",{"type":24,"tag":37,"props":824,"children":825},{},[826,831],{"type":24,"tag":111,"props":827,"children":828},{},[829],{"type":30,"value":830},"Version history",{"type":30,"value":832}," - definitions change. When a number moves, you want to know who changed what, and when.",{"type":24,"tag":37,"props":834,"children":835},{},[836,841],{"type":24,"tag":111,"props":837,"children":838},{},[839],{"type":30,"value":840},"Reuse",{"type":30,"value":842}," - if a definition is copied into each report, the copies will drift apart. Build on the model instead.",{"type":24,"tag":25,"props":844,"children":846},{"id":845},"where-should-you-start",[847],{"type":30,"value":82},{"type":24,"tag":93,"props":849,"children":850},{},[851],{"type":30,"value":852},"Not with a diagram of your entire business. Start with the question that causes the most arguments, then model just that. For many B2B teams, that's one of these:",{"type":24,"tag":33,"props":854,"children":855},{},[856,867,878],{"type":24,"tag":37,"props":857,"children":858},{},[859,865],{"type":24,"tag":41,"props":860,"children":862},{"href":861},"\u002Fblog\u002Fclick-to-cash-reporting",[863],{"type":30,"value":864},"Click-to-cash reporting",{"type":30,"value":866},": which clicks turned into revenue?",{"type":24,"tag":37,"props":868,"children":869},{},[870,876],{"type":24,"tag":41,"props":871,"children":873},{"href":872},"\u002Fblog\u002Fcreate-multi-touch-attribution-model-from-one-prompt",[874],{"type":30,"value":875},"Multi-touch attribution",{"type":30,"value":877},": which campaigns get credit for a deal?",{"type":24,"tag":37,"props":879,"children":880},{},[881],{"type":30,"value":882},"Qualified pipeline: do we have enough to hit the number?",{"type":24,"tag":93,"props":884,"children":885},{},[886],{"type":30,"value":887},"Traditionally, this has meant a warehouse, a transformation tool and someone who knows both. It doesn't have to anymore.",{"type":24,"tag":93,"props":889,"children":890},{},[891,893,898,900,906],{"type":30,"value":892},"In Datachef, your Salesforce, Marketo and other data is already synced and queryable. You can write the SQL yourself, or ask in a sentence and let the agent write it, then choose ",{"type":24,"tag":111,"props":894,"children":895},{},[896],{"type":30,"value":897},"Save as model",{"type":30,"value":899},". From there, your team, the agent and connected AI tools all use the same definition. It's a saved query rather than a stored copy, so it's always as fresh as your latest sync. The ",{"type":24,"tag":41,"props":901,"children":903},{"href":902},"\u002Fdocs\u002Fmodels\u002Foverview",[904],{"type":30,"value":905},"docs on models",{"type":30,"value":907}," cover the details.",{"type":24,"tag":84,"props":909,"children":910},{},[],{"type":24,"tag":25,"props":912,"children":914},{"id":913},"related-reading",[915],{"type":30,"value":916},"Related reading",{"type":24,"tag":33,"props":918,"children":919},{},[920,928],{"type":24,"tag":37,"props":921,"children":922},{},[923],{"type":24,"tag":41,"props":924,"children":925},{"href":763},[926],{"type":30,"value":927},"What is a semantic model?",{"type":24,"tag":37,"props":929,"children":930},{},[931],{"type":24,"tag":41,"props":932,"children":934},{"href":933},"\u002Fblog\u002Fdbt-alternative",[935],{"type":30,"value":936},"dbt alternative: When you need one, and when you don't",{"type":24,"tag":84,"props":938,"children":939},{},[],{"type":24,"tag":93,"props":941,"children":942},{},[943],{"type":24,"tag":944,"props":945,"children":946},"em",{},[947,949,955,957],{"type":30,"value":948},"Want shared data models without the stack? ",{"type":24,"tag":41,"props":950,"children":952},{"href":951},"\u002F#videos",[953],{"type":30,"value":954},"Watch a demo",{"type":30,"value":956},", or ",{"type":24,"tag":41,"props":958,"children":960},{"href":959},"https:\u002F\u002Fapp.datachef.com\u002Flogin?utm_source=blog&utm_content=what-is-a-data-model",[961],{"type":30,"value":962},"try Datachef free.",{"type":24,"tag":964,"props":965,"children":966},"style",{},[967],{"type":30,"value":968},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":7,"searchDepth":172,"depth":172,"links":970},[971,972,973,974,975,976,977],{"id":27,"depth":172,"text":31},{"id":89,"depth":172,"text":46},{"id":135,"depth":172,"text":55},{"id":727,"depth":172,"text":64},{"id":771,"depth":172,"text":73},{"id":845,"depth":172,"text":82},{"id":913,"depth":172,"text":916},"markdown","content:blog:what-is-a-data-model.md","content","blog\u002Fwhat-is-a-data-model.md","blog\u002Fwhat-is-a-data-model","md",1793926856031]