{"id":17220,"date":"2026-09-06T08:30:45","date_gmt":"2026-09-05T23:30:45","guid":{"rendered":"https:\/\/www.sambuichi.jp\/?p=17220"},"modified":"2026-09-06T08:30:45","modified_gmt":"2026-09-05T23:30:45","slug":"why-a-single-hierarchical-table-matters-to-rdb-architects","status":"publish","type":"post","link":"https:\/\/www.sambuichi.jp\/?p=17220&lang=en","title":{"rendered":"Why a Single Hierarchical Table Matters to RDB Architects"},"content":{"rendered":"<p>Views: 0<\/p><div id=\"header\">\n<h1>Why a Single Hierarchical Table Matters to RDB Architects<\/h1>\n<div class=\"details\">\n<span id=\"author\" class=\"author\">ChatGPT\uff08Editor\uff1aSAMBUICHI, Nobuyuki\uff09<\/span><br \/>\n<span id=\"revdate\">2026-09-06<\/span>\n<\/div>\n<\/div>\n<div id=\"content\">\n<div id=\"preamble\">\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Relational databases are excellent for operational processing.<br \/>\nThey are optimized for updating current data, enforcing integrity, joining normalized tables, and supporting transactions in real time.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>But long-term preservation is a different problem.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>A historical business record is useful only if the information needed to understand it can still be reconstructed years later.<br \/>\nThat often requires more than the transaction rows themselves.<br \/>\nIt may also require the exact historical master data, the correct schema version, code tables, join rules, and application-specific logic that existed when the transaction was created.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Structured Tidy Data Tables address that different requirement.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_start_from_the_semantic_object_model\">1. Start from the semantic object model<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Consider a small accounting model with four classes:<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p><code>JournalEntry<\/code><\/p>\n<\/li>\n<li>\n<p><code>JournalLine<\/code><\/p>\n<\/li>\n<li>\n<p><code>TaxDetail<\/code><\/p>\n<\/li>\n<li>\n<p><code>Account<\/code><\/p>\n<\/li>\n<\/ul>\n<\/div>\n<div class=\"paragraph\">\n<p>A <code>JournalEntry<\/code> contains one or more <code>JournalLine<\/code> occurrences.<br \/>\nA <code>JournalLine<\/code> may contain repeating <code>TaxDetail<\/code> occurrences and references one <code>Account<\/code>.<br \/>\nEach class keeps its own unique identifier: <code>entry_id<\/code>, <code>line_id<\/code>, <code>tax_id<\/code>, and <code>account_id<\/code>.<\/p>\n<\/div>\n<div class=\"imageblock text-center\">\n<div class=\"content\">\n<img decoding=\"async\" src=\"https:\/\/www.sambuichi.jp\/wp-content\/uploads\/2026\/09\/figure_1.png\" alt=\"UML semantic object model\">\n<\/div>\n<div class=\"title\">Figure 1. UML semantic object model<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>The semantic model is the authority.<br \/>\nIt defines the classes, attributes, cardinalities, and relationships.<br \/>\nThe question is how to preserve and exchange data derived from that model.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_what_an_rdb_designer_normally_does\">2. What an RDB designer normally does<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>A conventional relational implementation decomposes the model into separate relations.<\/p>\n<\/div>\n<div class=\"imageblock text-center\">\n<div class=\"content\">\n<img decoding=\"async\" src=\"https:\/\/www.sambuichi.jp\/wp-content\/uploads\/2026\/09\/figure_2.png\" alt=\"Conventional E-R representation\">\n<\/div>\n<div class=\"title\">Figure 2. Conventional E-R representation<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>This is a natural design for operational processing.<\/p>\n<\/div>\n<div class=\"sect2\">\n<h3 id=\"_journalentry\">2.1. JournalEntry<\/h3>\n<table class=\"tableblock frame-all grid-all stretch\">\n<colgroup>\n<col width=\"20%\">\n<col width=\"20%\">\n<col width=\"20%\">\n<col width=\"40%\">\n<\/colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">entry_id<\/th>\n<th class=\"tableblock halign-left valign-top\">entry_date<\/th>\n<th class=\"tableblock halign-left valign-top\">journal_code<\/th>\n<th class=\"tableblock halign-left valign-top\">description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">H001<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">2026-09-01<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">SALES<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Sale of Product X<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">H002<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">2026-09-02<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">PURCHASE<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Purchase of Material A<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<div class=\"sect2\">\n<h3 id=\"_journalline\">2.2. JournalLine<\/h3>\n<table class=\"tableblock frame-all grid-all stretch\">\n<colgroup>\n<col width=\"20%\">\n<col width=\"20%\">\n<col width=\"20%\">\n<col width=\"20%\">\n<col width=\"20%\">\n<\/colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">entry_id<\/th>\n<th class=\"tableblock halign-left valign-top\">line_id<\/th>\n<th class=\"tableblock halign-left valign-top\">debit_credit_code<\/th>\n<th class=\"tableblock halign-left valign-top\">account_id<\/th>\n<th class=\"tableblock halign-left valign-top\">amount<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">H001<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">D001<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">debit<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">1100<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">100.00<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">H001<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">D002<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">credit<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">4000<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">100.00<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">H002<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">D003<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">debit<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">5000<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">80.00<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">H002<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">D004<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">credit<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">2100<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">80.00<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<div class=\"sect2\">\n<h3 id=\"_taxdetail\">2.3. TaxDetail<\/h3>\n<table class=\"tableblock frame-all grid-all stretch\">\n<colgroup>\n<col width=\"16.6666%\">\n<col width=\"16.6666%\">\n<col width=\"16.6666%\">\n<col width=\"16.6666%\">\n<col width=\"16.6666%\">\n<col width=\"16.667%\">\n<\/colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">entry_id<\/th>\n<th class=\"tableblock halign-left valign-top\">line_id<\/th>\n<th class=\"tableblock halign-left valign-top\">tax_id<\/th>\n<th class=\"tableblock halign-left valign-top\">tax_category<\/th>\n<th class=\"tableblock halign-left valign-top\">tax_rate<\/th>\n<th class=\"tableblock halign-left valign-top\">tax_amount<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">H002<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">D003<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">T001<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Standard<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">10<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">8.00<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<div class=\"sect2\">\n<h3 id=\"_account\">2.4. Account<\/h3>\n<table class=\"tableblock frame-all grid-all stretch\">\n<colgroup>\n<col width=\"25%\">\n<col width=\"50%\">\n<col width=\"25%\">\n<\/colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">account_id<\/th>\n<th class=\"tableblock halign-left valign-top\">account_name<\/th>\n<th class=\"tableblock halign-left valign-top\">account_type<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">1100<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Cash<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Asset<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">4000<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Sales<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Revenue<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">5000<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Purchases<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Expense<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">2100<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Accounts Payable<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Liability<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<div class=\"paragraph\">\n<p>For an application database, this decomposition is often exactly what is wanted.<br \/>\nEach class has its own relation, and foreign keys reconstruct the business structure.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>For exchange and long-term preservation, however, the same design creates another problem:<br \/>\none semantic business record is spread across several tables or files.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_historical_archiving_is_a_different_problem\">3. Historical archiving is a different problem<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Suppose a historical <code>JournalLine<\/code> contains only:<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlightjs highlight\"><code class=\"language-text hljs\" data-lang=\"text\">account_id = 1100\r\namount     = 100.00<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>Years later, <code>1100<\/code> is meaningful only if the corresponding historical <code>Account<\/code> master data is also available and still carries the meaning that applied at the time.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>The same issue applies to:<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p>tax codes,<\/p>\n<\/li>\n<li>\n<p>parties,<\/p>\n<\/li>\n<li>\n<p>currencies,<\/p>\n<\/li>\n<li>\n<p>products,<\/p>\n<\/li>\n<li>\n<p>organizational units,<\/p>\n<\/li>\n<li>\n<p>and other referenced master data.<\/p>\n<\/li>\n<\/ul>\n<\/div>\n<div class=\"paragraph\">\n<p>Header and Line data must also be preserved as one consistent set.<br \/>\nRestoring one without the other can leave broken references or an incomplete business record.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>A database backup can preserve the operational state, but future reuse may then depend on restoring the correct:<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p>database version,<\/p>\n<\/li>\n<li>\n<p>schema,<\/p>\n<\/li>\n<li>\n<p>master data,<\/p>\n<\/li>\n<li>\n<p>code tables,<\/p>\n<\/li>\n<li>\n<p>application logic,<\/p>\n<\/li>\n<li>\n<p>and join rules.<\/p>\n<\/li>\n<\/ul>\n<\/div>\n<div class=\"paragraph\">\n<p>That is workable for disaster recovery.<br \/>\nIt is not always the best form for a portable historical archive.<\/p>\n<\/div>\n<div class=\"admonitionblock important\">\n<table>\n<tr>\n<td class=\"icon\">\n<div class=\"title\">Important<\/div>\n<\/td>\n<td class=\"content\">\n<div class=\"paragraph\">\n<p>Normalization is excellent for operational processing, but a normalized database is not automatically a self-contained historical record.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>For long-term preservation, the information needed to understand a transaction should travel together, even when the operational application stores it across several tables.<\/p>\n<\/div>\n<\/td>\n<\/tr>\n<\/table>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_why_not_simply_flatten_everything\">4. Why not simply flatten everything?<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>One alternative is to export a flat CSV in which JournalEntry attributes are copied onto every JournalLine row.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>That creates another problem.<\/p>\n<\/div>\n<table class=\"tableblock frame-all grid-all stretch\">\n<colgroup>\n<col width=\"14.2857%\">\n<col width=\"14.2857%\">\n<col width=\"28.5714%\">\n<col width=\"14.2857%\">\n<col width=\"14.2857%\">\n<col width=\"14.2858%\">\n<\/colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">entry_id<\/th>\n<th class=\"tableblock halign-left valign-top\">entry_date<\/th>\n<th class=\"tableblock halign-left valign-top\">description<\/th>\n<th class=\"tableblock halign-left valign-top\">line_id<\/th>\n<th class=\"tableblock halign-left valign-top\">account_id<\/th>\n<th class=\"tableblock halign-left valign-top\">amount<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">H001<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">2026-09-01<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Sale of Product X<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">D001<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">1100<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">100.00<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">H001<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">2026-09-01<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Sale of Product X<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">D002<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">4000<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">100.00<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<div class=\"paragraph\">\n<p><code>entry_date<\/code> and <code>description<\/code> are repeated for every line.<br \/>\nIf <code>TaxDetail<\/code> repeats, the duplication grows again.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>The file is rectangular, but the ownership of facts becomes blurred.<br \/>\nA value that semantically belongs to <code>JournalEntry<\/code> is physically copied onto <code>JournalLine<\/code> rows.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Structured Tidy Data avoids both extremes:<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p>it does not require one physical table per semantic class; and<\/p>\n<\/li>\n<li>\n<p>it does not duplicate parent attributes on child rows.<\/p>\n<\/li>\n<\/ul>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_what_is_a_structured_tidy_data_table\">5. What is a Structured Tidy Data Table?<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>A Structured Tidy Data Table is one sparse, model-governed table that can carry occurrences of several semantic classes.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>The essential rules are simple:<\/p>\n<\/div>\n<div class=\"olist arabic\">\n<ol class=\"arabic\">\n<li>\n<p>One row represents one class occurrence.<\/p>\n<\/li>\n<li>\n<p>An attribute value appears only on the row of the class that owns it.<\/p>\n<\/li>\n<li>\n<p>Repeating classes create additional rows, not numbered columns such as <code>Tax1<\/code>, <code>Tax2<\/code>, <code>Tax3<\/code>.<\/p>\n<\/li>\n<li>\n<p>Hierarchical occurrence columns preserve the parent-child context.<\/p>\n<\/li>\n<li>\n<p>References remain explicit.<\/p>\n<\/li>\n<li>\n<p>Blank cells are structural: they usually mean that the column belongs to another class, not that a required value is unknown.<\/p>\n<\/li>\n<\/ol>\n<\/div>\n<div class=\"paragraph\">\n<p>A simplified example is shown below.<\/p>\n<\/div>\n<table class=\"tableblock frame-all grid-all stretch\">\n<colgroup>\n<col width=\"6.6666%\">\n<col width=\"6.6666%\">\n<col width=\"6.6666%\">\n<col width=\"6.6666%\">\n<col width=\"6.6666%\">\n<col width=\"6.6666%\">\n<col width=\"6.6666%\">\n<col width=\"6.6666%\">\n<col width=\"6.6666%\">\n<col width=\"6.6666%\">\n<col width=\"6.6666%\">\n<col width=\"6.6666%\">\n<col width=\"6.6666%\">\n<col width=\"6.6666%\">\n<col width=\"6.6676%\">\n<\/colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">class<\/th>\n<th class=\"tableblock halign-left valign-top\">dEntry<\/th>\n<th class=\"tableblock halign-left valign-top\">dLine<\/th>\n<th class=\"tableblock halign-left valign-top\">dAccount<\/th>\n<th class=\"tableblock halign-left valign-top\">dTax<\/th>\n<th class=\"tableblock halign-left valign-top\">entry_id<\/th>\n<th class=\"tableblock halign-left valign-top\">entry_date<\/th>\n<th class=\"tableblock halign-left valign-top\">line_id<\/th>\n<th class=\"tableblock halign-left valign-top\">debit_credit<\/th>\n<th class=\"tableblock halign-left valign-top\">amount<\/th>\n<th class=\"tableblock halign-left valign-top\">tax_id<\/th>\n<th class=\"tableblock halign-left valign-top\">tax_rate<\/th>\n<th class=\"tableblock halign-left valign-top\">tax_amount<\/th>\n<th class=\"tableblock halign-left valign-top\">account_id<\/th>\n<th class=\"tableblock halign-left valign-top\">account_name<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">JournalEntry<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">1<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">H001<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">2026-09-01<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<\/tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">JournalLine<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">1<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">1<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">D001<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">debit<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">100.00<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<\/tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Account<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">1<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">1<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">1<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">1100<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Cash<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">JournalLine<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">1<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">2<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">D002<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">credit<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">100.00<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<\/tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Account<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">1<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">2<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">1<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">4000<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Sales<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">JournalEntry<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">2<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">H002<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">2026-09-02<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<\/tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">JournalLine<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">2<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">1<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">D003<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">debit<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">80.00<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<\/tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">TaxDetail<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">2<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">1<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">1<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">T001<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">10<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">8.00<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<\/tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Account<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">2<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">1<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">1<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">5000<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Purchases<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">JournalLine<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">2<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">2<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">D004<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">credit<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">80.00<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<\/tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Account<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">2<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">2<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">1<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">2100<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Accounts Payable<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<div class=\"admonitionblock note\">\n<table>\n<tr>\n<td class=\"icon\">\n<div class=\"title\">Note<\/div>\n<\/td>\n<td class=\"content\">\nThe class column is included for explanatory purposes to indicate the Class to which each row belongs. It is not a column defined in the actual data.\n<\/td>\n<\/tr>\n<\/table>\n<\/div>\n<div class=\"paragraph\">\n<p>The table looks unusual to an RDB designer because several semantic classes coexist in one physical table.<br \/>\nThat is deliberate.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>The table is not intended to replace the operational database.<br \/>\nIt is a portable representation of the semantic dataset.<\/p>\n<\/div>\n<div class=\"admonitionblock note\">\n<table>\n<tr>\n<td class=\"icon\">\n<div class=\"title\">Note<\/div>\n<\/td>\n<td class=\"content\">\nIn the following example, TaxDetail and Account are non-repeating Classes and are therefore represented in the same physical row as their parent JournalEntry. This does not alter the semantic Class hierarchy; it only reflects the physical row layout.\n<\/td>\n<\/tr>\n<\/table>\n<\/div>\n<table class=\"tableblock frame-all grid-all stretch\">\n<colgroup>\n<col width=\"7.6923%\">\n<col width=\"7.6923%\">\n<col width=\"7.6923%\">\n<col width=\"7.6923%\">\n<col width=\"7.6923%\">\n<col width=\"7.6923%\">\n<col width=\"7.6923%\">\n<col width=\"7.6923%\">\n<col width=\"7.6923%\">\n<col width=\"7.6923%\">\n<col width=\"7.6923%\">\n<col width=\"7.6923%\">\n<col width=\"7.6924%\">\n<\/colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">class<\/th>\n<th class=\"tableblock halign-left valign-top\">dEntry<\/th>\n<th class=\"tableblock halign-left valign-top\">dLine<\/th>\n<th class=\"tableblock halign-left valign-top\">entry_id<\/th>\n<th class=\"tableblock halign-left valign-top\">entry_date<\/th>\n<th class=\"tableblock halign-left valign-top\">line_id<\/th>\n<th class=\"tableblock halign-left valign-top\">debit_credit<\/th>\n<th class=\"tableblock halign-left valign-top\">amount<\/th>\n<th class=\"tableblock halign-left valign-top\">tax_id<\/th>\n<th class=\"tableblock halign-left valign-top\">tax_rate<\/th>\n<th class=\"tableblock halign-left valign-top\">tax_amount<\/th>\n<th class=\"tableblock halign-left valign-top\">account_id<\/th>\n<th class=\"tableblock halign-left valign-top\">account_name<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">JournalEntry<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">1<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">H001<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">2026-09-01<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<\/tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">JournalLine<br \/>\n(Account)<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">1<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">1<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">D001<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">debit<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">100.00<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">1100<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Cash<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">JournalLine<br \/>\n(Account)<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">1<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">2<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">D002<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">credit<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">100.00<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">4000<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Sales<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">JournalEntry<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">2<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">H002<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">2026-09-02<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<\/tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">JournalLine<br \/>\n(TaxDetail)<br \/>\n(Account)<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">2<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">1<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">D003<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">debit<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">80.00<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">T001<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">10<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">8.00<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">5000<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Purchases<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">JournalLine<br \/>\n(Account)<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">2<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">2<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">D004<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">credit<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">80.00<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">2100<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Accounts Payable<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_why_this_form_matters\">6. Why this form matters<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>The unusual shape preserves three useful properties at the same time:<\/p>\n<\/div>\n<div class=\"olist arabic\">\n<ol class=\"arabic\">\n<li>\n<p><strong>One portable dataset.<\/strong><br \/>\nA complete business record can travel as one governed table instead of a collection of application-specific relations.<\/p>\n<\/li>\n<li>\n<p><strong>No duplication of parent attributes.<\/strong><br \/>\n<code>JournalEntry<\/code> facts stay on the <code>JournalEntry<\/code> row and are not copied to every <code>JournalLine<\/code>.<\/p>\n<\/li>\n<li>\n<p><strong>Explicit hierarchy and reference context.<\/strong><br \/>\nThe relationship among <code>JournalEntry<\/code>, <code>JournalLine<\/code>, <code>TaxDetail<\/code>, and <code>Account<\/code> remains visible and machine-processable.<\/p>\n<\/li>\n<\/ol>\n<\/div>\n<div class=\"paragraph\">\n<p>For an RDB architect, the key distinction is purpose:<\/p>\n<\/div>\n<table class=\"tableblock frame-all grid-all stretch\">\n<colgroup>\n<col width=\"50%\">\n<col width=\"50%\">\n<\/colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">Operational RDB<\/th>\n<th class=\"tableblock halign-left valign-top\">Structured Tidy Data Table<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Optimized for current transaction processing<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Optimized for exchange, inspection, archival, and analysis<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Several normalized physical tables<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Several semantic classes can coexist in one sparse table<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Relationships are reconstructed through joins<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Hierarchy is carried by occurrence context and explicit references<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Master data may live elsewhere<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Reference information needed for interpretation can travel with the dataset<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Depends on the operational schema and application conventions<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Governed by the shared semantic model<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_why_this_is_also_useful_for_ai\">7. Why this is also useful for AI<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Structured Tidy Data is well suited to AI-assisted analysis because the information needed to understand a transaction can be preserved in one model-governed dataset.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>In a conventional normalized RDB, an AI system may need more than the transaction rows.<br \/>\nIt may also need:<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p>the database schema,<\/p>\n<\/li>\n<li>\n<p>primary- and foreign-key relationships,<\/p>\n<\/li>\n<li>\n<p>historical master data,<\/p>\n<\/li>\n<li>\n<p>code tables,<\/p>\n<\/li>\n<li>\n<p>join rules,<\/p>\n<\/li>\n<li>\n<p>and application-specific knowledge.<\/p>\n<\/li>\n<\/ul>\n<\/div>\n<div class=\"paragraph\">\n<p>An <code>account_id<\/code> such as <code>1100<\/code> has limited meaning by itself.<br \/>\nThe AI also needs to know that, in the relevant historical context, <code>1100<\/code> represented <code>Cash<\/code> and belonged to the <code>Asset<\/code> category.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>A Structured Tidy Data Table reduces that dependency.<br \/>\n<code>JournalEntry<\/code>, <code>JournalLine<\/code>, <code>TaxDetail<\/code>, <code>Account<\/code>, and other relevant classes can coexist in the same dataset.<br \/>\nEach value remains on the row of the class that owns it, while hierarchical occurrence information preserves the relationships among those rows.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>The advantage for AI is therefore not simply that a table is easier to read than a database.<\/p>\n<\/div>\n<div class=\"admonitionblock important\">\n<table>\n<tr>\n<td class=\"icon\">\n<div class=\"title\">Important<\/div>\n<\/td>\n<td class=\"content\">\n<div class=\"paragraph\">\n<p>The more important point is that the semantic context required to interpret the data can travel with the archived dataset.<\/p>\n<\/div>\n<\/td>\n<\/tr>\n<\/table>\n<\/div>\n<div class=\"paragraph\">\n<p>An AI system can inspect the historical transaction without first recreating the exact original operational database and all of its joins.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_the_key_message\">8. The key message<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Structured Tidy Data does not argue against relational databases.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>An operational RDB remains the right tool for real-time transaction processing.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Structured Tidy Data serves a different purpose: it provides a portable, self-contained, model-governed representation for long-term preservation, exchange, validation, analysis, and AI-assisted interpretation.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>For RDB designers, the unfamiliar table shape is not a rejection of normalization.<br \/>\nIt is a way to preserve the benefits of semantic separation while allowing the complete historical business record to travel together.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div id=\"footer\">\n<div id=\"footer-text\">\nLast updated 2026-09-06 08:21:27 +0900\n<\/div>\n<\/div>\n<div id=\"toc\" class=\"toc2\">\n<div id=\"toctitle\">Table of Contents<\/div>\n<ul class=\"sectlevel1\">\n<li><a href=\"#_start_from_the_semantic_object_model\">1. Start from the semantic object model<\/a><\/li>\n<li><a href=\"#_what_an_rdb_designer_normally_does\">2. What an RDB designer normally does<\/a>\n<ul class=\"sectlevel2\">\n<li><a href=\"#_journalentry\">2.1. JournalEntry<\/a><\/li>\n<li><a href=\"#_journalline\">2.2. JournalLine<\/a><\/li>\n<li><a href=\"#_taxdetail\">2.3. TaxDetail<\/a><\/li>\n<li><a href=\"#_account\">2.4. Account<\/a><\/li>\n<\/ul>\n<\/li>\n<li><a href=\"#_historical_archiving_is_a_different_problem\">3. Historical archiving is a different problem<\/a><\/li>\n<li><a href=\"#_why_not_simply_flatten_everything\">4. Why not simply flatten everything?<\/a><\/li>\n<li><a href=\"#_what_is_a_structured_tidy_data_table\">5. What is a Structured Tidy Data Table?<\/a><\/li>\n<li><a href=\"#_why_this_form_matters\">6. Why this form matters<\/a><\/li>\n<li><a href=\"#_why_this_is_also_useful_for_ai\">7. Why this is also useful for AI<\/a><\/li>\n<li><a href=\"#_the_key_message\">8. The key message<\/a><\/li>\n<\/ul>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Views: 0 Why a Single Hierarchical Table Matters to RDB Architects ChatGPT\uff08Editor\uff1aSAMBUICHI, Nobuyuki\uff09 2026-09 [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":17224,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[76],"tags":[],"_links":{"self":[{"href":"https:\/\/www.sambuichi.jp\/index.php?rest_route=\/wp\/v2\/posts\/17220"}],"collection":[{"href":"https:\/\/www.sambuichi.jp\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.sambuichi.jp\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.sambuichi.jp\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.sambuichi.jp\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=17220"}],"version-history":[{"count":2,"href":"https:\/\/www.sambuichi.jp\/index.php?rest_route=\/wp\/v2\/posts\/17220\/revisions"}],"predecessor-version":[{"id":17226,"href":"https:\/\/www.sambuichi.jp\/index.php?rest_route=\/wp\/v2\/posts\/17220\/revisions\/17226"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.sambuichi.jp\/index.php?rest_route=\/wp\/v2\/media\/17224"}],"wp:attachment":[{"href":"https:\/\/www.sambuichi.jp\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=17220"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.sambuichi.jp\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=17220"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.sambuichi.jp\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=17220"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}