Skip to content

Instantly share code, notes, and snippets.

@JerryNixon
Last active November 19, 2021 17:25
Show Gist options
  • Star 4 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save JerryNixon/d7052ef53feef964812bc83c206f107b to your computer and use it in GitHub Desktop.
Save JerryNixon/d7052ef53feef964812bc83c206f107b to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"metadata": {
"kernelspec": {
"name": "SQL",
"display_name": "SQL",
"language": "sql"
},
"language_info": {
"name": "sql",
"version": ""
}
},
"nbformat_minor": 2,
"nbformat": 4,
"cells": [
{
"cell_type": "code",
"source": [
"SET NOCOUNT ON"
],
"metadata": {
"azdata_cell_guid": "36f4777d-f392-4ec1-a82d-1887fd892ff7",
"tags": [
"hide_input"
]
},
"outputs": [
{
"output_type": "display_data",
"data": {
"text/html": "Commands completed successfully."
},
"metadata": {}
}, {
"output_type": "display_data",
"data": {
"text/html": "Total execution time: 00:00:00"
},
"metadata": {}
}
],
"execution_count": 96
},
{
"cell_type": "markdown",
"source": [
"# Create Relational Tables\n",
"\n",
"![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA34AAAHFCAYAAACtuyuLAAAgAElEQVR4Ae2dTZabvBKGvaoMejUZ3NNbybSXkHnmvYxvA9lEdsA9BZQohPixLYRUPD7HMQjQz1Pidb1AO4+OFwQgAAEIQAACEIAABCAAAQi4JvBwPToGBwEIQAACEIAABCAAAQhAAAIdxo9JAAEIQAACEIAABCAAAQhAwDkBjJ/zADM8CEAAAhCAAAQgAAEIQAACGD/mAAQgAAEIQAACEIAABCAAAecEMH7OA8zwIAABCEAAAhCAAAQgAAEIYPyYAxCAAAQgAAEIQAACEIAABJwTwPg5DzDDgwAEIAABCEAAAhCAAAQggPFjDkAAAhCAAAQgAAEIQAACEHBOAOPnPMAMDwIQgAAEIAABCEAAAhCAAMaPOQABCEAAAhCAAAQgAAEIQMA5AYyf8wAzPAhAAAIQgAAEIAABCEAAAhg/5gAEIAABCEAAAhCAAAQgAAHnBDB+zgPM8CAAAQhAAAIQgAAEIAABCGD8mAMQgAAEIAABCEAAAhCAAAScE8D4OQ8ww4MABCAAAQhAAAIQgAAEIIDxYw5AAAIQgAAEIAABCEAAAhBwTgDj5zzADA8CEIAABCAAAQhAAAIQgADGjzkAAQhAAAIQgAAEIAABCEDAOQGMn/MAMzwIQAACEIAABCAAAQhAAAIYP+YABCAAAQhAAAIQgAAEIAAB5wQwfs4DzPAgAAEIQAACEIAABCAAAQhg/JgDEIAABCAAAQhAAAIQgAAEnBPA+DkPMMODAAQgAAEIQAACEIAABCCA8WMOQAACEIAABCAAAQhAAAIQcE4A4+c8wAwPAhCAAAQgAAEIQAACEIAAxo85AAEIQAACEIAABCAAAQhAwDkBjJ/zADM8CEAAAhCAAAQgAAEIQAACGD/mAAQgAAEIQAACEIAABCAAAecEMH7OA8zwIAABCEAAAhCAAAQgAAEIYPyYAxCAAAQgAAEIQAACEIAABJwTwPg5DzDDgwAEIAABCEAAAhCAAAQggPFjDkAAAhCAAAQgAAEIQAACEHBOAOPnPMAMDwIQgAAEIAABCEAAAhCAAMaPOQABCEAAAhCAAAQgAAEIQMA5AYyf8wAzPAhAAAIQgAAEIAABCEAAAhg/5gAEIAABCEAAAhCAAAQgAAHnBDB+zgPM8CAAAQhAAAIQgAAEIAABCGD8mAMQgAAEIAABCEAAAhCAAAScE8D4OQ8ww4MABCAAAQhAAAIQgAAEIIDxYw5AAAIQgAAEIAABCEAAAhBwTgDj5zzADA8CEIAABCAAAQhAAAIQgADGjzkAAQhAAAIQgAAEIAABCEDAOQGMn/MAMzwIQAACEIAABCAAAQhAAAIYP+YABCAAAQhAAAIQgAAEIAAB5wQwfs4DzPAgAAEIQAACEIAABCAAAQhg/JgDEIAABCAAAQhAAAIQgAAEnBPA+DkPMMODAAQgAAEIQAACEIAABCCA8WMOQAACEIAABCAAAQhAAAIQcE4A4+c8wAwPAhCAAAQgAAEIQAACEIAAxo85AAEIQAACEIAABCAAAQhAwDkBjJ/zADM8CEAAAhCAAAQgAAEIQAACGD/mAAQgAAEIQAACEIAABCAAAecEmjd+//vf/zreMPA+B5zrEMODAAQgAIELCXj/DmV85IkyB3h1nQvj9+/fv443DLzOAcQKqYYABCAAgTMJyPeM1+9QxkV+KHOAXGpQEIwfphGxr3wOIFZnpjvUDQEIQAACGD/MkXeDTC416BzGr/Kk3/uJyPj2v2wQK5IyCEAAAhA4kwDGb/+7mHylbUbkUoOCYPwwftzxq3wOIFZnpjvUDQEIQAACGL+2TQ2mdD9+5FKDzmH8Kk/6OZn3T2bvjBCrNpMyiRtvGHifA22enfQ6JiDz1Pt3KeO7dz4lc5wXP+6C0GF8q58DiFWbUk0ide8k4w5JJtrUpjaleo1eoVfeNQu9Gs587vhhfKo3Pt7FaG98z4jV4/Ho7Dv1BU9ZGQIkUiRSe+d269uf0aYyZx2tvEoAvUKvWtejvf6jV4M6YPwwfhi/yufAUbESwzfcxJ8+h7JXUwGOswTUUNsyXdZtljeJFInUXiLS+vaj2qTnCZ/1EkCv0KvW9Wiv/+jVoD8Yv8qT/r2JzHb/Yn1ErAbDMRk+awBl2+/fv3k/wcCmZ2rqtMyu2+V4O4mU/3Pz7vp7RJv0vOCzbgLv6NV/v34MT5r8/MOFZHLKaucAejVo0D2M33+/uh/RI3CSsP38Q2Jy98SlhfGrWKnJSH1aoxcvy/68niNgmaeOVKb6Ge8j5e8kUi3MS/rI94eeJ/H8Z709Aut69V/368f4JwQ/fnX/LYyN2f742f1ZbH//PPnzc2wfY1mtqWrh+wC9GnSp+YxwXawGsQmCcbbxC+byHOFr4aSij+9/waUYyhwfDEb6jl7K6Nn91Zyk6qZsGTORRv2CUHapNG5rm+wv2+G75AsTP0z0PEmdH5S1RWA9lzLGLmn8/nVn3/ELeZw1fuRcfL88eZEBvRo0ybXxC2Ikpi8WrD8/s97xm9rC+JHY5U3sVKwGozGYv7Xl2ATKuhoUHvc89rirSOOc+TKBU6b6Ge8h5euJVN75wfkGz6vmgJ4n8fxnvT0C63q1b/zOnn8p40fOhe49O+/Qq0GXHBu/P91PvcsXm77ZVYJpvx+//gtXUILQ2GP//ByeY9d6+8dFjSia8pnRTBxn2/r3z9QhV7Ts/mP7k8glTKyMxx6zMLp2jL8GLjqu+DgegQ1z4FlROWt/K1ZiKPRtTd1gQNJ3BNWESD28jzGwadvEexTNMQayFm+zZcL6rDlBvSQ9NcwBq032nEkt67min6l9KLuOwLpemfxE84ZZDvWvW+ZL5pg4p0k9DhrnIVE7of7+jp+p23wfbuZcs/rM8XHfxv028624r+RMzXzPPaNX152J57fs1/iZk3P7b/msKdowfqY+/eKSz59/jIgkRCgIlt2my72ISQKzUse4348f4x9O63HyGY41j1nY7bIcxG4aY+i7bFsdE0lVDUmV9iEWK4mhvPRTZWJYn5u/eB/dl8/nCQjLNZ66zW5fT6TqOb9CgmP0ROcdn/XEqdZYxNq0dlYN5wXatMbnjHLVpFTduu2YXpn8JOQU83Mj5DlhuzkmzktmucmR/MUYy16nVuoe2w6aFrd7sG+b+RY5UzMmL6WZR/Uqdc54KnNr/OzJn8P4TfWlH+VMbg/PoK8ZtR/dr/9EQK2Qaf3WrCX2UxEzbUzjnI4dyqb1yQxawdU252KeOnEoK8/oGbGyX+j2S92TaLUyli3jFxKlSw1XSnfKz280pV3mR7Rp0KG56dNH0mUbj6AfewR9j5Pqon4HpNbjbbKPlq3rldEJzTueueMX7vCZerTsUP4SG7/hfNnLudbzoUQ//pkc6bGebyXbjFigZ/Xq2RG90vPG86db42cffZwEIDUhpxPePn4ZEjMVusSVHltvUhDCMSokY/sLsTNCFBLBVJkRwI1+qZDL5zCm9BgtIz3GjgkBS82X8mWIVZsSvJ5ImfM4nO/l55Wc30G3Lu4HWnNN/N/lrtqk3x+pTzV5qU/Zn1ceAhKLNZ5arp9xi1K+rlcmF9G8IzI7i3zJXsw22hL0Ro1fyJGmP2GQvuhbc7JQ/1Zd0qdD9ZnxhPpSZUanddyJ+smZ2tEu1at4/t9tvXnVXRUrY67sY5HLL7q0KQpCoyd8L3TTvrEwLQRtJkKVGr+dMS1ZtXOCe+o7YtWmLK9q0z+TUITEg3PL0zl7l7HIHJfvwpSpS5Xp96ZuG47tmn58rIZYi0JOsUjrpbJOb936FWJjimb50KRZy3zJHGM0bpEnJYyUzhH5rM74kTM1fa6SSw1nv1/jZ684yRUkIz4i1CJAw5UaY+aCqKXKJpGbPZo5HjMJmjF5K+ZzuW9KJFNlJmHUvpo21q88TeNRIV1+WZn2tO5e5Oy4WV5yO58JYrWWqtRdLnFbmy8hUQq6ZM4/KZslRPoottknOkdDfbZ8VsdwFT0+/5PHyXlvdEUTsZm+xHXbduX4eDs/gLA6F9bmSAvlqk2DqRgM4Nqymj37Oezb8bjn7/ce9xQllFgoz1gZtVw/U9vX9Wpdd3SOLnXEHBM0zjxhoHf8jM7M9CXKPUL9ybrSOdd6fam+pcoS+dasX+aYWP9m+52fI2gc+NxmrXoVz/+7rTs2fjIBJsMjghe/VRiCqCT20b+Jm8zavJ6QSMWJzigEm3UHETMCslmWFqLVNoIYTRxCf+1jXtG47T4IybaQlOCDWLUpy+uJlDmPU+d7dD72uqXnctAZk+wYndNzd1UTpO7QpumH1r+hC6qXa1qoWpkyfTIGPb7EOUMbZXTLapP9fhVzJ+vyGj4HU2hNn+4jdfB+n4GqpMYhtR5v0/hI+bpemfwk0qaF3gQdMccYvZm0Qy9mGQ2K6g56svaERNDCMScb217Vvs2+pfsb6hqPnfq/kgdi+Kq+wGX1Ss+PO346N37Dl1/6ZJ2EJzaIImZHTngVPU0ywjEiYEFkjlz9TolOqsyIpK1/LVkL+xw3fvGYdGx8lkmkUpwRqzaleT2RMudxSIrM+a5Xw2dPLaheJc7lkACN+5ir6NbkTTo4mcagWQmtmGnYf7+6X3/mdwInIzf1ScqmdrTP1507qfOJsnzxiLVpMHlq9qbzdiifmz/dd9qLpZwEhO8aY91mt6/rldWmtOFZ6og5JmjcujZMmmHqD5qU0sthDod2o5xru75U31Jlpt2xL6l6yZny6cnZ2hzrVc7zraW6bmH8zp5M1N/Oid9irBCrliR16ut6ImUSipAUpROPKdGYTFRIdsZkJKxrXcEITgavn/fGEKppC8dqkrV2rF7JDttNgmau1PdJUGIfba/F848+r+v7M9pkzYY1HNMZw9KVBLb0inNg/RyATTtsntGrK8/Fs9vG+GlCw2fVt+jvLK6I1dkyeE79W4lUMFxq1uzdvVC2coU8GCsxdvO7bf15MttuvpRLGb9eS6d+acLPlXETCyffN2jTOdpxRa1benXn71/G7ke30KtBWTB+Tr6AESc/4hTHErG6Ig16v82tROot42f+pu/nz5/D3y7rHTvRM2Pwnn7U0x4b1bn+qOfWuWfuZNr60F0XF9rQpvd1opYatvQq/k5ifUvz2Fbr/ECvBrVxZfzkPzitdcLRL8TwyByQ01L2s3MZsaolNXquH1uJ1HvGz94JHB65jO+mhfrNY5h6582awbCfMWWhLDpWH9dc265/Ezg9njp/HDTu45HzgX3q1k206TlNqHlvq1f2+4dzsO5zkPik4yPnmrCxcxm9GhTIpfHLKa4ycXhBoCQBxKok7fPasolU/OUczFN4rNPcGQtl1uBNf+PX12XvzD2iv+XTu2nhkc/JgKl50/6Efhjj12/bOTZp7sY6UtswfenkROPQ6ieJ1Hn6Ubpmq1eaLOfsg8xxXhAoSUDmnM5lWUavBvoYv51ZiFjtAGJzdgKIVXakl1RoEymJKW8YeJsDJFKXSMspjVq90mQ5Z0My93lBoCQBmXM6l2UZvRroY/x2ZiFitQOIzdkJIFbZkV5SoU2kJKa8YeBtDpBIXSItpzRq9UqT5ZwNydznBYGSBGTO6VyWZfRqoI/x25mFiNUOIDZnJ4BYZUd6SYU2kZKY8oaBtzlAInWJtJzSqNUrTZZzNiRznxcEShKQOadzWZbRq4E+xm9nFiJWO4DYnJ0AYpUd6SUVphIpiS1vGLQ4B+QkQpsukZIijab0KmfDMnd4QaAkAfQqTdu18Xvny1VxIVZKgs9SBBCrUqTPbYdE6ly+1F6eANpUnnmpFrf0ilyqVBRoJycB9CpNE+O3cgVeccnE2X59d5+Pz+47uZNs++i+/iY3UgiBJAHEKomlucKtRCrHYPa1KUcr1AGBiQDaNLHwtrSlVxL3V9/KaV+vtnIpreXFz79f3cfLudhWv8jxXoxIkcPQqzTmWxu/8P9amf+vSsVNcb0nVoiCcuTzOAHE6jirmvfcSqRy9Htfm3K0Qh0QmAigTRMLb0tbeiVx33qfn0tdSRvjdyX9d9pGr9L0bmv8RKi6bvmWcpks+rLLWjb/RBTmPFh7lwBi9S7BOo7fSqRy9HBfm3K0Qh0QmAigTRMLb0tbeiVxX3uXyaWupE2OdyX9d9pGr9L0MH7d8J8bqwl82/j1jxQMdX58ffGoZ3reUbpBALHagNPQpq1EKscwZJ7wgkBJAmhTSdpl29rSK4n72tsav3jZapRdTo/MGixZ/ui+vj47qVPeH/3fzPztvj4e3af925rvz+7x8dX1f1Fj8i85ZtpvrC/82c1Qj9Yd9psdr3/CY/vVdZ3ZhxwvHclaSmXO8auey2hg/KK7fiIEVqDs8hKflFhRkOVJbP5+fXSPl58rT7dGqX8CiJWPGL+aSEn8t95KZ1+bdE8+IZCHANqUh2ONtbyqV5Iz6YVz+5kjl3qoIxNzp7+lIMtaLhnYp+Zc8/xrMGj6GwuyTZcH0zcYSRsJu09f8Wg2pdyaQG1PPCA5niVY2zJ6lY7IbY2fTIhYsFSobEJll9MIjSjIlSC98tTvHAlJugJKITAjgFjNcDS78moiJfHfeiuQp7RJDwqfaFNAwcJhAmjTYVTN7fiOXmXPpfoL6mrUBKXVK5NzSbnmXP2dODVoA/65KRzrS+zX723u5Ml4+ndvME175HhNzWv0Kh2uWxs/mRQqWPIp6/pWXLK+/UIUtvmw9VkCMud4POFZavXt/24iFZKPMQl5S5sWeGwitdhIAQSSBNCmJBYXhe/olcyLrLnUzOgJ3rleyZ02uWOnn30AEobueeM3N45DYMnxWp3g6FU6chg/85iCNX+KSybO9suIQi9OPAawzYutewQQqz1CbWx/NZHSBMo+NiXLqk86+ue0SY/Sz3kipaV8QmCLANq0Raftba/qlcwJeVvdUq2yGmWX06TiXGrtjt/4d3Yfn93nhzVqcvyUfw2Peup2q3dbj3rq3xLaHsb9mtrgUU/Lqb5lmXNcRF/GBeM3Gj8rVFag7PISn5RYURieC5e65M0f/qaJUbpNALHa5tPK1lcTKdEONX3xstUju5xmEmmTeZQJbUoTo3SbANq0zaflra/qlcwJeatWyaeWyae+7LKWzT+tXsnyhvHrxh9nMX/r19dlNG7++wqp+sbHORdmcSof/pbQ9oscbx6zutdkzmH8ljHC+EVJlgqWotoXK92TTwjkIYBY5eF4dS2vJlKaQKn5009NqHRc+9pkExZZ5kq1suPzNQJo02vcWjjqVb2SOSFvq1uqVVaj7HILPOhj+wRkzmH8lnHE+L19x28JlRIIvEMAsXqHXj3HvpNI2STKPuZpkye7nB61MX78KEEaEaVPEUCbnsLV1M7v6JXMC9Usa/qsRtnlpsDQ2WYJoFfp0N3e+Klgyad9Ky4p4wWBkgRkznGVqiTxc9q6PpHC+J0T2fvWijb5jf27eiVzIzZ9Nn+yy34pMrKaCKBX6Whg/CLDJxPFCpRdTiOkFAJ5CSBWeXleVdu7iZReQc9yx48fnrpqGrhqF21yFc7ZYN7VK5kbqbc2Itt4QaAkAfQqTdu18UsP+blSxOo5Xuz9PgHE6n2GNdTwbiKlxi++iq5j29cmc8dPDur/E2R+eEr58fk8AbTpeWatHLGlVznGsK9XOVqhDghMBNCriYVdwvhZGollxCoBhaJTCSBWp+ItVvlWIiUx3nur8Xv9jl+xodLQTQigTX4DvaVXOUYtc4cXBEoSQK/StDF+aS6hFLEKKFgoRACxKgT65Ga2EimJ8d5bjd/rd/xOHiDV344A2uQ35Ft6lWPUMnd4QaAkAfQqTdul8dtLqNi+n3TC6BpGcpoiVmmxaq10K5E6en7Fpk+O05dd1jI+IXAmAbTpTLrX1p3Sq6M6xX7X5AtwX+cuZxN6ldYUl8YvPdTXSmXi8IJASQKIVUna57WVSqS0tXe+sG0duswnBEoQQJtKUL6mjS29ytEjcqkcFKnjGQLoVZoWxi/NJZQiVgEFC4UIIFaFQJ/cDInUyYCpvjgBtKk48mINolfFUNNQIQLoVRo0xi/NJZRi/AIKFgoRQKwKgT65GRKpkwFTfXECaFNx5MUaRK+KoaahQgTQqzRojF+aSyjF+AUULBQigFgVAn1yMyRSJwOm+uIE0KbiyIs1iF4VQ01DhQigV2nQGL80l1CK8QsoWChEALEqBPrkZlKJlMSWNwxanANyuqBNJ4vGhdWn9Cpnd2Tu8IJASQLoVZo2xi/NJZQiVgEFC4UIIFaFQJ/cDInUyYCpvjgBtKk48mINbumVxP3Vtw5AjucFgZIE0Ks0bYxfmkso3Rer7+7z8egen9/hmGFByj+6r79RMasQ2CGAWO0AamTzViKVYwj72pSjFeqAwEQAbZpYeFva0iuJ+6tv5bSvV2MuJflU/86VP+XOxaS+zy7O+IZx5m5L6fH5CgH0Kk0N45fmEkqPidVH9/Hx6ObeDwEIEFl4igBi9RSuanfeSqRydHpfm3K0Qh0QmAigTRMLb0tbeiVx33oPRk0N2/Cp+ysnWd9+zXOmv18f3ePjq3v/2vm83u0+pLbGx8s6xi9FqrYymXO/f/8Oc1fmOK+uw/jtzILDYvX91X3MRCoWi52G2AyBkQBi5WMqbCVSOUa4r005WqEOCEwE0KaJhbelLb2SuK+9xfQNqeT8U8qtRtnlNLs4Z4rX00ftl75bT3y8rGP89rlfv4fMOYzfMg4YvyWTWckzYvX9+eg+wrOdc7GQbeGqWLg1OO4jpnF8vEE29Ve6xvWpvk42hP0eq8Iz6z4rDRJArBoMWqLLW4lUYveni/a16ekqOQACmwTQpk08TW/c0iuJ+9rbGr942WqUXU6DmudMXWfXh+XPz48u5D6zfCh64sps+/j6Mn92Y+uUXsTrf7uvjylX+/yW7dP68Cc9UmaM32pb6VFSWo6AzDmM35I3xm/JZFbynFhZEbHLtkpbLsuP6XGG78/eHAaz16+rwNjjRK8+jcm09bPcOgHEqvUIDv3fSqRyjHBfm3K0Qh0QmAigTRMLb0tbeiVxX3tbs2fv/Em51Si7nGY3z3Hmj3oOuVLIjXrDZsxeb770bwKHffX6+nAh3W7TZemFbXMwfVMb2ku7jx5j87KpH/O29Hg+ryIgcw7jt6SP8VsymZU8K1ZiyKarQkZgRlMnYvgIP/qSEhRzjBUlc1VpqCP1gzKzrrPSKAHEqtHARd3eSqSiXV9aPaZN5mr1wz6R8FKTHHRzAmiT3wmwpVcS9613bP7U9FmNsstpioNhC/mNvatmcyE5uM+H1HwNtclTVb3Zk22rf3azkXMl6hxrNncMpUTqGNvebGs4mn+vIyBzDuO35I/xWzKZlRwTK2vWhqtGwyMCY/lMUGS77r8hQn0vzPZZHbMusuKMAGLlI6BbiVSOET6vTaInRy4YGd3J0VHqcEMAbXITysVAtvRK4r73VvNnTZ/VKLu8aLwv2NKdaFsiH8L4paneuVTmHMZvOQMwfksms5KXxKoXJXNnT+726RWoftsLxq+/ysQV+1lwnK4gVj4Cu5VI5Rjh69o0v1K+7EuUZC13oOSmBNAmv4Hf0iuJ+95bjZ887mnNnxJ7Sa/04PiO35gP6eOc8zuAol9rj1/qhfmx4v5JLM3HeNQz4HaygF6lA4nxS3MJpa+K1fxZ70FQRAwfH5/d5yt3/KRHwVCOj28F1QvdZcEBAcTKQRC7rttKpHKM8DVtmic+yx+dGpKmXqvs3cGZ9uwZxxyjo44aCaBNNUYlT5+29ErivvdW42dNn9Uou5zu8dYFp8S2mSapeRtrNn9aM/9xl+H3ESZ9+0w8xjk9Hq8pVtDJvkD6YjRwq630QCktREDmHHf8lrAxfksms5J9sZrtzgoE3iaAWL2NsIoKthKpHB3c16ZEstTNjd/UD7uvXZY9onV+WGrCdrMltMlvwLf0SuK+91bj9/odP79sGdk1BNCrNHeMX5pLKJWJwwsCJQkgViVpn9fWViKVo9V9bYoMW9+oGD9zddxcrV790anZlXWeNsgRu1brQJtajdx+v7f0SuK+91bj9/odv/0+sgcEniGAXqVpYfzSXEKpTBxeEChJALEqSfu8trYSqRyt7mtTwvj1Js78Il14ZMkawug4e0yOjlNHswTQpmZDt9vxLb2SuB95x6bPapRd3u0MO0AgAwGZczzquQSJ8VsymZUgVjMcrBQggFgVgFygia1EKkfz+9oUGbj4BxHkbt/hH53ih6VyxKz1OtCm1iO43v8tvZK4v/rWFvf1SvfkEwJ5CKBXaY4YvzSXUIpYBRQsFCKAWBUCfXIzW4lUjqb3tUmM3/RDBdOjnNr68Pd+cpV+/qNTXTf/MQN+WEqJ3f0TbfI7A67XK79sGdk1BNCrNHeMX5pLKN1PrsKuLEAgCwHEKgvGyyshkbo8BHQgMwG0KTPQiqpDryoKBl3JQgC9SmPE+KW5hFKMX0DBQiECiFUh0Cc3QyJ1MmCqL04AbSqOvFiD6FUx1DRUiAB6lQaN8UtzCaUYv4CChUIEEKtCoE9uhkTqZMBUX5wA2lQcebEG0atiqGmoEAH0Kg3apfGTYPOGQYtzQE5TxCotVq2Vkki1FjH6u0cAbdoj1O72lF61+B1Kn8n9ZA7IC71K65FL45ce6mulOoFeO5qjIPA8AcTqeWY1HpFKpHL2E23KSZO6jhBAm45QanMf9KrNuNHrdQLoVZoNxi/NJZSSXAUULBQigFgVAn1yMyRSJwOm+uIE0KbiyIs1iF4VQ01DhQigV2nQGL80l1CK8QsoWChEALEqBPrkZkikTgZM9cUJoE3FkRdrEL0qhpqGChFAr9KgMX5pLqEU4xdQsFCIAGJVCPTJzaQSKYktbxi0OAfkdEGbThaNC6tP6VXO7sjc4QWBkgTQqzRtjF+aSyhFrAIKFgoRQKwKgT65GRKpkwFTfXECaFNx5MUaRK+KoaahQgTQqzRojKAJyD0AACAASURBVF+aSyjF+AUULBQigFgVAn1yMyRSJwOm+uIE0KbiyIs1iF4VQ01DhQigV2nQGL80l1C6b/y+u8/Ho3uY98fX33B8+wsyvo8uOaS/X93H2rYwcDn+s/sO63Zho267282WESsfASeR8hFHRjERQJsmFt6W6tGrv93Xh8mpPr46TxmVt3lT83jQq3R0MH5pLqH0mPGzxmg0gp9pqxMqbmbhXXOG8Xs21IjVs8Tq3L+eRKpOPvSqPQJoU3sxO9rjKvSqv5j86Gbp09+v7uuldOrd3OUoOfarlQB6lY4Mxi/NJZQ+b/y6ruvFa+0uV6i6kYV3xRPj92ygEatnidW5fxWJVJ1o6FWjBNCmRgN3oNvX69Vwp29m+g70e32Xd3OX9ZrZ0gYB9CodJ4xfmksofcn4dZGAjVexhsdB1RCOovQtj0sOjzWI4P39+giPjc4eGZ3VsbwipnV8fH2ZRzOHNj4/pc6h3e9P8whFUNhlX6a2D2wLz2HMH9EYqpfjdcxqioc+zPsakN9+AbHyMQWuT6R8cGQU9RBAm+qJRe6eXK5XRy6Yr+ZBce4heUcq18lNjfpqJoBepaOD8UtzCaXvG7/ROKk5+v7sBlM1CpM+v/792Ru+YLj6dTVMw77Bp/Xip4+XzrcNxnG+LdQZRiULtl9RXxL1P2b9tP3StgbhXbYlddv9J9M67+usc7deQax8hP/yRCpgnCdF4VwO21tZsFoS99nqWbyN9VwE0KZcJOur53K9krxD84wkniFPSeZBki+FDXowmqAk7vqJXqUjj/FLcwmlrxu/0RBFV6j6u369QMWitLHe16Hmaeia3Lnrq1mIpa3HLo9DGg3mcPdRTdtyv1D/zCBKHXZfs5zo49jTyfht9nXsHx/8X1lO5sDliZRw7M/L6WJLj7bZv5kRvZnr4DRVjBZNhSxlJkAilRloRdVdrlerOcQIKbE95Cmjzs0vPKMJFU2vS7qCXqWxY/zSXELpS8bPCpRdDrXKQixKG+uJOmaCN7tKZuuxy5oEauIkdwHWjN9wh2C4gBbVMeu32Zbo4zBc2WdsU/ZZ7esMzq1XECsf4b88kYofOX8bqznf367rlQqMliwOv7pviw65LECbXIa1H1T1epXIMUIeNIZF/1Qmnbv4jR0jSxNAr9JcMH5pLqH0eeMnCYi9wj6sz69ESfVxorK1HtU5E8D5tvnjk1GdcrdPjVdfhzV+j/ER1NggRnXM+m238ahnmDRvLiBWbwKs5PDLE6mZTqSg2PNXttv1+eOhn9+yLfE3M30bU/mQcJm6XvobZr04NfRn+htlWddtqlP8vXAqsmeVoU1nkb2+3sv1ShCMTyRNOjKc58Oveg4aFLat6JvkQEO+NehH8r+iuh43PShAAL1KQ8b4pbmE0mPGb0p8Hqn/1y5KjoZn0WNR2lmf1aGGbeymeXxz/oMpcZ0mmfv47D6jO35DgjWMJYjrLBmU9myddlm3TSyGOmQfk6yt9jUgv/0CYuVjClyeSIlm6IWeJNLU+Ttqi5ynkwiMR6f2Nxe5eo1SbZJ9H9OFpvG8DxfA+nXVhaje6O+gwzG99thjprbnF7ySg6UwAwG0KQPESqu4XK+UyyzXMRoi22fbVGsmwzj/AT3xkWM+stAybYxPzwTQq3R0MX5pLqF03/iFXetY6IVRk6OjXYoSr6OHsd8pBBCrU7AWr/TyRGpXC+Lz3qyPCdZkugSf2S6rifqnR6+ifeNj7frY1pC02UQtVceobXLMzNTG+xYP9y0aRJv8hvlyvfKLlpFdRAC9SoPH+KW5hNLWjF9/hWuWEIWhbCyQNG3AKb4JsSqO/JQGr0+k7N/qpoYYn/fx+vTfy0x3781V9qzGL3WxKu6PrGP8UpEsVYY2lSJdvp3r9ar8mGnRNwH0Kh1fjF+aSyit3/iZxzf7v8FJJVBhOCsLcYK1shvFRQggVkUwn95IFYnU+Ijl7Emn8KuekTHs9zXGbiS0/jczohvT45bzO4CxpmytD/XM7y5K46ljVN+GY3RcPOp5+nTuG0CbynC+opUq9OqKgdOmWwLoVTq0GL80l1Bav/ELXWXBCQHEykcgq0mk4kcp7RMBozEc/puZz+5T/0bZlutdtv5PaeyjmPq4p/5drzWNKdO2sT3uY+/oUnWo8Zv/Xc/8b5t9zJ8aR4E21RiVPH2qRq/yDIdaIMB/jbUyBzB+K2C0GOOnJPgsRYDkqhTpc9shkTqXL7WXJ4A2lWdeqkX0qhRp2ilFAL1Kk8b4pbmEUoxfQMFCIQKIVSHQJzdDInUyYKovTgBtKo68WIPoVTHUNFSIAHqVBu3O+KWHSSkE2iLw+/fv/jEFES75QubVHgESqfZiRo+3CZBIbfNpeWusVy2Phb5DQAmQSymJ6dOd8ZMvJt4waHUO6KmJWCmJdj/jRErmZM5X7vpy9o26fBKQOYc2+YxtSq9a/R6l3+SAepaiV0pi+nRn/KahsQSBdgkgVu3GTnueSqR0W45PjF8OitTxDAGM3zO02to31qu2ek9vIZAmQC615ILxWzKhBAKXE0CsLg/B2x2IE6ncRi13fW8PmArcE8D4+Q1xrFd+R8rI7kSAXGoZbYzfkgklELicAGJ1eQje7kCcSOU2arnre3vAVOCeAMbPb4hjvfI7UkZ2JwLkUstoY/yWTCiBwOUEEKvLQ/B2B+JEKrdRy13f2wOmAvcEMH5+Qxzrld+RMrI7ESCXWkYb47dkQgkELieAWF0egrc7ECdSkjTzhkGrc0BOCIzf27JQbQWxXlXbUToGgScIkEstYWH8lkwogcDlBBCry0PwdgfiREqS5pyv3PXl7Bt1+SSA8fMZVxlVrFd+R8rI7kSAXGoZbYzfkgklELicAGJ1eQje7kCcSOU2arnre3vAVOCeAMbPb4hjvfI7UkZ2JwLkUstoY/yWTCiBwOUEEKvLQ/B2B+JEKrdRy13f2wOmAvcEMH5+Qxzrld+RMrI7ESCXWkYb47dkQgkELieAWF0egrc7ECdSuY1a7vreHjAVuCeA8fMb4liv/I6Ukd2JALnUMtoYvyUTSiBwOQHE6vIQvN2BOJHKbdRy1/f2gKnAPQGMn98Qx3rld6SM7E4EyKWW0cb4LZlQAoHLCSBWl4fg7Q7EiVRuo5a7vrcHTAXuCWD8/IY41iu/I2VkdyJALrWMNsZvyYQSCFxOALG6PARvdyBOpHIbtb36vj8f3eOxfH98/X17bF333X0+ProsVWXoDVWUIYDxK8P5ilZivbqiD7QJgdwEyKWWRDF+SyaUQOByAojV5SF4uwNxIrVn1J5t8Hh9z5i0o/se3e/ZUbF/zQQwfjVH572+xXr1Xm0cDYE6CJBLLeOA8VsyoQQClxNArC4PwdsdiBOp40btWNPH63vGpB3d9+h+x8bCXm0QwPi1EadXehnr1St1cAwEaiNALrWMCMZvyYQSCFxOALG6PARvdyBOpI4btWNNH68vYdL+fnUf5jHQz29pU/Yzj4YOhd3skdGxjEc9j8XI214YP28RncYT69W0hSUItEuAXGoZO4zfkgklELicAGJ1eQje7kCcSB03aseaPl5fbPwGgxc8XG8C9e/14n1tX+w2u2z3YdkzAYyf3+jGeuV3pIzsTgTIpZbRxvgtmVACgcsJIFaXh+DtDsSJ1HGjdqzp4/VFJq03ep9df5NvbEru6k13/dQEho3mR2J0W1TnsS6zV+MEMH6NB3Cj+7FebezKJgg0Q4BcahkqjN+SCSUQuJwAYnV5CN7uQJxIHTdqx5o+Xl9k0p4xfrN9/3ZfHxi/Y9HxuRfGz2dcZVSxXvkdKSO7EwFyqWW03Rk/CTJvGHiYA5JkyVu+kHm1RyBOpI4btWNjPV5fZPzGv+WbP+qpdwCjfb8/u8fHV9f/BxCHHwk91n/2ao+AzDkSqfbidqTHsV55+A5lDOSC6NXy7Hdl/ORLiTcMvM0BjN9SuFooiRMpmZc5X8fri8ycdKI3cfpDLnoXb+hd+DGX3hnKXb5xv4/P7pM7fjlD2FxdMudIpJoL26EOW73y9h3KeMgLZQ6QSw1SgPHDLGKWK58DiNWhvKW6nWwipclyzk7KFxkvCJQkIHNO5zKJVEny57dl9UpiyxsG3uYAudSgIy6MnwSTNww8z4Hzv/ZpITcBmY/6xanJcs42pG5eEChJQOaczmVZljnOywcBz9+fjI38UOeAj7P1vVE0b/zeG/5w9OMBhhwcqQMCEJgIyBcNxm/iwVL7BDB+7cfwihGQY11BnTYhkCZwa8cjYqSCZJfTqCiFAAQgcJwAxu84K/ZsgwDGr4041dJLm1fZ5Vr6Rz8gcEcCtzd+NuhqAm0ZyxCAAAReIYDxe4Uax9RMAONXc3Tq61ucU8Xr9fWYHkHAP4HbGr81AVor9z8VGCEEIJCTAMYvJ03qqoEAxq+GKLTRh7Vcaq28jVHRSwi0TwDjF8UQUYqAsAoBCLxEIDZ+L1XCQRCojAA/7lJZQCrtzloutVZe6TDoFgTcEcD4RSFFlCIgrEIAAi8RiI2f3C3hDYNW54CeBBg/JcHnFoG1XGqtfKsutkEAAvkI3Nb4CcJYgOL1fJipCQIQuBuB2PjdbfyM1ycBjJ/PuJ4xqjinitfPaJM6IQCBbQK3N34qRPKpy9vI2AoBCEBgnwDGb58Re7RHAOPXXsyu6rHNq+zyVf2hXQhAoOtubfxkAqgYYfo4HSAAgZwEMH45aVJXLQQwfrVEoo1+kGO1ESd6eR8CtzZ+sdmL1+8zDRgpBCCQmwDGLzdR6quBAMavhii00Yc4p4rX2xgFvYSALwIYPxNPRMnAYBECEHiLAMbvLXwcXCkBjF+lgamwW3FOFa9X2GW6BAH3BG5r/NYEaK3c/UxggBCAQFYCGL+sOKmsEgIYv0oCUXk31nKptfLKh0P3IOCGAMYvCiWiFAFhFQIQeIkAxu8lbBxUOQGMX+UBqqR7a7nUWnkl3aYbEHBP4LbGTyIbC1C87j76DBACEDiNAMbvNLRUfCEBjN+F8BtrOs6p4vXGhkN3IeCCAMbPhBFRMjBYhAAE3iKA8XsLHwdXSgDjV2lgKuxWnFPF6xV2mS5BwD2BWxs/ia4Ikb7dR5sBQgACxQhg/IqhpqGCBDB+BWE7aErzK0yfg2AyBBcEbm/8JDnTt4uIMggIQKAKAhi/KsJAJzITwPhlBuq8Os2v5JMXBCBwPYFbGz/5ArMvhMnSYBkCEHiHAMbvHXocWysBjF+tkamvX+RY9cWEHkEA49d13b9//zoRKIwfJwQEIJCLAMYvF0nqqYkAxq+maNTdFzV+5Fh1x4ne3YsAxg/jd68Zz2ghUIgAxq8QaJopSgDjVxR3041h/JoOH513SgDjh/FzOrUZFgSuJYDxu5Y/rZ9DAON3DlePtWL8PEaVMbVOAOOH8Wt9DtN/CFRJAONXZVjo1JsEMH5vArzR4Ri/GwWboTZDAOOH8WtmstJRCLREAOPXUrTo61ECGL+jpNgP48ccgEB9BDB+GL/6ZiU9goADAhg/B0FkCAsCGL8FEgpWCGD8VsBQDIELCWD8MH4XTj+ahoBfAhg/v7G988gwfneO/nNjx/g9x4u9IVCCAMYP41dintEGBG5HAON3u5DfYsAYv1uEOcsgMX5ZMFIJBLISwPhh/LJOKCqDAAQGArHxkySINww8zAH5f9nkLXOcFwTWCGD81shQDoHrCGD8MH7XzT5ahoBjAtb4aaLM52AY4OCDA8bPsYBlGBrGLwNEqoBAZgIYP4xf5ilFdRCAgBDA+PkwN5jU9Thi/NC6LQIYvy06bIPANQQwfhi/a2YerULAOQFJinnDwPsccH4aM7w3CGD83oDHoRA4iQDGD+N30tSiWghAAAIQgAAE7koA43fXyDPumglg/DB+Nc9P+gYBCEAAAhCAQIMEMH4NBo0uuyeA8cP4uZ/kDBACEIAABCAAgbIEMH5ledMaBI4QwPhh/I7ME/aBAAQgAAEIQAAChwlg/A6jYkcIFCOA8cP4FZtsNAQBCEAAAhCAwD0IYPzuEWdG2RYBjB/Gr60ZS28hAAEIQAACEKieAMav+hDRwRsSwPhh/G447RkyBCAAAQhAAAJnEsD4nUmXuiHwGgGMH8bvtZnDURCAAAQgAAEIQGCFAMZvBQzFELiQAMYP43fh9KNpCEAAAhCAAAQ8EsD4eYwqY2qdAMYP49f6HKb/EIAABCAAAQhURgDjV1lA6A4Euq7D+GH8OBEgAAEIQAACEIBAVgIYv6w4qQwCWQhg/DB+WSYSlUAAAhCAAAQgAAElgPFTEnxCoB4CGD+MXz2zkZ5AAAIQgAAEIOCCAMbPRRgZhDMCGD+Mn7MpzXAgAAEIQAACELiaAMbv6gjQPgSWBDB+GL/lrKAEAhCAAAQgAAEIvEEA4/cGPA6FwEkEMH4Yv5OmFtVCAAIQgAAEIHBXAhi/u0aecddMAOOH8at5ftI3CEAAAhCAAAQaJIDxazBodNk9AYwfxs/9JGeAEIAABCAAAQiUJYDxK8ub1iBwhADGD+N3ZJ6wDwQgAAEIQAACEDhMAON3GBU7QqAYAYwfxq/YZKMhCEAAAhCAAATuQQDjd484M8q2CGD8MH5tzVh6CwEIQAACEIBA9QQwftWHiA7ekADGD+N3w2nPkCEAAQhAAAIQOJMAxu9MutQNgdcIYPwwfq/NHI6CAAQgAAEIQAACKwQwfitgKIbAhQQwfhi/C6cfTUMAAhCAAAQg4JEAxs9jVBlT6wQwfhi/1ucw/YcABCAAAQhAoDICGL/KAkJ3INB1HcYP48eJAAEIQAACEIAABLISwPhlxUllEMhCAOOH8csykagEAhCAAAQgAAEIKAGMn5LgEwL1EMD4YfzqmY30BAIQgAAEIAABFwQwfi7CyCCcEcD4YfycTWmGAwEIQAACEIDA1QQwfldHgPYhsCSA8cP4LWcFJRCAAAQgAAEIQOANAhi/N+BxKAROIoDxw/idNLWoFgIQgAAEIACBuxLA+N018oy7ZgIYP4xfzfOTvkEAAhCAAAQg0CABjF+DQaPL7glg/DB+7ic5A4QABCAAAQhAoCwBjF9Z3rQGgSMEMH4YvyPzhH0gAAEIQAACEIDAYQIYv8Oo2BECxQhg/DB+xSYbDUEAAhCAAAQgcA8CGL97xJlRtkUA44fxa2vG0lsIQAACEIAABKongPGrPkR08IYEMH4YvxtOe4YMAQhAAAIQgMCZBDB+Z9Klbgi8RgDjh/F7beZwFAQgAAEIQAACEFghgPFbAUMxBC4kgPHD+F04/WgaAhCAAAQgAAGPBDB+HqPKmFongPHD+LU+h+k/BCAAAQhAAAKVEcD4VRYQugOBruswfhg/TgQIQAACEIAABCCQlQDGLytOKoNAFgIYP4xflolEJRCAAAQgAAEIQEAJYPyUBJ8QqIcAxg/jV89spCcQgAAEIAABCLgggPFzEUYG4YwAxg/j52xKMxwIQAACEIAABK4mgPG7OgK0D4ElAYwfxm85KyiBAAQgAAEIQAACbxDA+L0Bj0MhcBIBjB/G76SpRbUQgAAEIAABCNyVAMbvrpFn3DUTwPhh/Gqen/QNAhCAAAQgAIEGCWD8GgwaXXZPAOOH8XM/yRkgBCAAAQhAAAJlCWD8yvKmNQgcIYDxw/gdmSfsAwEIQAACEIAABA4TwPgdRsWOEChGAOOH8Ss22WgIAhCAAAQgAIF7EMD43SPOjLItAhg/jF9bM5beQgACEIAABCBQPQGMX/UhooM3JIDxw/jdcNozZAhAAAIQgAAEziSA8TuTLnVD4DUCGD+M32szh6MgAAEIQAACEIDACgGM3woYiiFwIQGMH8bvwulH0xCAAAQgAAEIeCSA8fMYVcbUOgGMH8av9TlM/yEAAQhAAAIQqIwAxq+ygNAdCHRdh/HD+HEiQAACEIAABCAAgawEMH5ZcVIZBLIQwPhh/LJMJCqBAAQgAAEIQAACSgDjpyT4hEA9BDB+GL96ZiM9gQAEIAABCEDABQGMn4swMghnBDB+GD9nU5rhQAACEIAABCBwNQGM39URoH0ILAlg/DB+y1lBCQQgAAEIQAACEHiDAMbvDXgcCoGTCGD8MH4nTS2qhQAEIAABCEDgrgQwfneNPOOumQDGD+NX8/ykbxCAAAQgAAEINEgA49dg0OiyewIYP4yf+0nOACEAAQhAAAIQKEsA41eWN61B4AgBjB/G78g8YR8IQAACEIAABCBwmADG7zAqdoRAMQIYP4xfsclGQxCAAAQgAAEI3IMAxu8ecWaUbRHA+GH82pqx9BYCEIAABCAAgeoJYPyqDxEdvCEBjB/G74bTniFDAAIQgAAEIHAmAYzfmXSpGwKvEcD4YfxemzkcBQEIQAACEIAABFYIYPxWwFAMgQsJYPwwfhdOP5qGAAQgAAEIQMAjAYyfx6gyptYJYPwwfq3PYfoPAQhAAAIQgEBlBDB+lQWE7kCg6zqMH8aPEwECEIAABCAAAQhkJYDxy4qTyiCQhQDGD+OXZSJRCQQgAAEIQAACEFACGD8lwScE6iGA8cP41TMb6QkEIAABCEAAAi4IYPxchJFBOCOA8cP4OZvSDAcCEIAABCAAgasJYPyujgDtQ2BJAOOH8VvOCkogAAEIQAACEIDAGwQwfm/A41AInEQA44fxO2lqUS0EIAABCEAAAnclgPG7a+QZd80EMH4Yv5rnJ32DAAQgAAEIQKBBAhi/BoNGl90TwPhh/NxPcgYIAQhAAAIQgEBZAhi/srxpDQJHCGD8MH5H5gn7QAACEIAABCAAgcMEMH6HUbEjBIoRwPhh/IpNNhqCAAQgAAEIQOAeBDB+94gzo2yLAMbPxOt///ufWWMRAhCAAAQgAAEIQOAVAmr89FhyLCXBJwSuI3Br4yfYRYj0fV0YaBkCEIAABCAAAQj4IqD5FabPV1wZTbsEbm38Ho9HF7/bDSU9hwAEIAABCEAAAnUQiPMrWecFAQhcS+C2Z+EgQDL8+RthunZC0joEIAABCEAAAm0TIMdqO3703i+BWxq/WJDS636DzsggAAEIQAACEIDAGQTSOdV0kX3YfkbL1AkBCOwRuL3xEwHSt979Q5T2pg3bIQABCEAAAhCAwJLAkEMNRk/zq7hseRQlEIBACQIYP4xfiXlGGxCAAAQgAAEI3IBAbPLU/HFx/QbBZ4jVE7i98RMhsiI1rVcfOzoIAQhAAAIQgAAEqiKQzqmGO4DkWFWFis7ckMAtjZ/EORYmrkTdcPYzZAhAAAIQgAAEshMgx8qOlAohkIXAbY2f0IuFaVjPwpVKIAABCEAAAhCAwG0JkGPdNvQMvGICtzZ+EhcVJkxfxbOUrkEAAhCAAAQg0BwBcqzmQkaHnRPA+PX/oahg0L/1cx5xhgcBCEAAAhCAAAQKEFDjR45VADZNQOAAAYxfZPy483dg1rALBCAAAQhAAAIQ2CEQGz9yrB1gbIbAyQQwfqPxEzFCkE6ebVQPAQhAAAIQgMBtCKjxI8e6TcgZaOUEMH7mjh+PIlQ+W+keBCAAAQhAAALNEFDjxy+nNxMyOuqcAMbPGD/u+Dmf7QwPAhCAAAQgAIFiBKzxI8cqhp2GILBKAONnHvVcpcQGCEAAAhCAAAQgAIGnCKjxw/Q9hY2dIXAagVsZv//9739d6i2ClCqnLM0LLnVzOU0tqBgCEIAABCCwQmAtNyDHqjtnWIsb5em4rUz/ZopvZ/z+/fvX8YaB1zkgQs0LAhCAAAQgUJqAfP94/W5lXOSNMgc85FgYP4wgQu1oDngQpdLJCu1BAAIQgMD7BDB+mCPvBtlDjoXxc5T0ez/hGN/+l4oHUXo//aAGCEAAAhAoTQDjt/8dTR7TNiMPORbGD+PHHT9Hc8CDKJVOVmgPAhCAAATeJ4Dxa9vUYEr34+chx8L4OUr6OWn3T1rvjDyI0vvpR3s1SNx4w8D7HGjvzKTHzxCQ+ev9O5bx3TvPkjne+gvjh/FDqB3NAQ+i1LqovtJ/EqZ7JxN3SCbRpleUoa1j0DF0zLuWedAxjJ+jpN/7Ccf49r9UnhEl+Ylt+24rxfDVWxKm/bnN+d82o2e0ydfZfZ/RoGNtn6No7H78POgYxg/jxx0/R3PgqCiJ4eu6+Xsou0+ScuZI1VCn2tBtljcJ0/4XLklJ24yOalPqnKGsDQLoWNvnKBq7Hz8POobxc5T0X3vS/tf9+jHeQfr5Z9NM/vfrx3CnaWe/a8ezLwA19u+IKA2GY2761ASqGfn9+3fH+zgDTcvU1KXW422yj5aRMLV5vtWoAbX26Yg26XnDZ5sEatWxkHM8fnZ/yPk287Na9aOWfnnQMYzfKAJ/fs4fe9OETD5//PqPE2VXLI8aP7MfIpx9Xqko2fkbL6vJS33KvlpHm6nHNb0WZsIu9dJy/Yz3Uea1fLHRD0zoGXMAXYnPfH/rEuO1ubOeY51vxjB+aNravHy23IOOpTMVf3rUj+g1UVJDeL44PTsB69rfGLqdO3lBhHf2q2t8bQinzPHBYKTv6MVmT/a1+6sJkRMG/sdiLqwm7mnxHBint0mpbIf3Md5wapOTh4Rp/QxmixB4Pcf60f3677x5HXKOMy42//er+9F/j5Ij3kGbPegYxi++4/fjV/dfuLtlzIyc2LNt54lUmyePYYWhuyyJV1GKzZwaPluuZfZTtmsdPOp57FFPTXgGtssEUMv1M95Dmbd53qODxO3YHFBdiec/634ISIzXzodwx8/kUZMhO/fJqqmd/ObszLrXWFJ+THPO4ORBxzB+m8ZPJpcxNI/oqtSfn/2Veknc+rcRtNlxYoTsvuN+k2CsmEp7zNhG6rHTIKijOf2jf0MXrm796X6G438Ny2MfZscmx2GP/a+b9TnUH3GKxzvb718X2pzx+tf9C1fO9C7ro/v5ZzzBEyzCtmDUrxODMwTmlTqtKIV5Of6Qi6zLa/hM3xHUfaQe3scZaOqmzFPr8TaNy0QRkwAAIABJREFUhZQL61fizTGc863MAatNen7wWS8B1Sv9PNLTLR1Lf+9P+cWjv2A8rf/4Nc9V+nmeyAPez4mmP+VJ93EtN7G54ZSzhBsEib6Ss7Sv1x50DOO3a/z+zUybnrhzA5Q46WeG0WxXA/Zj/IETNVvyae6UBQGy23X56H7BcE1iqiKu4rTaTmhjOvZHqs/BvK2I4Fafw7H/IkM58ep5JwRUxqGxaCXxKdHPWJSEk7z0U7+8h/W5+Yv30X35fJ6AsFzjqdvs9q2EqcS8oY0hIZl0Pc+dgVBf0NP2E59X50pKm/RcSJ1hW9tS+1OWj8CgTdvfD6pf+imtb+lYyDVWvvcHAzflGxr/3VxFtNacX6EdzT1mn3peT+1Y4xiOXelj6FOff6zkPHIsOYvbC5mxjuU768rVhPF7xfiZO1OT+ZiEZCizorAUm0e4e2j2U7Ex9VtBC0mEHpvcz9SXMn7axtpdsiBYqT5r2dyorY831ZfUHb+JnYp8n1z896v79ce2NbX/avLh/bhnRMl+idkv73LyQ0tKYD1hsufQdEGkj51JdrzP61LjmzQ2h9bY2OWor23TqNqkuqNzXz5tmV2Ot8k6j6AfewT9VU7C3z7+b5eHbVO8dF8tX9cx870/M2KjpoW8ZD0XGP6Obm7ypvN1fBrrhZxo2/it90dyE9GlqQ/TOZ4qK6VhtHOuTqqOWf1qbRnjd8D4TSfxeJcpmKMoERsFbRAS86UfErRUmRFEFb9Qf/RoqRG13myt7Df1V4VoEi8rcr1AhDrisWjbK8fGfbF3OMN406K4uKoW+qBtRidu2D71cTLc0b5rhvYm5R5EqTURzdHf9YTJaEYqYTLnGl/472vBUjsP1hn0UDV3OC7UR5zC3w6rSYjPGylf2yb7yjb0LaaWf32IwZ75G7bbfTU+azoUvvdjHZudGyv5RsgBohwhnHdxbjbfL5yHiYvhNicKfdzLxUw+sax7/pSYcJE3OctBLTVs1+bSleUeNAjjN06yxQkfJp9NvMYv9SBCkxHRk1s+mzF+dhyrQrcixLHgnmn8+lhM/VDWVrCvFIKa2vYgSvlTmfprPGT8QoKU0KSgVz6+XK86p5JJ3AG2rx531TivaFfmuGj31mtru2xTfbui/3doU2IzxGAydnbd3v1LLcu+a5zWcyyrWdP3/Oz7PeQqc0Nnfxcgx8XwRR/X2jWasH7uT2MRLvKejcnUscaMcjs36lhWDdrSsdq3batw7b1/sn/ryVXirlt/UtoEy5y0C9OTmpDm2FTCFsoSbZv6Nx/1DKJk+vbPio1efZ7KrPAEwVLT98/0RR8nTdaX2i813oN3/Ox4TV9E1PVxikkATTt2X0S0/8L1IEpPntYudl/XJjPfU5oRrmCPGmQ0oU82UueIPd9SV6PjOhYJS9Qnu//YXtAWqX/Wh3eOPTLGjfpjVjO9G/q5/GEsq3XmQl8Yk2lvZGm5LxJJ1SnLLJkUmnol7rP9VddXeFR6d0G1SfikXj23lW2yv2zXOl59jJHjth8TVc4pU6dlGqfU57qOmfMonDupvCmdq1iDlzsnmvRpajuUWa20/Ta5yaR1kSnVc91eFLd1hO0pDpRNOV9dLFSDUhrWSllagVvp/ZP9PCRK9svbLpukSyZk+EK3+8hyOLGjL+7+JE+VmbrCsaYsrl/WQ19Mfan9QqIzCZo1fvNkYrwiFX7ARUVsOjYl9Mm+hP4dNH4bPOUq3iSsJvFaJKN1icNVouVBlJ48rV3svq5N5hwP55U5J0PZ+nkyadL6PvoY0qquPaE7yR+BCv0040lo1vax6/2fxrhd/7TfjsYG7dzYrx/TSnujlgeeubVd65sZwkkfNZ5X6VCqXdUm/R6xJ64ts8uyT7wu9fA+j4HwVpMXfw7bbOTmy+s6Zs4jnbtJ4zNp2yxX2cgR+vlxUF8eR85r0SXTx3AOR3oVzrH4HPzxq5suIE3npPQzHlPqPKGs7lxOdWw+89taw/iN4rN2ck8/wrKcjElDEgTDJAQpUQplG4IYC0rySq5pZ0zOpn7pleGDYip9Cm0ujd+PX3+6Xz+MkJkxLP77ipHrsi/Pj3eqY2obAV3OR/nC8CBKbUlont6uJ0zR+T1LPvT8nv/ceEhIzN36oWzSAZvYhDvr9uq2Oben8081wfZJ+2DqDk8LmP1SuhiSsIPHmv6tj9G0GepPlJm6khevwrGJ8yxopI7dGtKpTM7H8L2i40+2a4/fYrwcxxSbebs1Jo+xNvUJ+zifU2eRbk9to+xcAsL+WdMnPVrXscS58KTx6+d0OPemXGDSAj1X7XkyXChPnydWdwZTtjhftY877YbjZD6vGD9yFo1P25+xjp17Jp5TO8ZPT2xHn0GENNl4a2yTOCJc9QuWB1E6R+rqrnU9YYqSmGD81CCMczKRmGjiLJ/9uRv2iY5VfVjbbszKkGSZPgWDmCpLJXup/VJliWND/6akbzFG+1hV6Js1VqNBCnXNWSQTxLBv3O50bPK4lPELdU3H9gntIcZb45j6tkyE69AttKluDYp7Z88tWT7yWtexOuZgjRdE6FNbc8ODjh07m4+c8Q3s41GU/vycX+mdEpBcjxVg/FoSZg+i1ICUZO/iujYtTVG4sGPvSgVDMRkAm7hh/PT/TX3S+FmueiEtlE3mbdLduR6HWG0c+5bx6037pNEa8xov0qFN2WWjugrXdayt5L6l73z6WnZuedAxjJ9e7W70MyQW4U6AJn7zBOR1cZiSihqTidfHVVYsSvXTgyhVl80U6NB6wrQ0fv/MI5zhMcXFHaPE/Db7ZHvUM9xVS/UzcdcueUfu4LGm/+t3tdJ1LYxZMG/2Atmkdfq3QOE4NW72Ll54pNXeiZvMoJzzQZ/1eDOGELvZ/wWmxx8cx+x7yxyj7c22J+ZEwe1oUwEhubiJdR27du6V+v6lHf9x9qBjtzV+8utenKT+T1LPMZbveBmfncseROni3OWS5tcTJpPMB5Nljcb0/0MFkxFfBDImYG0fNVJr2/s7SaH9VJ9SZQnj847xs0ZqdYzpfgQDF+6Smv3iuvr1+M6gXlB7dNMP0KhJS/y/XSPzwPNADPYZ27gP/ZvGNfVP6qnxIh3adIm0FG3U6pj9XvL8PczY/OaRcvJ4zLFub/xyqqJMEF4QKEnAoyiV5FdLWzZhmicSxqAE4yVftKY8eefJGAFjOvq6zd0ufTRQjd+h7bbt0CfTn1CW3/hJ/5JmJ4wx3Y/pGPskhNlXzN7PP6buab9g3sZ9lj+ANSQ+s/02jN/rjO3Y141fjaZPxozxq0VtzuuH1TE1fjlbk3nECwIlCcic07nsRccwfhlnEKKUESZVHSLgUZQODdzZTjZhkpjyhoG3OYDxcyZaieFYHdNkObHby0VyTvCCQEkCMud0LsuyBx3D+GWcQYhSRphUdYiAR1E6NHBnO9mESWLKGwbe5oCHhMmZ7GQfjtUxTZZzNiLnBC8IlCQgc07nsix70DGMX8YZhChlhElVhwh4FKVDA3e2k02YJKa8YeBtDnhImJzJTvbhWB3TZDlnI3JO8IJASQIy53Quy7IHHcP4ZZxBiFJGmFR1iIBHUTo0cGc7pRImiS1vGLQ4B+T0RJucidSB4aR07MBhh3eROcULAiUJeNQxjN84g975ctVJiCgpCT5LEfAoSqXY1dQOCVNN0aAvOQigTTkotlXHlo6RY7UVS3o7EPCoYxi/cXaXEaXv7vPx2X0nzyjZ9tF9/U1upBACSQIeRSk5UOeFWwlTjqHLPOEFgZIE0KaStOtoa0vHyLHqiBG9eI6ARx3D+I1zYE+U9GfP7aceo9NI1rdfGL9tPmx9loBHUXqWgYf9txKmHOPb16YcrVAHBCYCaNPE4i5LWzom82HrbXMrXdb9lZ+sb7/Isbb5sPVZAjLn+Bu/Z6lVtP+roiQi1HXLt5RbIbLL6WEjSmkulL5KwKMovcqi5eO2tCnHuPa1KUcr1AGBiQDaNLG4y9KWjsl8WHuTY91lhrQ3To86xh2/cR6uCZKUW1GKl2W7vuyyls0/I+P396v7kP8U+PHoPr6+eNRzDou1AwRkznm7GnVg2O522UqYcgx2X5tytEIdEJgIoE0Ti7ssbemYzIe1d5xX6YV2KbfaZZfTTMmx0lwofZWAzDlvORbGb5wNa4Ik5VaUVJDk8z1REoF6dJ/jH/z9/froHvyN36vn5m2P8yhKdwzmVsKUg4fME14QKEkAbSpJu462tnRM5sPamxyrjvjRiyUBjzqG8RvjvCZIWh4Lk5o+2a4vu6xl809zNUru9n18ddNvucg2ftxlzou1PQIy57xdjdobs8ftWwlTjvEe06bhYpZoW76LULl1zWjoAkzuthYNUPAEAbTpCVhOdt3SMZkPW29yLCeTwNkwPOoYxm+cpFuCpNtUmKzpk236sstaNv80SQvGb46GtZcIyJzD+L2ErqqDthKmHB09pk3Thaf+CYTZhalXe/GuGYuPNxq66FK872IHCgoSQJsKwq6kqS0dk/mw9ybHqiSQdCMQ8KhjGL8xvHuCJNtVlOxjnlKuL7usZfNPm7TIMo96zvmw9iwBmXMYv2ep1bf/VsKUo7fHtGkyfl2Xy0S9W098vKzzX+LkmBNn14E2nU24vvq3dEzmw96bHKu+mN69Rx51DOM3zuo9QZLtKkryaffXE0PKtl9R0vL92dcp9fHjLtvk2JomIHMO45dm01LpVsKUYxzHtGnN+A3m6/NT/g55NF3mh6lEv/Rvlfu+mm1zXUuZONvm3+7rY3rc9PNb9p/WH30jkYautpWDGnW8QwBteodem8du6ZjMh703OVabcffca486hvEbZ+yeIMl2FaXX7/h5Pj0Y2xUEPIrSFRyvbnMrYcrRN5kn26+5KZs/6jkYsI8v/YvkYT2Yvd58qYGbb5v/aNW8jfldxcH0TW1ob1PH6B2/rbb0eD6vIoA2XUX+una3dEzmw96bHOu62NFymoBHHcP4jbHeEyTZrqIkn3Z/nS5SxgsCJQnInOOOX0ni57S1lTDlaHFfmwYTJdo2vNVcSeuR+eqNnt3edd+f410/2Tb720B7rF2O6k3UOYw7dYy567jaVg5q1PEOAbTpHXrXHztpwaAJR3q0pWMyH/be0mZ8Yd1ql10+0h/2gcC7BGTOecuxMH7jrNgTJN0uwqTL+qkTS9Z5QaAkAZlz3kSpJL9a2tpKmHL0cV+bYoNlW422JUwaxs/yYlkI7GmTNRYpYro9tY2ycwmoARMTpu+hbGpX1/VTtmzpmMyHI2+pL95PW5VyXhAoSUDmnLccC+M3zqBYaJ5Z10mIKCkJPksR8ChKpdjV1M5WwpSjn/vaFJm7WaPxNlk3f9c3M4LzbfNHPYfHOcMjov3fOOsjojzqOUPuYGVNmySxt2ZBhmrL7HK8TdYlCeN9HoMhNpPhU+Ond+JsTHTf4TOP8ZN5E7+lTXnt69i4Ix8QyERgTccyVX9JNRi/jNgRpYwwqeoQAY+idGjgznZqy/h1XdebPX0sVM3bGJStH60y2x6fn9H/XTqYRk381SDK3cS+LPXjLqa++Q/JOJsgDQ5nTZvUJMRD0rjH5bou2+U84XUugSE+aeM3mb9hu91X4yNxt7HP2VuplxcEShKwc1mWPWgQxi/jDEKUMsKkqkMEPIrSoYE72+l64+cMKMO5nEBKmwajsN61re1qLORoqZt3fgbCdojBZOzsur37l1qWfTUu+njcerSf3yJ184JASQIy53QuyzLGryT9DG2RXGWASBVVEfAoSlUBLtQZtKkQaJopRmBNmwYjseyGlK9tk71lmyZdPOp5zqOeyjll6rRM45T6RMeW85qStgms6VjLo7r9HT8JKm8YtDgHRHg8ilLLgvpq30mYXiXHcbUSWNMmNQy237bMLss+8bqcK7zPYyC81eTFn8M2G7n5ckrHWvxupc/khDIH5LWmY/OZ39ba7Y1fznDpRMlZJ3VBYIuAR1HaGq/XbamEKedY0aacNKnrCIE9bVJDt2YmdPuRttgnL4EhJnMDuBYn2zI6Zmmw7IHAno61OEaMX8aokVxlhElVhwh4FKVDA3e2EwmTs4AyHJdXyu8UVjXe+nlk7OjYEUrs0xIBjzkWxi/jDMT4ZYRJVYcIeBSlQwN3thMJk7OAMhyM3w3nADp2w6A7H7LHHAvjl3HSYvwywqSqQwQ8itKhgTvbiYTJWUAZDsbvhnMAHbth0J0P2WOOhfHLOGkxfhlhUtUhAh5F6dDAne2USpgktrxh0OIckNMTbXImUgeGk9KxA4cd3kXmFC8IlCTgUccwfhlnEKKUESZVHSLgUZQODdzZTiRMzgLKcDB+N5wD6NgNg+58yB5zLIxfxkm7b/y+u0/5v4o+v6NWpfyj+/obFbMKgR0CHkVpZ8guN5MwuQzrrQeFNt0v/NfrGDnW/WbduSP2qGMYv4xz5pjx++g+Ph7d3Pth/DKG4VZVeRSlWwVwHOz1CdMdqTPmMwmgTWfSrbPu63VsyKXIseqcHy32yqOOYfwyzsSjxu/r+6v7+Pjqpht8GL+MYbhVVR5F6VYBHAd7fcJ0R+qM+UwCaNOZdOus+3odG3Mpcqw6J0iDvfKoYxi/jBPxsPH723Xfn4/uIzzbOTd+sk3/75zpsVAjaPK46GO4a/j36yPsO9XXdd3fr+5j3O/x+Ozih0szDpuqLiTgUZQuxHlZ09cnTJcNnYadEkCbnAZ2Y1jX69iUS5FjbQSKTYcJeNQxjN/h8O/v+Izx67pJoObLtp14n0f30DuF35+94Qtmr19Xg2eP68RlGpNp62e5dQIeRan1mLzS/+sTpld6zTEQWCeANq2z8brleh2zuc/asqUf70OOZemw7PPXiTF+GWf2c8ZvMGTDHT0rPmN5uFunP/oS7TMzjjIIs312t2+8ezj/o8KMo6aqKwmQXF1JP1/bdSRM5kmD8YmCfCNsoSajoUe722utavTRg+L9pF29aJfa9m79cZ1l1tGmMpxraqUOHTPni1wQ73Of6NweL5wPT1bp/tE+NqfqIZvt5Fg1TbtT++JRxzB+GafM08av+9t99T/0EguKJgGy/VVR0joyDpCqqiPgUZSqg1ygQ1UmTKtmpACQS5owOrza/pF9Vg9e2SB1run1Ge2tdCNzMdqUGWgD1VWnY+RYDcyaurvoUccwfhnn3PPGz/4t3mjw5EqUPs45u5ocJwBb67LN/g1hxkFSVVUEPIpSVYALdaa+hCnWl0IgLm3myJiP7PPsIKROjN+z1Ni/PgL16Rg5Vn2zpK0eecyxMH4Z5+BLxq/XJfmBFr2zN9wF7B9B+PjsPl+54ydjih9F4FHPjJGupyqPolQP3XI9qS5hshegBMNMT6xJMXplHw+d7W//+5rROMmv7u3+SNUz+671cazja/ibaNHV8HfR0bg+vr5m/5/q8ke2pC7zOGzqEbK9cSf7IfUapqaOuE/lZuT7LaFN7zNsrYbqdGwEOPwIHjlWa/Ophv561DGMX8aZtW/8MjZGVRDofP7h8R0DW0fCFJsajcRonvT/nwk/FjWYvpmR6g8ZDFK41tQbGU26RvOkTzWMf2sT6ujX1QQ9u6+2YX/QaqxDO5OoXzfNk0Mdu3xKHVq3XU5tMyY3NW5tbNGP+Zh1t/U+2f7VuewxYaqTdD29ul7H6mFBT3wQ8KhjGL+McxPjlxEmVR0i4FGUDg3c2U7XJ0zG0PSGRY1IfCfN/FhUvJ/GJFEud88GM2Pa6fffWt/aJgeb7X2bxrjKnbm+QbNP3J4cowY03tZXP90lnJ7I2KnP3rnr/eeRcUudI++9PvX9bOMftKmNOOXs5fU6lnM01AUBnxfXMX4ZZzbGLyNMqjpEgOTqEKbqd7o+YZobGrnTFO7CJYxcD/SJ8jLGz5jVEPH5uBZmcc34zcZ28Ee2ZscMHTg2boxfCBcLTRO4XseaxkfnKyTgMcfC+GWcaBi/jDCp6hABj6J0aODOdro+YdowSP2dtehv43r+zzzqqaZsqx2p1G63y/G2eF32TfVxq47hmORjlfIopprC3tC9+qjnkXFLP+x+epdQ/rTS/v13D72Zf9CmZkKVraPX61i2oVARBHoCHnUM45dxcmP8MsKkqkMEPIrSoYE72+n6hCk2SKPpmJkf8yiluqXRFA7/H9ZkWOY/BqOmSYIWt7O1vrUtUVdv0OI+7tTR/63dcMz8h1TMj9bMfmSr68KPvqQeJZ314ei4pY9q/PrnQzvlOe9TW5MebWorXjl6e72O5RgFdUBgIuBRxzB+U3zfXsL4vY2QCp4k4FGUnkTgYncSJhdhZBCGANpkYNxkER27SaBvNEyPOobxyziBMX4ZYVLVIQIeRenQwJ3tRMLkLKAMp0Ob7jcJ0LH7xdz7iD3q2K2Nn/cJy/juQeD37999kiUCJV+8vNojQMLUXszo8TYBjwnT9ojZio4xB7wR8KhjtzZ+ElDeMGh1DqjAYvyURLufJEztxo6epwl4TJjSI6VUCaR0rNXvV/pNbijz2qOO3dr4qVjxCYGWCWD8Wo7e0PdUwpRzVPLlxQsCJQl4TJhK8muxLXSsxajR5y0CHnUM47cVcbZBoAECGL8GgrTTRRKmHUBsbo6Ax4SpuSAU7jA6Vhg4zZ1OwKOOYfxOnzY0AIFzCWD8zuVbonYSphKUaaMkAY8JU0l+LbaFjrUYNfq8RcCjjmH8tiLONgg0QADj10CQdrpIwrQDiM3NEfCYMDUXhMIdRscKA6e50wl41DGM3+nThgYgcC4BjN+5fEvUnkqY5AuHNwxanANyznhMmEpoQcttpHQs53hkTvGCQEkCHnUM41dyBtEWBE4ggPE7AWrhKkmYCgOnudMJeEyYTofWeAPoWOMBpPsLAh51DOO3CDMFEGiLAMavrXilekvClKJCWcsEPCZMLcejRN/r0bG/3dfHo3s8xvfHV/e3BADacEfAo45h/NxNUwZ0NwIYv/YjXk/C1D5LRlAHAY8JUx1k6+1FFTr296v7eDy6z2/D6e9X92XXzabtxe/u8/HRfeEatzE53upRxzB+jicsQ7sHAYxf+3GuImFqHyMjqIiAx4SpIrxVduV6HRvu9M1M31ukMH5v4XNwsEcdw/g5mJgM4d4EMH7tx//6hKl9hoygLgIeE6a6CNfXm8t1rL/b99lt3twb7wjqY6CTSZw/Hvr5LabPPC467VgfeHp0GgGPOobxO226UDEEyhDA+JXhfGYrlydMZw6Oum9JwGPCdMtAPjHoy3VMTN3m3/MNZi54uN4Ejo9yfn92j7BBB80dPyVx10+POobxu+tsZtxuCGD82g/l5QlTF13dfjy6D1d/2LKRwNnkb3UqyfFrdxI26l6tz/8GjwmT/6i9N8LLdaw/l9fO067rEtu/P8e/B+y3xbrHuf3ejGj/aI86hvFrf14ygpsTwPi1PwEuT5h642d/xEASnkfiCnirrN9N4OT4tYTy3bpbZbrdb48J0/aI2Xq9ju38jd+W8RvD9/fro/810OHmH+f23We1Rx3D+N19VjP+5glg/JoPYXd9wpRIcBJJUrukE+N7ajByPMbvGWQeE6Znxn/Hfa/Xsa7r5JHN1V/1lPPY/OLnisaJ+RueeHhXN+44C3yN2aOOYfx8zVFGc0MCGL/2g359wpRKcKKr5+OjUMOPIqgJGo/7Hn5CXRMuvWou67NHRmd1mARMQmi2fXx9mZ9RH9r4/JQr8UO78njW0A97V3LZl6ntA9vCT7bHP/IgnZPjdcxbfW1/LuYagceEKRcbr/Vcr2MjWaMlvU7Yv/ubbTNPOYyGcdCV6VwPWrP4+z+vUWRcloBHHcP42QizDIEGCWD8Ggxa1OXrE6bRGAXzIx20xi/a/v1prog/uocmVmPyFAxXv65JlNRhzF6fgGniNd82GMf5tlDnjJ3t11BH6Eui/rBt0S9taxjzsi2pOz2OeV9nnbv1iseE6dYBPTD463XsQCfZBQJPEPCoYxi/JyYAu0KgRgIYvxqj8lyfrk+YrIHSvosJGg3R7Cr5eLetvwIeH7ex3teh5mloY/bDCmoe+022Hrs89m12dV5N23K/UH/ybxgTxyX6OPZ0Mn6yz2pfx/7x0XlMmAjrNoHrdWy7f2yFwLMEPOrYrY2fJMy8YeBhDog4yVu+eHm1R+D6hGlpmma/gLdpiNRACfe4HrOeqCMYs00zZeqQJmb1GHO6aHvjjuVsX1P/rG47j2Sf0bRu9tUec+9ljwnTvSO6P/rrdWy/j+wBgWcIeNSx2xo/TZT5HAwDHHxwwPg9I+n17Ht9wmTMT49F1s1jmb1Riv5eL+x30PiNdYQ/lZmZrHl788cno77J3T6949bXoe0PdYTHNBf1637ScVunXeZRz1xnhceEKRcbr/Vcr2NeyTKuqwh41DGM33inBOPjw/jcPY4Yv6u+Ht5r9/qEaTBN4QdTHtYkjWPrjVT8oyrWNMl+O+uzOqI2zOObqR93mf5bwcGcDT/a8Nl96uOoY9vDj8AM/Qwmc7NfqT5P4xzqkH3MY6qrfX1vHng62mPC5Ck+Z4zleh07Y1TUeWcCHnXsdsZPhIk3DDzPgTuLdKtjJ2GKIje7WxdtW12NDdzqjmwoQMBjwlQAW9NNoGNNh4/OJwh41LFbGb9ETCmCAAQgcDkBEqZ5CPqfUNfHOeebNtYwfhtwim/ymDAVh9hYg7GONdZ9uguBJAFvP6CH8UuGmUIIQAAC5QjECZMkzTlfuevL2behLvP45kMeszSPVR5uDON3GFWBHTF+BSBX1kRKx2Qe8IZBi3NATy+Mn5LgEwIQgAAEshBIJUxZKh4rkS9dXhAoSUDmnLeEqSS/FtuKdazFMdBnCMQEvOkYd/ziCLMOAQhAoDCBOGHKbdRy11cYD801SADj12DQ3uxyrGNvVsfhEKiCAMavijDQCQhAAAJ+CMQJU26jlrs+P+QZyVkEMH5nka233ljH6u0pPYPAcQLLwvTyAAAGtklEQVQYv+Os2BMCEIAABA4QIGE6AIldmiPgLWFqLgCFO4yOFQZOc0UIeNMxHvUsMm1oBAIQgMA6gThhkrslvGHQ6hzQme4tYdJx8ZkmEOtYei9KIdAWAW86hvFra/7RWwhAwCEBEiaHQWVI/LjLzeYAOnazgN9kuBi/mwSaYUIAAhAoRYCEqRRp2ilJwFvCVJJdi22hYy1GjT7vEfCmY9zx24s42yEAAQicTICE6WTAVH8JAW8J0yUQG2oUHWsoWHT1MAFvOobxOxx6doQABCBwDgESpnO4Uuu1BLwlTNfSrL91dKz+GNHD5wl40zGM3/NzgCMgAAEIZCVAwpQVJ5VVQsBbwlQJ1mq7gY5VGxo69gYBbzqG8XtjMnAoBCAAgRwESJhyUKSO2gh4S5hq41tbf9Cx2iJCf3IQ8KZjGL8cs4I6IAABCLxBgITpDXgcWi0BbwlTtaAr6Rg6Vkkg6EZWAt50DOOXdXpQGQQgAIHnCZAwPc+MI+on4C1hqp/4tT1Ex67lT+vnEPCmYxi/c+YJtUIAAhA4TICE6TAqdmyIgLeEqSH0l3QVHbsEO42eTMCbjmH8Tp4wVA8BCEBgjwAJ0x4htrdIwFvC1GIMSvYZHStJm7ZKEfCmYxi/UjOHdiAAAQisECBhWgFDcdMEvCVMTQejQOfRsQKQaaI4AW86hvErPoVoEAIQgMCcAAnTnAdrPgh4S5h8ROW8UaBj57Gl5usIeNMxjN91c4mWIQABCPQESJiYCB4JeEuYPMYo55jQsZw0qasWAt50DONXy8yiHxCAwG0JkDDdNvSuB+4tYXIdrAyDi3VM4s8bBh7mwL9//zp5yxxv/YXxaz2C9B8CEGieQJwwNT8gBgCBruuTfk8JE0HdJmB1TOPO52AY4OCDA8ZvWwPYCgEIQAACBwjYhEmujvKCgAcCMpc14fWQMHmIyZljsDqmcefTh+EhjtzxO1M7qBsCEIDArQjYhAnjd6vQux4sxs91eBeDEx3jDQPvc2Ax8Rsr4FHPxgJGdyEAAX8EMH7+YsqIeNSTOQABCECgNgIYv9oiQn8gAIHbEYiNn9wp4Q0DD3NAHxGTOc4LAhCAAASuJYDxu5Y/rUMAAhDoH4/SBJlP/ibG4xzA+CF0EIAABK4ngPG7Pgb0AAIQuDkBe8fPY9LPmDCzGL+bixzDhwAEqiCA8asiDHQCAhC4MwFJinnDwPscuPM5ztghAAEI1EAA41dDFOgDBCAAAQhAAAIQgAAEIACBEwlg/E6ES9UQgAAEIAABCEAAAhCAAARqIIDxqyEK9AECEIAABCAAAQhAAAIQgMCJBDB+J8KlaghAAAIQgAAEIAABCEAAAjUQwPjVEAX6AAEIQAACEIAABCAAAQhA4EQCGL8T4VI1BCAAAQhAAAIQgAAEIACBGghg/GqIAn2AAAQgAAEIQAACEIAABCBwIgGM34lwqRoCEIAABCAAAQhAAAIQgEANBDB+NUSBPkAAAhCAAAQgAAEIQAACEDiRAMbvRLhUDQEIQAACEIAABCAAAQhAoAYCGL8aokAfIAABCEAAAhCAAAQgAAEInEgA43ciXKqGAAQgAAEIQAACEIAABCBQAwGMXw1RoA8QgAAEIAABCEAAAhCAAAROJIDxOxEuVUMAAhCAAAQgAAEIQAACEKiBAMavhijQBwhAAAIQgAAEIAABCEAAAicSwPidCJeqIQABCEAAAhCAAAQgAAEI1EAA41dDFOgDBCAAAQhAAAIQgAAEIACBEwlg/E6ES9UQgAAEIAABCEAAAhCAAARqIIDxqyEK9AECEIAABCAAAQhAAAIQgMCJBDB+J8KlaghAAAIQgAAEIAABCEAAAjUQwPjVEAX6AAEIQAACEIAABCAAAQhA4EQCGL8T4VI1BCAAAQhAAAIQgAAEIACBGghg/GqIAn2AAAQgAAEIQAACEIAABCBwIgGM34lwqRoCEIAABCAAAQhAAAIQgEANBDB+NUSBPkAAAhCAAAQgAAEIQAACEDiRAMbvRLhUDQEIQAACEIAABCAAAQhAoAYCGL8aokAfIAABCEAAAhCAAAQgAAEInEgA43ciXKqGAAQgAAEIQAACEIAABCBQAwGMXw1RoA8QgAAEIAABCEAAAhCAAAROJIDxOxEuVUMAAhCAAAQgAAEIQAACEKiBAMavhijQBwhAAAIQgAAEIAABCEAAAicSwPidCJeqIQABCEAAAhCAAAQgAAEI1EAA41dDFOgDBCAAAQhAAAIQgAAEIACBEwlg/E6ES9UQgAAEIAABCEAAAhCAAARqIPB/RkF0ZovSoEoAAAAASUVORK5CYII=)"
],
"metadata": {
"azdata_cell_guid": "2c2f85e2-9ceb-4520-9e2f-98aaab24337b"
}
},
{
"cell_type": "code",
"source": [
"DROP TABLE IF EXISTS Recommendations;\r\n",
"DROP TABLE IF EXISTS LineItems;\r\n",
"DROP TABLE IF EXISTS Invoices;\r\n",
"DROP TABLE IF EXISTS Customers;\r\n",
"DROP TABLE IF EXISTS Demographics;\r\n",
"DROP TABLE IF EXISTS Products;\r\n",
"\r\n",
"GO\r\n",
"\r\n",
"CREATE TABLE Customers\r\n",
"(\r\n",
" Id INT PRIMARY KEY\r\n",
" , Name VARCHAR(50) NOT NULL\r\n",
" , DemographicId INT DEFAULT 1\r\n",
");\r\n",
"\r\n",
"CREATE TABLE Demographics\r\n",
"(\r\n",
" Id INT PRIMARY KEY\r\n",
" , Name VARCHAR(50)\r\n",
");\r\n",
"\r\n",
"CREATE TABLE Products\r\n",
"(\r\n",
" Id INT PRIMARY KEY\r\n",
" , Name VARCHAR(50)\r\n",
" , Cost MONEY NOT NULL\r\n",
");\r\n",
"\r\n",
"CREATE TABLE Recommendations\r\n",
"(\r\n",
" ProductId INT\r\n",
" , RecommendationId INT\r\n",
" , DemographicId INT\r\n",
");\r\n",
"\r\n",
"CREATE TABLE Invoices\r\n",
"(\r\n",
" Id INT PRIMARY KEY\r\n",
" , CustomerId INT\r\n",
" , Date DATETIME\r\n",
" , Total MONEY\r\n",
");\r\n",
"\r\n",
"CREATE TABLE LineItems\r\n",
"(\r\n",
" InvoiceId INT \r\n",
" , ProductId INT\r\n",
" , Cost MONEY \r\n",
");"
],
"metadata": {
"azdata_cell_guid": "0d9e0ca0-40c0-42f2-809d-60c8be830b95",
"tags": [
"hide_input"
]
},
"outputs": [
{
"output_type": "display_data",
"data": {
"text/html": "Commands completed successfully."
},
"metadata": {}
}, {
"output_type": "display_data",
"data": {
"text/html": "Commands completed successfully."
},
"metadata": {}
}, {
"output_type": "display_data",
"data": {
"text/html": "Total execution time: 00:00:00.010"
},
"metadata": {}
}
],
"execution_count": 97
},
{
"cell_type": "markdown",
"source": [
"# Add Relational FK Constraints"
],
"metadata": {
"azdata_cell_guid": "a5b936de-ff13-4456-b2d0-ca8368681bd8"
}
},
{
"cell_type": "code",
"source": [
"IF (OBJECT_ID('dbo.FK_Customers_Demographics', 'F') IS NOT NULL)\r\n",
" ALTER TABLE dbo.Customers DROP CONSTRAINT FK_Customers_Demographics \r\n",
"IF (OBJECT_ID('dbo.FK_Invoices_Customers', 'F') IS NOT NULL)\r\n",
" ALTER TABLE dbo.Invoices DROP CONSTRAINT FK_Invoices_Customers \r\n",
"IF (OBJECT_ID('dbo.FK_LineItems_Invoices', 'F') IS NOT NULL)\r\n",
" ALTER TABLE dbo.LineItems DROP CONSTRAINT\tFK_LineItems_Invoices \r\n",
"IF (OBJECT_ID('dbo.FK_LineItems_Products', 'F') IS NOT NULL)\r\n",
" ALTER TABLE dbo.LineItems DROP CONSTRAINT\tFK_LineItems_Products \r\n",
"IF (OBJECT_ID('dbo.FK_Recommendations_Demographics', 'F') IS NOT NULL)\r\n",
" ALTER TABLE dbo.Recommendations DROP CONSTRAINT\tFK_Recommendations_Demographics \r\n",
"IF (OBJECT_ID('dbo.FK_Recommendations_Products', 'F') IS NOT NULL)\r\n",
" ALTER TABLE dbo.Recommendations DROP CONSTRAINT\tFK_Recommendations_Products \r\n",
"IF (OBJECT_ID('dbo.FK_Recommendations_Products1', 'F') IS NOT NULL)\r\n",
" ALTER TABLE dbo.Recommendations DROP CONSTRAINT\tFK_Recommendations_Products1 \r\n",
"\r\n",
"GO\r\n",
"\r\n",
"ALTER TABLE dbo.Customers ADD CONSTRAINT\r\n",
"\tFK_Customers_Demographics \r\n",
"\tFOREIGN KEY ( DemographicId ) \r\n",
"\tREFERENCES dbo.Demographics (Id) \r\n",
"\tON UPDATE NO ACTION \r\n",
"\tON DELETE NO ACTION \r\n",
"\t\r\n",
"ALTER TABLE dbo.Invoices ADD CONSTRAINT\r\n",
"\tFK_Invoices_Customers \r\n",
"\tFOREIGN KEY (CustomerId) \r\n",
"\tREFERENCES dbo.Customers (Id) \r\n",
"\tON UPDATE NO ACTION \r\n",
"\tON DELETE NO ACTION \r\n",
"\t\r\n",
"ALTER TABLE dbo.LineItems ADD CONSTRAINT\r\n",
"\tFK_LineItems_Invoices \r\n",
"\tFOREIGN KEY (InvoiceId) \r\n",
"\tREFERENCES dbo.Invoices (Id) \r\n",
"\tON UPDATE NO ACTION \r\n",
"\tON DELETE NO ACTION \r\n",
"\r\n",
"ALTER TABLE dbo.LineItems ADD CONSTRAINT\r\n",
"\tFK_LineItems_Products \r\n",
"\tFOREIGN KEY (ProductId) \r\n",
"\tREFERENCES dbo.Products (Id) \r\n",
"\tON UPDATE NO ACTION \r\n",
"\tON DELETE NO ACTION \r\n",
"\r\n",
"ALTER TABLE dbo.Recommendations ADD CONSTRAINT\r\n",
"\tFK_Recommendations_Demographics \r\n",
"\tFOREIGN KEY (DemographicId) \r\n",
"\tREFERENCES dbo.Demographics (Id) \r\n",
"\tON UPDATE NO ACTION \r\n",
"\tON DELETE NO ACTION \r\n",
"\r\n",
"ALTER TABLE dbo.Recommendations ADD CONSTRAINT\r\n",
"\tFK_Recommendations_Products \r\n",
"\tFOREIGN KEY (ProductId) \r\n",
"\tREFERENCES dbo.Products (Id) \r\n",
"\tON UPDATE NO ACTION \r\n",
"\tON DELETE NO ACTION \r\n",
"\t\r\n",
"ALTER TABLE dbo.Recommendations ADD CONSTRAINT\r\n",
"\tFK_Recommendations_Products1 \r\n",
"\tFOREIGN KEY (RecommendationId) \r\n",
"\tREFERENCES dbo.Products\t(Id) \r\n",
"\tON UPDATE NO ACTION \r\n",
"\tON DELETE NO ACTION "
],
"metadata": {
"azdata_cell_guid": "94109bf5-13f7-43fd-940b-b74260067cb3",
"tags": [
"hide_input"
]
},
"outputs": [
{
"output_type": "display_data",
"data": {
"text/html": "Commands completed successfully."
},
"metadata": {}
}, {
"output_type": "display_data",
"data": {
"text/html": "Commands completed successfully."
},
"metadata": {}
}, {
"output_type": "display_data",
"data": {
"text/html": "Total execution time: 00:00:00.005"
},
"metadata": {}
}
],
"execution_count": 98
},
{
"cell_type": "markdown",
"source": [
"# Fill Relational Tables\n",
"\n",
"Fill the relational tables with random data.\n",
"\n",
"- There are 5 Demographics\n",
"- There are 10 Products, Cost is random\n",
"- There are 150 Customer\n",
"- Every Customer has an Invoice\n",
"- Every Invoice has one (or two) Line Items (it's random), Price is random"
],
"metadata": {
"azdata_cell_guid": "1cac82a8-37fa-4933-b2ed-c27e16b8d1af"
}
},
{
"cell_type": "code",
"source": [
"DELETE FROM Recommendations;\r\n",
"DELETE FROM LineItems;\r\n",
"DELETE FROM Invoices;\r\n",
"DELETE FROM Customers;\r\n",
"DELETE FROM Demographics;\r\n",
"DELETE FROM Products;\r\n",
"\r\n",
"GO\r\n",
"\r\n",
"-- Demographics\r\n",
"\r\n",
"WITH generator (Id, Name) AS\r\n",
"(\r\n",
" SELECT 1, CONCAT('DEMO-', NEWID())\r\n",
" UNION ALL\r\n",
" SELECT ID + 1, CONCAT('DEMO-', NEWID())\r\n",
" FROM generator \r\n",
" WHERE ID < 5\r\n",
")\r\n",
"INSERT INTO Demographics (Id, Name)\r\n",
"SELECT Id, Name FROM generator\r\n",
"OPTION (MAXRECURSION 0);\r\n",
"\r\n",
"-- Customers\r\n",
"\r\n",
"WITH generator (Id, Name) AS\r\n",
"(\r\n",
" SELECT 1, CONCAT('CUST-', NEWID())\r\n",
" UNION ALL\r\n",
" SELECT ID + 1, CONCAT('CUST-', NEWID())\r\n",
" FROM generator \r\n",
" WHERE ID < 150\r\n",
")\r\n",
"INSERT INTO Customers (Id, Name, DemographicId)\r\n",
"SELECT Id, Name, CAST(RAND(Id * 1234) * 5 AS INT) + 1 FROM generator\r\n",
"OPTION (MAXRECURSION 0);\r\n",
"\r\n",
"-- Products\r\n",
"\r\n",
"WITH generator (Id, Name) AS\r\n",
"(\r\n",
" SELECT 1, CONCAT('PROD-', NEWID())\r\n",
" UNION ALL\r\n",
" SELECT ID + 1, CONCAT('PROD-', NEWID()) \r\n",
" FROM generator \r\n",
" WHERE ID < 10\r\n",
")\r\n",
"INSERT INTO Products (Id, Name, Cost)\r\n",
"SELECT Id, Name, CAST(RAND(Id * 1234) * 5 AS INT) + 1 FROM generator\r\n",
"OPTION (MAXRECURSION 0);\r\n",
"\r\n",
"-- Recommendations\r\n",
"\r\n",
"DECLARE @products INT = (SELECT MAX(Id) FROM Products);\r\n",
"\r\n",
"WITH generator (Id, RecId, DemId) AS\r\n",
"(\r\n",
" SELECT 1, CAST(RAND() * @products AS INT) + 1, CAST(RAND() * 5 AS INT) + 1\r\n",
" UNION ALL\r\n",
" SELECT ID + 1, CAST(RAND(ID * 1234) * @products AS INT) + 1, CAST(RAND(ID * 2345) * 5 AS INT) + 1\r\n",
" FROM generator \r\n",
" WHERE ID < @products\r\n",
")\r\n",
"INSERT INTO Recommendations (ProductId, RecommendationId, DemographicId)\r\n",
"SELECT Id, RecId, DemId FROM generator\r\n",
"OPTION (MAXRECURSION 0);\r\n",
"\r\n",
"-- Invoices\r\n",
"\r\n",
"DECLARE @customers INT = (SELECT MAX(Id) FROM Customers);\r\n",
"\r\n",
"WITH generator (Id, CustomerId) AS\r\n",
"(\r\n",
" SELECT 1, 1\r\n",
" UNION ALL\r\n",
" SELECT ID + 1, ID + 1\r\n",
" FROM generator \r\n",
" WHERE ID < @customers\r\n",
")\r\n",
"INSERT INTO Invoices (Id, Date, CustomerId, Total)\r\n",
"SELECT Id, GETDATE(), CustomerId, 1.0 FROM generator\r\n",
"OPTION (MAXRECURSION 0);\r\n",
"\r\n",
"-- LineItems\r\n",
"\r\n",
"WITH generator (InvoiceId) AS\r\n",
"(\r\n",
" SELECT 1\r\n",
" UNION ALL\r\n",
" SELECT InvoiceId + 1\r\n",
" FROM generator \r\n",
" WHERE InvoiceId < @customers\r\n",
")\r\n",
"INSERT INTO LineItems (InvoiceId, ProductId, Cost)\r\n",
"SELECT InvoiceId, CAST(RAND(InvoiceId * 1234) * @products AS INT) + 1, CAST(RAND(InvoiceId * 5432) * 10 AS INT) + 10 FROM generator\r\n",
"UNION \r\n",
"SELECT InvoiceId, CAST(RAND(InvoiceId * 4321) * @products AS INT) + 1, CAST(RAND(InvoiceId * 2345) * 10 AS INT) + 10 FROM generator\r\n",
"OPTION (MAXRECURSION 0);\r\n",
""
],
"metadata": {
"azdata_cell_guid": "913f24ae-d406-4abe-8514-46c233dac614",
"tags": []
},
"outputs": [
{
"output_type": "display_data",
"data": {
"text/html": "Commands completed successfully."
},
"metadata": {}
}, {
"output_type": "display_data",
"data": {
"text/html": "Commands completed successfully."
},
"metadata": {}
}, {
"output_type": "display_data",
"data": {
"text/html": "Total execution time: 00:00:00.022"
},
"metadata": {}
}
],
"execution_count": 99
},
{
"cell_type": "markdown",
"source": [
"# Query Relational Tables"
],
"metadata": {
"azdata_cell_guid": "b0b1a74e-0a2a-4a9b-8ad8-ff9bc667dcb3"
}
},
{
"cell_type": "code",
"source": [
"-- table counts\r\n",
"\r\n",
"SELECT\r\n",
" (SELECT COUNT(*) FROM Customers) AS Customers\r\n",
", (SELECT COUNT(*) FROM Invoices) AS Invoices \r\n",
", (SELECT COUNT(*) FROM LineItems) AS LineItems \r\n",
", (SELECT COUNT(*) FROM Demographics) AS Demographics\r\n",
", (SELECT COUNT(*) FROM Products) AS Products\r\n",
", (SELECT COUNT(*) FROM Recommendations) AS Recommendations \r\n",
"\r\n",
"-- demographic distribution\r\n",
"\r\n",
"SELECT\r\n",
" Demographics.Name as Demographic\r\n",
" , COUNT(Customers.Id) AS Customers\r\n",
"FROM Customers\r\n",
"JOIN Demographics\r\n",
" ON Customers.DemographicId = Demographics.Id\r\n",
"GROUP BY\r\n",
" Demographics.Name\r\n",
"\r\n",
" -- profit report\r\n",
"\r\n",
"SELECT\r\n",
" Products.Name as Product\r\n",
" , COUNT(DISTINCT LineItems.InvoiceId) AS Sales\r\n",
" , MAX(Products.Cost) AS Item\r\n",
" , AVG(LineItems.Cost) AS Price\r\n",
" , SUM(Products.Cost) AS Cost\r\n",
" , SUM(LineItems.Cost) AS Revenue\r\n",
" , SUM(LineItems.Cost) - SUM(Products.Cost) AS Profit\r\n",
"FROM LineItems\r\n",
"JOIN Products\r\n",
" ON LineItems.ProductId = Products.Id\r\n",
"GROUP BY\r\n",
" Products.Name"
],
"metadata": {
"azdata_cell_guid": "f6308ef8-4264-4887-8a59-cbca64b0816b",
"tags": []
},
"outputs": [
{
"output_type": "display_data",
"data": {
"text/html": "Commands completed successfully."
},
"metadata": {}
}, {
"output_type": "display_data",
"data": {
"text/html": "Total execution time: 00:00:00.031"
},
"metadata": {}
}, {
"output_type": "execute_result",
"metadata": {},
"execution_count": 100,
"data": {
"application/vnd.dataresource+json": {
"schema": {
"fields": [
{
"name": "Customers"
},
{
"name": "Invoices"
},
{
"name": "LineItems"
},
{
"name": "Demographics"
},
{
"name": "Products"
},
{
"name": "Recommendations"
}
]
},
"data": [
{
"0": "150",
"1": "150",
"2": "288",
"3": "5",
"4": "10",
"5": "10"
}
]
},
"text/html": [
"<table>",
"<tr><th>Customers</th><th>Invoices</th><th>LineItems</th><th>Demographics</th><th>Products</th><th>Recommendations</th></tr>",
"<tr><td>150</td><td>150</td><td>288</td><td>5</td><td>10</td><td>10</td></tr>",
"</table>"
]
}
}, {
"output_type": "execute_result",
"metadata": {},
"execution_count": 100,
"data": {
"application/vnd.dataresource+json": {
"schema": {
"fields": [
{
"name": "Demographic"
},
{
"name": "Customers"
}
]
},
"data": [
{
"0": "DEMO-00A8D9D6-0ECD-4C21-94F6-1997A3850216",
"1": "34"
},
{
"0": "DEMO-5B9FB05E-50AD-4F83-B19E-40421C2066F6",
"1": "25"
},
{
"0": "DEMO-893C75B3-3656-4D29-AACA-4F122B807AAE",
"1": "27"
},
{
"0": "DEMO-AD9F8BE5-53EB-424A-A359-6134774CAB08",
"1": "29"
},
{
"0": "DEMO-D81AF279-EB67-4878-86AC-9DBD85A88B22",
"1": "35"
}
]
},
"text/html": [
"<table>",
"<tr><th>Demographic</th><th>Customers</th></tr>",
"<tr><td>DEMO-00A8D9D6-0ECD-4C21-94F6-1997A3850216</td><td>34</td></tr>",
"<tr><td>DEMO-5B9FB05E-50AD-4F83-B19E-40421C2066F6</td><td>25</td></tr>",
"<tr><td>DEMO-893C75B3-3656-4D29-AACA-4F122B807AAE</td><td>27</td></tr>",
"<tr><td>DEMO-AD9F8BE5-53EB-424A-A359-6134774CAB08</td><td>29</td></tr>",
"<tr><td>DEMO-D81AF279-EB67-4878-86AC-9DBD85A88B22</td><td>35</td></tr>",
"</table>"
]
}
}, {
"output_type": "execute_result",
"metadata": {},
"execution_count": 100,
"data": {
"application/vnd.dataresource+json": {
"schema": {
"fields": [
{
"name": "Product"
},
{
"name": "Sales"
},
{
"name": "Item"
},
{
"name": "Price"
},
{
"name": "Cost"
},
{
"name": "Revenue"
},
{
"name": "Profit"
}
]
},
"data": [
{
"0": "PROD-0E3DC5AC-8EED-4E9D-BF7B-49EB77E5D4DE",
"1": "27",
"2": "5.0000",
"3": "13.5185",
"4": "135.0000",
"5": "365.0000",
"6": "230.0000"
},
{
"0": "PROD-3C36696E-64EA-4629-A807-E3B4A6B0A369",
"1": "26",
"2": "5.0000",
"3": "14.5000",
"4": "130.0000",
"5": "377.0000",
"6": "247.0000"
},
{
"0": "PROD-56A84B7D-7F1D-4779-AFB2-DC741E59C25D",
"1": "27",
"2": "5.0000",
"3": "14.8571",
"4": "140.0000",
"5": "416.0000",
"6": "276.0000"
},
{
"0": "PROD-6E8449E5-6EBA-4D31-B782-FD6C15DAD1BD",
"1": "27",
"2": "4.0000",
"3": "14.4444",
"4": "108.0000",
"5": "390.0000",
"6": "282.0000"
},
{
"0": "PROD-889EE0C7-F685-450C-9AD0-87F583A16D32",
"1": "29",
"2": "4.0000",
"3": "15.3103",
"4": "116.0000",
"5": "444.0000",
"6": "328.0000"
},
{
"0": "PROD-9E174C2D-CAF7-475E-9649-43DC33E899F8",
"1": "27",
"2": "5.0000",
"3": "14.9629",
"4": "135.0000",
"5": "404.0000",
"6": "269.0000"
},
{
"0": "PROD-C26243F3-E214-4DF3-ABE8-5F39EF50C37C",
"1": "30",
"2": "5.0000",
"3": "14.3750",
"4": "160.0000",
"5": "460.0000",
"6": "300.0000"
},
{
"0": "PROD-D57DEB0D-5E8F-4035-972C-F247E302B03B",
"1": "26",
"2": "5.0000",
"3": "14.5384",
"4": "130.0000",
"5": "378.0000",
"6": "248.0000"
},
{
"0": "PROD-D8453D25-1800-41A4-80E4-165C30027CEB",
"1": "30",
"2": "5.0000",
"3": "14.5937",
"4": "160.0000",
"5": "467.0000",
"6": "307.0000"
},
{
"0": "PROD-E9541A39-D51D-4635-A7B7-76378888D03A",
"1": "32",
"2": "4.0000",
"3": "14.0000",
"4": "136.0000",
"5": "476.0000",
"6": "340.0000"
}
]
},
"text/html": [
"<table>",
"<tr><th>Product</th><th>Sales</th><th>Item</th><th>Price</th><th>Cost</th><th>Revenue</th><th>Profit</th></tr>",
"<tr><td>PROD-0E3DC5AC-8EED-4E9D-BF7B-49EB77E5D4DE</td><td>27</td><td>5.0000</td><td>13.5185</td><td>135.0000</td><td>365.0000</td><td>230.0000</td></tr>",
"<tr><td>PROD-3C36696E-64EA-4629-A807-E3B4A6B0A369</td><td>26</td><td>5.0000</td><td>14.5000</td><td>130.0000</td><td>377.0000</td><td>247.0000</td></tr>",
"<tr><td>PROD-56A84B7D-7F1D-4779-AFB2-DC741E59C25D</td><td>27</td><td>5.0000</td><td>14.8571</td><td>140.0000</td><td>416.0000</td><td>276.0000</td></tr>",
"<tr><td>PROD-6E8449E5-6EBA-4D31-B782-FD6C15DAD1BD</td><td>27</td><td>4.0000</td><td>14.4444</td><td>108.0000</td><td>390.0000</td><td>282.0000</td></tr>",
"<tr><td>PROD-889EE0C7-F685-450C-9AD0-87F583A16D32</td><td>29</td><td>4.0000</td><td>15.3103</td><td>116.0000</td><td>444.0000</td><td>328.0000</td></tr>",
"<tr><td>PROD-9E174C2D-CAF7-475E-9649-43DC33E899F8</td><td>27</td><td>5.0000</td><td>14.9629</td><td>135.0000</td><td>404.0000</td><td>269.0000</td></tr>",
"<tr><td>PROD-C26243F3-E214-4DF3-ABE8-5F39EF50C37C</td><td>30</td><td>5.0000</td><td>14.3750</td><td>160.0000</td><td>460.0000</td><td>300.0000</td></tr>",
"<tr><td>PROD-D57DEB0D-5E8F-4035-972C-F247E302B03B</td><td>26</td><td>5.0000</td><td>14.5384</td><td>130.0000</td><td>378.0000</td><td>248.0000</td></tr>",
"<tr><td>PROD-D8453D25-1800-41A4-80E4-165C30027CEB</td><td>30</td><td>5.0000</td><td>14.5937</td><td>160.0000</td><td>467.0000</td><td>307.0000</td></tr>",
"<tr><td>PROD-E9541A39-D51D-4635-A7B7-76378888D03A</td><td>32</td><td>4.0000</td><td>14.0000</td><td>136.0000</td><td>476.0000</td><td>340.0000</td></tr>",
"</table>"
]
}
}
],
"execution_count": 100
},
{
"cell_type": "markdown",
"source": [
"# Create Graph Tables\n",
"\n",
"![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAs4AAAGSCAYAAADzSEc9AAAgAElEQVR4AeydiX8TR5r3339sM7uf990kk8xsspnZZHYms9nJNTl2k5kAOUgIyRAgFyQkgSQQjnAkkEAgJGDCbSPJsuQD2xgbjMEnPvCBDTY2YJ738yupWq22ZLXsltTHrz8fW1KrurrqW9WlXz/91FP/R7iRAAmQAAmQAAmQAAmQAAnkJPB/cqZgAhIgARIgARIgARIgARIgAaFwZicgARIgARIgARIgARIgARsEKJxtQGISEiABEiABEiABEiABEqBwZh8gARIgARIgARIgARIgARsEKJxtQGISEiABEiABEiABEiABEqBwZh8gARIgARIgARIgARIgARsEKJxtQGISEiABEiABEiABEiABEqBwZh8gARIgARIgARIgARIgARsEKJxtQGISEiABEiABEiABEiABEqBwZh8gARIgARIgARIgARIgARsEKJxtQGISEiABEiABEiABEiABEqBwZh8gARIgARIgARIgARIgARsEKJxtQGISEiABEiABEiABEiABEqBwZh8gARIgARIgARIgARIgARsEKJxtQGISEiABEiABEiABEiABEqBwZh8gARIgARIgARIgARIgARsEKJxtQGISEiABEiABEiABEiABEqBwZh8gARIgARIgARIgARIgARsEKJxtQGISEiABEiABEiABEiABEqBwZh8gARIgARIgARIgARIgARsEKJxtQGISEiABEiABEiABEiABEqBwZh8gARIgARIgARIgARIgARsEKJxtQGISEiABEiABEiABEiABEqBwZh8gARIgARIgARIgARIgARsEKJxtQGISEiABEiABEiABEiABEqBwZh8gARIgARIgARIgARIgARsEKJxtQGISEiABEiABEiABEiABEqBwZh8gARIgARIgARIgARIgARsEKJxtQGISEiABEiABEiABEiABEqBwZh8gARIgARIgARIgARIgARsEKJxtQGISEiABEiABEiABEiABEqBwZh8gARIgARIgARIgARIgARsEKJxtQGISEiABEiABEiABEiABEqBwZh8gARIgARIgARIgARIgARsEKJxtQGISEiABEiABEiABEiABEqBwZh8gARIgARIgARIgARIgARsEKJxtQGISEggSgcnJSRkdHZWenh7p6uoy/i60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)"
],
"metadata": {
"azdata_cell_guid": "e3537bab-a6b7-400c-9841-02762016b9f4"
}
},
{
"cell_type": "code",
"source": [
"-- delete edges\r\n",
"\r\n",
"DROP TABLE IF EXISTS purchased;\r\n",
"DROP TABLE IF EXISTS is_in;\r\n",
"DROP TABLE IF EXISTS recommends;\r\n",
"\r\n",
"-- delete nodes\r\n",
"\r\n",
"DROP TABLE IF EXISTS Customer;\r\n",
"DROP TABLE IF EXISTS Product;\r\n",
"DROP TABLE IF EXISTS Demographic;\r\n",
"\r\n",
"-- create nodes\r\n",
"\r\n",
"CREATE TABLE Customer\r\n",
"(\r\n",
" Id INT PRIMARY KEY\r\n",
" , Name VARCHAR(50)\r\n",
") AS NODE;\r\n",
"\r\n",
"CREATE TABLE Demographic\r\n",
"(\r\n",
" Id INT PRIMARY KEY\r\n",
" , Name VARCHAR(50)\r\n",
") AS NODE;\r\n",
"\r\n",
"CREATE TABLE Product\r\n",
"(\r\n",
" Id INT PRIMARY KEY\r\n",
" , Name VARCHAR(50)\r\n",
" , Cost MONEY\r\n",
") AS NODE;\r\n",
"\r\n",
"-- create edges\r\n",
"\r\n",
"CREATE TABLE is_in\r\n",
"(\r\n",
" CONSTRAINT EC_IS_IN\r\n",
" CONNECTION (Customer TO Demographic) \r\n",
" ON DELETE CASCADE\r\n",
") AS EDGE;\r\n",
"\r\n",
"CREATE TABLE purchased\r\n",
"(\r\n",
" Date DATETIME\r\n",
" , Cost MONEY\r\n",
" CONSTRAINT EC_PURCHASED\r\n",
" CONNECTION (Customer TO Product) \r\n",
" ON DELETE CASCADE\r\n",
") AS EDGE;\r\n",
"\r\n",
"CREATE TABLE recommends\r\n",
"(\r\n",
" DemographicId INT\r\n",
" CONSTRAINT EC_RECOMMENDS\r\n",
" CONNECTION (Product TO Product) \r\n",
" ON DELETE CASCADE\r\n",
") AS EDGE;\r\n",
""
],
"metadata": {
"azdata_cell_guid": "7fe86d69-3a42-4de0-8478-d90df0320401",
"tags": [
"hide_input"
]
},
"outputs": [
{
"output_type": "display_data",
"data": {
"text/html": "Commands completed successfully."
},
"metadata": {}
}, {
"output_type": "display_data",
"data": {
"text/html": "Total execution time: 00:00:00.014"
},
"metadata": {}
}
],
"execution_count": 101
},
{
"cell_type": "markdown",
"source": [
"# Fill Graph Nodes"
],
"metadata": {
"azdata_cell_guid": "dcb6e557-7bd8-4597-97a3-059ac12186b8"
}
},
{
"cell_type": "code",
"source": [
"DELETE FROM Customer;\r\n",
"DELETE FROM Demographic;\r\n",
"DELETE FROM Product;\r\n",
"\r\n",
"DELETE FROM is_in;\r\n",
"DELETE FROM purchased;\r\n",
"DELETE FROM recommends;\r\n",
"\r\n",
"GO\r\n",
"\r\n",
"-- fill nodes\r\n",
"\r\n",
"INSERT INTO Customer (Id, Name)\r\n",
"SELECT Id, Name FROM Customers;\r\n",
"\r\n",
"INSERT INTO Demographic (Id, Name)\r\n",
"SELECT Id, Name FROM Demographics;\r\n",
"\r\n",
"INSERT INTO Product (Id, Name, Cost)\r\n",
"SELECT Id, Name, Cost FROM Products;\r\n",
"\r\n",
"-- fill edges\r\n",
"\r\n",
"INSERT INTO is_in ($from_id, $to_id)\r\n",
"SELECT\r\n",
" Customer.$node_id\r\n",
" , Demographic.$node_id\r\n",
"FROM Customer\r\n",
"JOIN Customers\r\n",
" ON Customer.Id = Customers.Id\r\n",
"JOIN Demographic\r\n",
" ON Customers.DemographicId = Demographic.Id\r\n",
"\r\n",
"INSERT INTO purchased ($from_id, $to_id, Date, Cost)\r\n",
"SELECT DISTINCT\r\n",
" Customer.$node_id\r\n",
" , Product.$node_id\r\n",
" , Invoices.Date\r\n",
" , LineItems.Cost\r\n",
"FROM Customer\r\n",
"JOIN Invoices\r\n",
" ON Customer.Id = Invoices.CustomerId\r\n",
"JOIN LineItems\r\n",
" ON Invoices.Id = LineItems.InvoiceId\r\n",
"JOIN Products\r\n",
" ON LineItems.ProductId = Products.Id\r\n",
"JOIN Product\r\n",
" ON Products.Id = Product.Id\r\n",
"\r\n",
"INSERT INTO recommends ($from_id, $to_id, DemographicId)\r\n",
"SELECT\r\n",
" Product.$node_id\r\n",
" , Product2.$node_id\r\n",
" , Recommendations.DemographicId\r\n",
"FROM Product\r\n",
"JOIN Recommendations\r\n",
" ON Product.Id = Recommendations.ProductId\r\n",
"JOIN Product as Product2\r\n",
" ON Recommendations.RecommendationId = Product2.Id"
],
"metadata": {
"azdata_cell_guid": "e70baea3-8241-454e-80cc-ceb4b883a352",
"tags": [
"hide_input"
]
},
"outputs": [
{
"output_type": "display_data",
"data": {
"text/html": "Commands completed successfully."
},
"metadata": {}
}, {
"output_type": "display_data",
"data": {
"text/html": "Commands completed successfully."
},
"metadata": {}
}, {
"output_type": "display_data",
"data": {
"text/html": "Total execution time: 00:00:00.044"
},
"metadata": {}
}
],
"execution_count": 102
},
{
"cell_type": "markdown",
"source": [
"# Query the graph"
],
"metadata": {
"azdata_cell_guid": "899a2360-58a5-45ee-899b-01bb7c0c2a8b"
}
},
{
"cell_type": "code",
"source": [
"-- counts of tables\r\n",
"\r\n",
"SELECT\r\n",
" (SELECT COUNT(*) FROM Customer) AS Customer\r\n",
", (SELECT COUNT(*) FROM Demographic) AS Demographic \r\n",
", (SELECT COUNT(*) FROM Product) AS Product \r\n",
", (SELECT COUNT(*) FROM is_in) AS is_in\r\n",
", (SELECT COUNT(*) FROM purchased) AS purchased\r\n",
", (SELECT COUNT(*) FROM recommends) AS recommends \r\n",
"\r\n",
"-- top file customers & their demographic\r\n",
"\r\n",
"SELECT TOP 5\r\n",
" c.Name as Customer\r\n",
" , d.Name as Demographic\r\n",
"FROM Customer AS c, is_in, Demographic AS d\r\n",
"WHERE MATCH(c-(is_in)->d)\r\n",
"\r\n",
"-- top 5 customer purchases\r\n",
"\r\n",
"SELECT TOP 5\r\n",
" c.Name as Customer\r\n",
" , p.Name as Product\r\n",
" , purchased.Date\r\n",
" , purchased.Cost\r\n",
"FROM Customer AS c, purchased, Product AS p\r\n",
"WHERE MATCH(c-(purchased)->p)\r\n",
"ORDER BY purchased.Date DESC\r\n",
"\r\n",
"-- top 5 product recommendations\r\n",
"\r\n",
"SELECT TOP 5\r\n",
" p1.Name as Product\r\n",
" , p2.Name as Recommendation\r\n",
" , recommends.DemographicId\r\n",
"FROM Product AS p1, recommends, Product AS p2\r\n",
"WHERE MATCH(p1-(recommends)->p2)\r\n",
"\r\n",
"-- profit report\r\n",
"\r\n",
"SELECT\r\n",
" Product.Name as Product\r\n",
" , COUNT(purchased.Date) AS Sales\r\n",
" , MAX(Product.Cost) AS Item\r\n",
" , AVG(purchased.Cost) AS Price\r\n",
" , SUM(Product.Cost) AS Cost\r\n",
" , SUM(purchased.Cost) AS Revenue\r\n",
" , SUM(purchased.Cost) - SUM(Product.Cost) AS Profit\r\n",
"FROM Customer, purchased, Product\r\n",
"WHERE MATCH(Customer-(purchased)->Product)\r\n",
"GROUP BY\r\n",
" Product.Name"
],
"metadata": {
"azdata_cell_guid": "db6d89b9-55c5-445c-a556-ab1753ab9c82",
"tags": []
},
"outputs": [
{
"output_type": "display_data",
"data": {
"text/html": "Commands completed successfully."
},
"metadata": {}
}, {
"output_type": "display_data",
"data": {
"text/html": "Total execution time: 00:00:00.058"
},
"metadata": {}
}, {
"output_type": "execute_result",
"metadata": {},
"execution_count": 103,
"data": {
"application/vnd.dataresource+json": {
"schema": {
"fields": [
{
"name": "Customer"
},
{
"name": "Demographic"
},
{
"name": "Product"
},
{
"name": "is_in"
},
{
"name": "purchased"
},
{
"name": "recommends"
}
]
},
"data": [
{
"0": "150",
"1": "5",
"2": "10",
"3": "150",
"4": "288",
"5": "10"
}
]
},
"text/html": [
"<table>",
"<tr><th>Customer</th><th>Demographic</th><th>Product</th><th>is_in</th><th>purchased</th><th>recommends</th></tr>",
"<tr><td>150</td><td>5</td><td>10</td><td>150</td><td>288</td><td>10</td></tr>",
"</table>"
]
}
}, {
"output_type": "execute_result",
"metadata": {},
"execution_count": 103,
"data": {
"application/vnd.dataresource+json": {
"schema": {
"fields": [
{
"name": "Customer"
},
{
"name": "Demographic"
}
]
},
"data": [
{
"0": "CUST-6918E1AF-2F34-4C3A-A9DF-98E4A3A9755B",
"1": "DEMO-AD9F8BE5-53EB-424A-A359-6134774CAB08"
},
{
"0": "CUST-7FE07243-AF24-4294-BF79-B1B6454ACB2B",
"1": "DEMO-AD9F8BE5-53EB-424A-A359-6134774CAB08"
},
{
"0": "CUST-39F8ACBD-AEC2-41D4-BC21-D2D628277E08",
"1": "DEMO-AD9F8BE5-53EB-424A-A359-6134774CAB08"
},
{
"0": "CUST-F530193E-823D-4BB7-83E8-053CA4EFFFCC",
"1": "DEMO-00A8D9D6-0ECD-4C21-94F6-1997A3850216"
},
{
"0": "CUST-2AA0D534-B3AE-4795-804E-94CD696FC342",
"1": "DEMO-00A8D9D6-0ECD-4C21-94F6-1997A3850216"
}
]
},
"text/html": [
"<table>",
"<tr><th>Customer</th><th>Demographic</th></tr>",
"<tr><td>CUST-6918E1AF-2F34-4C3A-A9DF-98E4A3A9755B</td><td>DEMO-AD9F8BE5-53EB-424A-A359-6134774CAB08</td></tr>",
"<tr><td>CUST-7FE07243-AF24-4294-BF79-B1B6454ACB2B</td><td>DEMO-AD9F8BE5-53EB-424A-A359-6134774CAB08</td></tr>",
"<tr><td>CUST-39F8ACBD-AEC2-41D4-BC21-D2D628277E08</td><td>DEMO-AD9F8BE5-53EB-424A-A359-6134774CAB08</td></tr>",
"<tr><td>CUST-F530193E-823D-4BB7-83E8-053CA4EFFFCC</td><td>DEMO-00A8D9D6-0ECD-4C21-94F6-1997A3850216</td></tr>",
"<tr><td>CUST-2AA0D534-B3AE-4795-804E-94CD696FC342</td><td>DEMO-00A8D9D6-0ECD-4C21-94F6-1997A3850216</td></tr>",
"</table>"
]
}
}, {
"output_type": "execute_result",
"metadata": {},
"execution_count": 103,
"data": {
"application/vnd.dataresource+json": {
"schema": {
"fields": [
{
"name": "Customer"
},
{
"name": "Product"
},
{
"name": "Date"
},
{
"name": "Cost"
}
]
},
"data": [
{
"0": "CUST-6918E1AF-2F34-4C3A-A9DF-98E4A3A9755B",
"1": "PROD-C26243F3-E214-4DF3-ABE8-5F39EF50C37C",
"2": "2021-04-15 13:43:34.883",
"3": "17.0000"
},
{
"0": "CUST-6918E1AF-2F34-4C3A-A9DF-98E4A3A9755B",
"1": "PROD-C26243F3-E214-4DF3-ABE8-5F39EF50C37C",
"2": "2021-04-15 13:43:34.883",
"3": "18.0000"
},
{
"0": "CUST-7FE07243-AF24-4294-BF79-B1B6454ACB2B",
"1": "PROD-C26243F3-E214-4DF3-ABE8-5F39EF50C37C",
"2": "2021-04-15 13:43:34.883",
"3": "19.0000"
},
{
"0": "CUST-7FE07243-AF24-4294-BF79-B1B6454ACB2B",
"1": "PROD-D8453D25-1800-41A4-80E4-165C30027CEB",
"2": "2021-04-15 13:43:34.883",
"3": "18.0000"
},
{
"0": "CUST-39F8ACBD-AEC2-41D4-BC21-D2D628277E08",
"1": "PROD-C26243F3-E214-4DF3-ABE8-5F39EF50C37C",
"2": "2021-04-15 13:43:34.883",
"3": "10.0000"
}
]
},
"text/html": [
"<table>",
"<tr><th>Customer</th><th>Product</th><th>Date</th><th>Cost</th></tr>",
"<tr><td>CUST-6918E1AF-2F34-4C3A-A9DF-98E4A3A9755B</td><td>PROD-C26243F3-E214-4DF3-ABE8-5F39EF50C37C</td><td>2021-04-15 13:43:34.883</td><td>17.0000</td></tr>",
"<tr><td>CUST-6918E1AF-2F34-4C3A-A9DF-98E4A3A9755B</td><td>PROD-C26243F3-E214-4DF3-ABE8-5F39EF50C37C</td><td>2021-04-15 13:43:34.883</td><td>18.0000</td></tr>",
"<tr><td>CUST-7FE07243-AF24-4294-BF79-B1B6454ACB2B</td><td>PROD-C26243F3-E214-4DF3-ABE8-5F39EF50C37C</td><td>2021-04-15 13:43:34.883</td><td>19.0000</td></tr>",
"<tr><td>CUST-7FE07243-AF24-4294-BF79-B1B6454ACB2B</td><td>PROD-D8453D25-1800-41A4-80E4-165C30027CEB</td><td>2021-04-15 13:43:34.883</td><td>18.0000</td></tr>",
"<tr><td>CUST-39F8ACBD-AEC2-41D4-BC21-D2D628277E08</td><td>PROD-C26243F3-E214-4DF3-ABE8-5F39EF50C37C</td><td>2021-04-15 13:43:34.883</td><td>10.0000</td></tr>",
"</table>"
]
}
}, {
"output_type": "execute_result",
"metadata": {},
"execution_count": 103,
"data": {
"application/vnd.dataresource+json": {
"schema": {
"fields": [
{
"name": "Product"
},
{
"name": "Recommendation"
},
{
"name": "DemographicId"
}
]
},
"data": [
{
"0": "PROD-E9541A39-D51D-4635-A7B7-76378888D03A",
"1": "PROD-889EE0C7-F685-450C-9AD0-87F583A16D32",
"2": "1"
},
{
"0": "PROD-889EE0C7-F685-450C-9AD0-87F583A16D32",
"1": "PROD-C26243F3-E214-4DF3-ABE8-5F39EF50C37C",
"2": "4"
},
{
"0": "PROD-6E8449E5-6EBA-4D31-B782-FD6C15DAD1BD",
"1": "PROD-C26243F3-E214-4DF3-ABE8-5F39EF50C37C",
"2": "5"
},
{
"0": "PROD-0E3DC5AC-8EED-4E9D-BF7B-49EB77E5D4DE",
"1": "PROD-C26243F3-E214-4DF3-ABE8-5F39EF50C37C",
"2": "5"
},
{
"0": "PROD-56A84B7D-7F1D-4779-AFB2-DC741E59C25D",
"1": "PROD-D8453D25-1800-41A4-80E4-165C30027CEB",
"2": "5"
}
]
},
"text/html": [
"<table>",
"<tr><th>Product</th><th>Recommendation</th><th>DemographicId</th></tr>",
"<tr><td>PROD-E9541A39-D51D-4635-A7B7-76378888D03A</td><td>PROD-889EE0C7-F685-450C-9AD0-87F583A16D32</td><td>1</td></tr>",
"<tr><td>PROD-889EE0C7-F685-450C-9AD0-87F583A16D32</td><td>PROD-C26243F3-E214-4DF3-ABE8-5F39EF50C37C</td><td>4</td></tr>",
"<tr><td>PROD-6E8449E5-6EBA-4D31-B782-FD6C15DAD1BD</td><td>PROD-C26243F3-E214-4DF3-ABE8-5F39EF50C37C</td><td>5</td></tr>",
"<tr><td>PROD-0E3DC5AC-8EED-4E9D-BF7B-49EB77E5D4DE</td><td>PROD-C26243F3-E214-4DF3-ABE8-5F39EF50C37C</td><td>5</td></tr>",
"<tr><td>PROD-56A84B7D-7F1D-4779-AFB2-DC741E59C25D</td><td>PROD-D8453D25-1800-41A4-80E4-165C30027CEB</td><td>5</td></tr>",
"</table>"
]
}
}, {
"output_type": "execute_result",
"metadata": {},
"execution_count": 103,
"data": {
"application/vnd.dataresource+json": {
"schema": {
"fields": [
{
"name": "Product"
},
{
"name": "Sales"
},
{
"name": "Item"
},
{
"name": "Price"
},
{
"name": "Cost"
},
{
"name": "Revenue"
},
{
"name": "Profit"
}
]
},
"data": [
{
"0": "PROD-0E3DC5AC-8EED-4E9D-BF7B-49EB77E5D4DE",
"1": "27",
"2": "5.0000",
"3": "13.5185",
"4": "135.0000",
"5": "365.0000",
"6": "230.0000"
},
{
"0": "PROD-3C36696E-64EA-4629-A807-E3B4A6B0A369",
"1": "26",
"2": "5.0000",
"3": "14.5000",
"4": "130.0000",
"5": "377.0000",
"6": "247.0000"
},
{
"0": "PROD-56A84B7D-7F1D-4779-AFB2-DC741E59C25D",
"1": "28",
"2": "5.0000",
"3": "14.8571",
"4": "140.0000",
"5": "416.0000",
"6": "276.0000"
},
{
"0": "PROD-6E8449E5-6EBA-4D31-B782-FD6C15DAD1BD",
"1": "27",
"2": "4.0000",
"3": "14.4444",
"4": "108.0000",
"5": "390.0000",
"6": "282.0000"
},
{
"0": "PROD-889EE0C7-F685-450C-9AD0-87F583A16D32",
"1": "29",
"2": "4.0000",
"3": "15.3103",
"4": "116.0000",
"5": "444.0000",
"6": "328.0000"
},
{
"0": "PROD-9E174C2D-CAF7-475E-9649-43DC33E899F8",
"1": "27",
"2": "5.0000",
"3": "14.9629",
"4": "135.0000",
"5": "404.0000",
"6": "269.0000"
},
{
"0": "PROD-C26243F3-E214-4DF3-ABE8-5F39EF50C37C",
"1": "32",
"2": "5.0000",
"3": "14.3750",
"4": "160.0000",
"5": "460.0000",
"6": "300.0000"
},
{
"0": "PROD-D57DEB0D-5E8F-4035-972C-F247E302B03B",
"1": "26",
"2": "5.0000",
"3": "14.5384",
"4": "130.0000",
"5": "378.0000",
"6": "248.0000"
},
{
"0": "PROD-D8453D25-1800-41A4-80E4-165C30027CEB",
"1": "32",
"2": "5.0000",
"3": "14.5937",
"4": "160.0000",
"5": "467.0000",
"6": "307.0000"
},
{
"0": "PROD-E9541A39-D51D-4635-A7B7-76378888D03A",
"1": "34",
"2": "4.0000",
"3": "14.0000",
"4": "136.0000",
"5": "476.0000",
"6": "340.0000"
}
]
},
"text/html": [
"<table>",
"<tr><th>Product</th><th>Sales</th><th>Item</th><th>Price</th><th>Cost</th><th>Revenue</th><th>Profit</th></tr>",
"<tr><td>PROD-0E3DC5AC-8EED-4E9D-BF7B-49EB77E5D4DE</td><td>27</td><td>5.0000</td><td>13.5185</td><td>135.0000</td><td>365.0000</td><td>230.0000</td></tr>",
"<tr><td>PROD-3C36696E-64EA-4629-A807-E3B4A6B0A369</td><td>26</td><td>5.0000</td><td>14.5000</td><td>130.0000</td><td>377.0000</td><td>247.0000</td></tr>",
"<tr><td>PROD-56A84B7D-7F1D-4779-AFB2-DC741E59C25D</td><td>28</td><td>5.0000</td><td>14.8571</td><td>140.0000</td><td>416.0000</td><td>276.0000</td></tr>",
"<tr><td>PROD-6E8449E5-6EBA-4D31-B782-FD6C15DAD1BD</td><td>27</td><td>4.0000</td><td>14.4444</td><td>108.0000</td><td>390.0000</td><td>282.0000</td></tr>",
"<tr><td>PROD-889EE0C7-F685-450C-9AD0-87F583A16D32</td><td>29</td><td>4.0000</td><td>15.3103</td><td>116.0000</td><td>444.0000</td><td>328.0000</td></tr>",
"<tr><td>PROD-9E174C2D-CAF7-475E-9649-43DC33E899F8</td><td>27</td><td>5.0000</td><td>14.9629</td><td>135.0000</td><td>404.0000</td><td>269.0000</td></tr>",
"<tr><td>PROD-C26243F3-E214-4DF3-ABE8-5F39EF50C37C</td><td>32</td><td>5.0000</td><td>14.3750</td><td>160.0000</td><td>460.0000</td><td>300.0000</td></tr>",
"<tr><td>PROD-D57DEB0D-5E8F-4035-972C-F247E302B03B</td><td>26</td><td>5.0000</td><td>14.5384</td><td>130.0000</td><td>378.0000</td><td>248.0000</td></tr>",
"<tr><td>PROD-D8453D25-1800-41A4-80E4-165C30027CEB</td><td>32</td><td>5.0000</td><td>14.5937</td><td>160.0000</td><td>467.0000</td><td>307.0000</td></tr>",
"<tr><td>PROD-E9541A39-D51D-4635-A7B7-76378888D03A</td><td>34</td><td>4.0000</td><td>14.0000</td><td>136.0000</td><td>476.0000</td><td>340.0000</td></tr>",
"</table>"
]
}
}
],
"execution_count": 103
}
]
}
@JerryNixon
Copy link
Author

JerryNixon commented Jun 4, 2021

For a given customer's purchase history what products do you recommend?

SELECT 
	  customer.Name AS CUSTOMER
	, demo.Name AS DEMOGRAPHIC
	, product.Name AS BECAUSE_OF_PURCHASE
	, recommendation.Name AS WE_RECOMMEND_PRODUCT
FROM Customer AS customer
	, is_in
	, Demographic AS demo
	, purchased
	, Product AS product
	, recommends
	, Product AS recommendation
WHERE MATCH(demo<-(is_in)-customer-(purchased)->product-(recommends)->recommendation)
AND recommends.DemographicId = demo.Id
AND customer.Id in (13)
ORDER BY 1

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment