{ "cells": [ { "cell_type": "markdown", "id": "447211a3-01cb-4354-8e69-86c7312938f2", "metadata": {}, "source": [ "###
San Jose State University
Department of Applied Data Science

**DATA 200
Computational Programming for Data Analytics**

Spring 2023
Instructor: Ron Mak
" ] }, { "cell_type": "markdown", "id": "97d8f499-7007-4641-a65d-604902c229c1", "metadata": {}, "source": [ "# Database Design Example: Car Dealership" ] }, { "cell_type": "markdown", "id": "a8ba8a22-c0fd-442c-bf05-8eac3aba3b11", "metadata": {}, "source": [ "#### Design a database for the sales manager of Golden Lemon Used Car Dealership to keep track of which salesperson sold which vehicles to which customers during each month:\n", "- A salesperson creates transactions to sell vehicles to customers.\n", "- Each transaction includes the month it occurred.\n", "- A transaction can include many vehicles, but at least one.\n", "- Each sold vehicle is included in a single transaction.\n", "- A transaction belongs to only one customer.\n", "- A customer have many transactions, but at least one. A customer can have transactions with different salespeople. \n", "- Each salesperson has a name.\n", "- Each customer has a name and gender.\n", "- Each vehicles has a vechicle identification number (VIN), make, model, year, and price." ] }, { "cell_type": "markdown", "id": "a9ac6fa1-a033-4943-880c-5c3b1c175a9a", "metadata": {}, "source": [ "## Conceptual: ER diagram" ] }, { "attachments": { "689d27b5-9f47-4551-ada3-c47a8287b037.png": { "image/png": "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YqVR/PmMrBOAiEBSG220UVmBQstSELEa0wice+65NuRz8VXRFaUSwKWD4XpcOfx+mUmupUql/OuClGv5pXMvB1kuw5GZ35ZLyc1NuYVTan/vwppiV111VZV3QcOGDf29QQXmBsOePXsavAsYTSzXu0AeTeE+RH56NF1wwQU2iJEGkcKTIXM8Majg8l3OIFLJCiKTWnEtJXIV1iKlcAl4LzFcAZj76ZcfvuQarhyz7xaUXLPvUwm/ZbkMV8p+WS4lNzflFm6p/bnbSy+9ZIPRoMzIZdEfppm5eC6LGJ2ZF8XoYilJHk2lUCvvGj88mpgKhZJy+umnBzYdqrxaJvfqddZZx05FY01cFP5SUu1SLuKaxx9/3OCznxR/YqLk8XEpwR4ZIAu/UtLk6heXMPMJQq5hlj8u92JUgGBORPVSCocArGEO+1KT5FYqudKv80Nupd89miuZpnHTTTeZbbfd1uy7777RFKIC7gpbGMMa5sUmlEsCVQ0aNKjYS3V+mQRgDntkUGxauHChIbot62QGHVCx2LJVwvkwhz0yQBalpJIVxCeeeML8+9//LuWekV3DnD0Wua0usRg9cw9cS8gAWfiVXJSrX3WPUz5+yzVOdQujLFguich2xBFHhHE73SODAMxhjwyKTZJbscT8O78cuflXinBy+uKLL2zQjG7dupm99947nJtW8F1gDGsClcC+0IRH05133mk91YisqRQuAZjjJYgMkEUx6d577zUNGjSwSkox17ly7qJFi+wATZzLi4KIDJBFKakkBfGrr74ykydPNr169SrlnpFdg1/uM888E9n9g7gxMkAWyKTc5Kpcy613HK/3U65xrF+QZZLlMki6NeddquVScquZbZBnlCq3IMsUVN4oKvIuCIpu9fl6o9SwLzTJo6lQUsGdV6pHE7JzTUcohiIGjzfeeKOYSyI5FxmU6mVYkoKImwDhb5s3bx5JhUu9KZHKTj75ZHs5rpmnnXaaadeundl1110N815cTMgAWZTiupFd37jJlVFd3M2wYLEmD64qCxYssMVm0vr+++9v9zMH89lnn62qDv8QBPAhxDZLgYwfP94cddRRpkWLFmbPPfc08+bNs+eyZszhhx9u+bEGEOsrxSX5Kde41CmsciTNcumi+3splsukya2m5513EFboOKVS5Ban8hdSFp4z3vcDBw4s5HSd4yMBmMO+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uNLJUidKj6wIiEB1BFxpw7LLrjYtm4h+i4AIJIGAFMQkSFF1EIF/CMS1k6VOlB5RERCBQgjEtQ3LLrvatGwi+i0CIpAkAlIQkyRN1UUE/iEQl06WOlF6JEVABEohEJc2LLvsatOyiei3CIhAEglIQUyiVFUnEfiHQFSdLHWi9AiKgAj4QSCqNiy77GrTsonotwiIQJIJSEFMsnRVNxH4h0BYnSx1ovTIiYAIBEEgrDYsu+xq07KJ6LcIiEAlEJCCWAlSVh1F4B8CQXWy1InSIyYCIhAGgaDasOyyq03LJqLfIiAClURACmIlSVt1FYF/CPjVyVInSo+UCIhAFAT8asOyy642LZuIfouACFQiASmIlSh11VkE/iFQaidLnSg9QiIgAnEgUGobll12tWnZRPRbBESgkgnUSqVTJQPIrHutWrXM3XffnblL2xES6NOnj9HjGa4A6CRdeOGF5tZbbzV9+/Y1p5xyil3I2itFTce98/QdHAHaKf1fBMe32Jwlj2KJBXt+sW1UsecHW3rlrv+neD0Dkke85BFmaaQgZtBGIVGKFwEp7NHII7vTdPDBB5tbbrklp+IYTSkr8656YcdL7pJHvOThlSa7DZOxyyMT72/9P8VLPpJHvOQRZmmkIIZJW/cSAccIeJ2sG2+80Rx66KFLjSg6Vp1EFJcXtlK8CGhEN17yyCyN14Z5XhEydmXSid+22rf4yUTtW/xkEkaJpCCGQVn3EAHHCfz111+mdm1NWXZcjLEqvizTsRJH4gvjKYoydiVe1KqgCIiADwSkIPoAUVmIgAiIgAgUR0AKYnG8dLY/BGTs8oejchEBEUg2AQ0JJFu+qp0IiIAIiIAIiMA/BOQJoUdBBERABGomIAWxZkY6QwREQAREQAREQAREQAREQAQqgoAUxIoQsyopAiIgAuESGDJkiMGNNNeH0uQ6xn6uVxIBERABERABEQifgOYghs9cdxQBERCBiieAEqjoeBX/GAiACIiACIhADAloBDGGQlGRREAEREAEREAEREAEREAERCAKAlIQo6Cue4qACIiACIiACIiACIiACIhADAlIQYyhUFQkERABERABERABERABERABEYiCgBTEKKjrniIgAiIgAiIgAiIgAiIgAiIQQwJSEGMoFBVJBERABERABERABERABERABKIgIAUxCuq6pwiIgAgknICWuUi4gFU9ERABERCBxBLQMheJFa0qJgIiIALxJaBlLuIrG5VMBERABESgsgloBLGy5a/ai4AIiIAIiIAIiIAIiIAIiEAVASmIVSi0IQIiIAIiIAIiIAIiIAIiIAKVTUAKYmXLX7UXAREQAREQAREQAREQAREQgSoCUhCrUGhDBERABERABERABERABERABCqbgBTEypa/ai8CIiACIiACIiACIiACIiACVQSkIFah0IYIiIAIiIAIiIAIiIAIiIAIVDYBKYiVLX/VXgREQAQiIVC3bl2zaNGiSO6tm4qACIiACIiACOQmIAUxNxsdEQEREAERCIhAw4YNzbx58wLKXdmKgAiIgAiIgAiUSkAKYqnkdJ0IiIAIiEDJBBo0aCAFsWR6ulAEREAEREAEgiMgBTE4tspZBERABEQgBwGNIOYAo90iIAIiIAIiEDEBKYgRC0C3FwEREIFKJICCOH/+/EqsuuosAiIgAiIgArEmIAUx1uJR4URABEQgmQQ0gphMuapWIiACIiAC7hOQgui+DFUDERABEXCOgBRE50SmAouACIiACFQIASmIFSJoVVMEREAE4kRAQWriJA2VRQREQAREQAQWE5CCuJiFtkRABERABEIioBHEkEDrNiIgAiIgAiJQJAEpiEUC0+kiIAIiIALlE1CQmvIZKgcREAEREAERCIKAFMQgqCpPERABERCBvAQ0gpgXjw6KgAiIgAiIQGQEpCBGhl43FgEREIHKJSAFsXJlr5qLgAiIgAjEm4AUxHjLR6UTAREQgUQSQEFcsGBBIuumSomACIiACIiAywSkILosPZVdBERABBwk8O2335pff/3VXHDBBWbw4MGG30oiIAIiIAIiIALxICAFMR5yUClEQAREIPEEUARRCDt06GBq1aplxo8fb+vMbymKiRe/KigCIiACIuAIASmIjghKxRQBERABVwlkKobUYerUqWbEiBGmU6dO9pvfJCmKFoP+iIAIiIAIiECkBKQgRopfNxcBERCB5BLIpRiussoqS1Sa3yiMUhSXwKIfIiACIiACIhAJASmIkWDXTUVABEQguQQKVQyzCUhRzCai3yIgAiIgAiIQPgEpiOEz1x1FQAREIJEESlUMs2FIUcwmot8iIAIiIAIiEB4BKYjhsdadREAERCCRBPxSDLPhSFHMJqLfIiACIiACIhA8ASmIwTPWHURABEQgkQSCUgyzYUlRzCai3yIgAiIgAiIQHAEpiMGxVc4iIAIikEgCYSmG2fCkKGYT0W8REAEREAER8J+AFET/mSpHERABEUgkgagUw2yYUhSziei3CIiACIiACPhHQAqifyyVkwiIgAgkkkBcFMNsuFIUs4notwiIgAiIgAiUT0AKYvkMlYMIiIAIJJJAXBXDbNhSFLOJ6LcIiIAIiIAIlE5ACmLp7HSlCIiACCSSgCuKYTZ8KYrZRPRbBERABERABIonIAWxeGa6QgREQAQSScBVxTBbGFIUs4notwiIgAiIgAgUTkAKYuGsdKYIiIAIJJJAUhTDbOFIUcwmot8iIAIiIAIiUDMBKYg1M9IZIiACIpBIAklVDLOFJUUxm4h+i4AIiIAIiEBuAlIQc7PREREQARFIJIFKUQyzhSdFMZuIfouACIiACIjA0gSkIC7NRHtEQAREIJEEKlUxzBamFMVsIvotAiIgAiIgAosJSEFczEJbIiACIpBIAlIMqxerFMXquWivCIiACIhAZROQgljZ8lftRUAEEkxAimFhwpWiWBgnnSUCIiACIlAZBKQgVoacVUsREIEKIpAUxfD3338PVWpSFEPFrZuJgAiIgAjElIAUxJgKRsUSAREQgWIJBKkYtmjRwkyZMqXYItnzTzvtNHP66acXde2MGTNM69ati7rGr5OlKPpFUvmIgAiIgAi4SEAKootSU5lFQAREIINAkIqhd5tXX33VrLPOOt7PiviWolgRYlYlRUAEREAEsghIQcwCop8iIAIi4AqBMBRDj8WgQYPMzJkzzeTJk03//v3NhRdeaFq1amU22WQT8+6779rT/vzzT3PKKaeYZs2amU033dTcfPPN3uVV39ttt5357LPPlvj91Vdf2d+PPvqo6dy5s+nSpYt54IEHqs5hY/To0Wa99daznyuuuKLq2Isvvmh69eplmjZtavr06WPmzJlTdcyvDSmKfpFUPiIgAiIgAi4QkILogpRURhEQARHIIBCmYujddsKECWbevHnmt99+M7fddpv5+uuvzZNPPmlatmxpzjzzTHvaqFGj7L5XXnnFnHPOOeaoo44yn3zyiZeF/UbBXLBgQdU+lMuFCxean376yey///5mv/32M5dccokZM2ZM1TkPPfSQGTZsmBkxYoS56667zNVXX23Gjh1rjx977LHmpJNOMm+++ab566+/DGUIKklRDIqs8hUBERABEYgTgWXiVBiVRQREQAREID+BSZMmmY033tieNHHiRNOpU6f8FwRwdIUVVjDDhw83derUscpZv3797F1uvPFGc/LJJ5u2bdvazzXXXGMKDTTz3HPP2ZFDlD3S4MGDzRlnnGG3UfqOPvpos+OOO9rfxx13nLn77rvtiOGsWbPMRx99ZHr06GG4/y+//GLPCfKPpygefPDBVhaXXXaZiUoWQdZTeYuACIiACFQmAY0gVqbcVWsREAFHCaAQfvPNN+b4448322+/vVWkGFEMMzVv3twqh9yzcePGZv78+fb2n3/+uWnfvn1VUVCgcAvNl3BLJT3//POmW7duVaduvvnmVduMQg4dOtS6ruK+StAbFMO6deta11NGFldaaSWD4rho0aKq64La8EZw4Y8ckEcUinpQ9VO+IiACIiAClU1ACmJly1+1FwERcJCAN4I1depUW/oOHTqEqijWrl39q2Pddde1ypKHdNy4cXbeovfb+06lUnZz7ty5Zvbs2Xab+YzMcfTStGnTvE3DiOXIkSOtUohiiEL22GOP2dHJrl27Gs7FrRVF1Rt1rLrYxw1PMYQ3Cf4op8hDSQREQAREQASSQqD6t3xSaqd6iIAIiECCCUStKGaj7d27t7n99tvtnEKUuEMOOcSsuOKKS5zGnMXx48fbfZzrJa599tlnzfTp080ff/xh5xp6x7bZZhv7m7mLfAiSc+mll1p3Ukbufv75Z9OxY0ez77772rmM3nV+fUsx9Iuk8hEBERABEXCBgBREF6SkMoqACIhAHgJxURRR3BhVYzQQF1FcQZdbbrklSk7gGiKissYh8w5RGEnt2rUzPXv2tC6qbdq0sa6r3oWMCv74449m7bXXtuezTbTUlVde2fz73/82q622mkGJPPvss+0cSO+6cr+lGJZLUNeLgAiIgAi4SKBW2tXnb18fF0uvMouACIiACCxFAMWGZShuvfVW07dvX6tMhekGiasoShtBbKpLREIleE2TJk2WOsw8xgYNGhjmOWYmXlWMLpJQIDMT1+Bemjn/MfN4sdtR8yu2vDpfBERABERABPwkIAXRT5rKSwREQARiRECKTnHCEK/ieOlsERABERCBZBKQi2ky5apaiYAIiIANnkIQlaiC2bgiAhRDltVQ8BlXJKZyioAIiIAIBElACmKQdJW3CIiACMSAQFzmKMYAxRJFkGK4BA79EAEREAEREAFLQAqiHgQREAERqBACUhT/FrQUwwp54FVNERABERCBkghIQSwJmy4SAREQAXcJVKqiKMXQ3WdWJRcBERABEQiPgBTE8FjrTiIgAiIQKwKVoihKMYzVY6fCiIAIiIAIxJyAFMSYC0jFEwEREIGgCSRVUZRiGPSTo/xFQAREQASSSEAKYhKlqjqJgAiIQAkEkqIoSjEsQfi6RAREQAREQAT+ISAFUY+CCIiACIjAEgRcVRSlGC4hRv0QAREQAREQgZIISEEsCZsuEgEREIHkE3BFUZRimPxnUTUUAREQAREIj4AUxPBY604iIAIi4CSBuCqKUgydfJxUaBEQAREQgZgTkIIYcwGpeCIgAiIQFwJxURSlGMbliVA5REAEREAEkkhACmISpao6iYAIiECABKJSFKUYBihUZS0CIiACIiAC/xCQgqhHQQREQAREoCQCYSmKUgxLEo8uEgEREAEREIGSCEhBLAmbLhIBERABEfAIBKUoSjH0COtbBERABERABMIjIAUxPNa6kwiIgAgkmoBfiqIUw0Q/JqqcCIiACIhAzAlIQYy5gFQ8ERABEXCNQKmKohRD1ySt8oqACIiACCSRgBTEJEpVdRIBERCBGBAoVFGUYhgDYakIIiACIiACIvAPASmIehREQAREQAQCJZBLUZw0aZIZPHiw6dChg73/1KlTzYgRIwznK4mACIiACIiACERDoFYqnaK5te4qAiIgAiJQiQQYMdx3333NW2+9ZY444ghzyimnSCmsxAdBdRYBERABEYglASmIsRSLCiUCIiACySYwfPhw8+WXXxq+lURABERABERABOJDQC6m8ZGFSiICIiACFUOgQYMGZsGCBRVTX1VUBERABERABFwhIAXRFUmpnCIgAiKQIAIoiPPnz09QjVQVERABERABEUgGASmIyZCjaiECIiACThFo2LChFESnJKbCioAIiIAIVAoBKYiVImnVUwREQARiRIARxHnz5sWoRCqKCIiACIiACIgABKQg6jkQAREQAREInYBcTENHrhuKgAiIgAiIQEEEpCAWhEkniYAIiIAI+ElACqKfNJWXCIiACIiACPhHQAqifyyVkwiIgAiIQIEEpCAWCEqniYAIiIAIiEDIBKQghgxctxMBERABETBGCqKeAhEQAREQARGIJwEpiPGUi0olAiIgAokmIAUx0eJV5URABERABBwmIAXRYeGp6CIgAiLgKgEpiK5KTuUWAREQARFIOgEpiEmXsOonAiIgAjEkIAUxhkJRkURABERABEQgTUAKoh4DERABERCB0Ak0bNjQzJ8/P/T76oYiIAIiIAIiIAL5CdRKpVP+U3RUBERABERABPwnUKtWLaNXkP9claMIiIAIiIAIlENAI4jl0NO1IiACIiACIiACIiACIiACIpAgAlIQEyRMVUUEREAEREAEREAEREAEREAEyiEgBbEcerpWBERABERABERABERABERABBJEQApigoSpqoiACIiACIiACIiACIiACIhAOQSkIJZDT9eKgAiIgAiIgAiIgAiIgAiIQIIISEFMkDBVFREQAREQAREQAREQAREQAREoh4AUxHLo6VoREAEREIGcBIYMGWJYyiLXhwtzHWM/1yuJgAiIgAiIgAiES0DrIIbLW3cTAREQARH4hwBKoNZB1OMgAiIgAiIgAvEioBHEeMlDpREBERABERABERABERABERCByAhIQYwMvW4sAiIgApVLYNGiRbby3nflklDNRUAEREAERCBeBKQgxkseKo0IiIAIJJ4ASmGfPn1sPfmWkph4kauCIiACIiACDhGQguiQsFRUERABEXCdQKZy6NVFSqJHQt8iIAIiIAIiED0BKYjRy0AlEAEREIGKIJCpHN599922zt63lMSKeARUSREQAREQAQcISEF0QEgqogiIgAi4TiBbOaxbt66tEt9SEl2XrsovAiIgAiKQJAJSEJMkTdVFBERABGJIIJdy6BVVSqJHQt8iIAIiIAIiED0BKYjRy0AlEAEREIHEEqhJOfQqLiXRI6FvERABERABEYiWgBTEaPnr7iIgAiKQWAKFKoceACmJHgl9i4AIiIAIiEB0BKQgRsdedxYBERCBxBIoVjn0QEhJ9EjoWwREQAREQASiISAFMRruuqsIiIAIJJrA4MGDbf0IQIPSV0zKVBK9fIq5XueKgAiIgAiIgAiUTqBWKp1Kv1xXioAIiIAIhE2gVq1aYd9S96uBgF6lNQDSYREQAREQAWcILONMSVVQERABERCBKgJSSKpQRL4hhT1yEagAIiACIiACPhKQi6mPMJWVCIiACIiACIiACIiACIiACLhMQAqiy9JT2UVABERABERABERABERABETARwJSEH2EqaxEQAREQAREQAREQAREQAREwGUCUhBdlp7KLgIiIAIiIAIiIAIiIAIiIAI+EpCC6CNMZSUCIiACIiACIiACIiACIiACLhOQguiy9FR2ERABERABERABERABERABEfCRgBREH2EqKxEQAREQAREQAREQAREQARFwmYAURJelp7KLgAiIgAiIgAiIgAiIgAiIgI8EpCD6CFNZiYAIiIAIiIAIiIAIiIAIiIDLBKQguiw9lV0EREAEREAEREAEREAEREAEfCQgBdFHmMpKBERABERABERABERABERABFwmIAXRZemp7CIgAiIgAiIgAiIgAiIgAiLgIwEpiD7CVFYiIAIiIAIiIAIiIAIiIAIi4DIBKYguS09lFwEREAEREAEREAEREAEREAEfCUhB9BGmshIBERABERABERABERABERABlwks43LhVXYREAEREAEREIFkE/j999/NL7/8Yj/z5s0z8+fPN+xbtGiRSaVStvK1atUydevWNcsuu6xp0KCBadiwoVl++eXth31KIiACIiAChROQglg4K50pAiIgAiIgAiLgM4Fvv/3WfPbZZ+bzzz83X3zxhfntt9/MwoUL7V1q165tlT4UvhVWWMEst9xyplGjRqZ+/fpWIUQpJKEsLliwwH64fu7cuebnn382KJQok3/99Zc9r169evb6Nddc06y11lpm7bXXNqussoo9pj8iIAIiIAJ/E6iVtr79bX4TEREQARHwkQAdtjlz5phff/3Vdvi8ztuff/5p+JDq1KljP3T2+NDxa9y4sVlxxRVt58/H4iQqK0ZL1HTHR6SSR+Gy+OCDD8zUqVPNp59+atsGnmP+59dYYw2rsKG0rb766oVnWMKZX331lVVGUUhnzpxpy4EMKUerVq1Mhw4dTPv27UvIWZeIgAiIQDIISEFMhhxVCxEIncB3331nO3kzZsywVn8s9p6lfplllslp9cfdC8WQhKLINSiP1Vn9//jjD+ONIDBygNW/ZcuWthPXvHnz0OsclxtKIYmLJP4uh+SRWx7vv/++eeONN+wIIf/PuH1usMEGZsMNNzQtWrTIfWEER7788kvz7rvvmilTplh3VtoxRhg322wzs95660VQIt1SBERABKIhIAUxGu66qwg4RSDT6o8iiNLGPB+s/ljcUdyC7uzRecP9jJEHrP7MQ8JtDMWx0qz+Ukji9e8jeSyWBwafl156yUyYMMG6eTIq16lTJ7PpppuaJk2aLD7Rga3Zs2ebN99800yaNMmOMtLWdO7c2Wy55ZbWAOZAFVREERABESiJgBTEkrDpIhFINoH33nvPdoyYF4SrKC6fHTt2tK5XKIVxSiiLuKxNnjzZurQyJwmrPx3S9ddfP05F9a0sUkh8Q+lLRpKHMa+99poZP368nffHnL6tt97ajhL6AjgmmTC6+PzzzxvmTDIfsmfPnmaLLbaISelUDBEQARHwj4AURP9YKicRcJYAASFefvlla/UnWiCWcqz+Xbp0MSuttJJT9frpp5/MW2+9Za3+jHbi0obVv3v37oYAFUlILikkjz32mDnxxBOtC/Eee+xhLrzwQjv6/MQTT9htRoR79OhhLrvsMrPyyiubkSNHWhGhcDAP7Mwzz4y9yFySh58wUZSQ4/Tp023U0K222sp069bNz1vENq9XXnnFvPDCCzYITuvWrU2vXr0U7Ca20lLBREAEiiUgBbFYYjpfBBJEINvqj0V8o402SlANjXnnnXfsyEaSrP6uKCTMT2UU94477jBt2rQxhx56qNl9993NySefbOehXXDBBXak94QTTrCjvueee6457bTTzLXXXmv69u1rjjnmGNO2bdvYP4+uyMMvkCj19913n/nhhx/Muuuua3bbbTfnDEl+scAg9dBDD5kPP/zQGjj22msv6/LuV/7KRwREQASiICAFMQrquqcIREiA4DKPP/64mTZtmo3ah1LYtWvXCEsU3q1fffVVqywSWRXFY+eddzYuBrtxRSEZOnSoHc198MEHrZCZl0bkSLi//fbbdi4Xc9bOP/988/rrr5snn3zSKogTJ040Tz31VHgPRpl3ckUeZVbTzv+95557rCs3HgZ77rmnIZCLkjEE4Ln//vut5wIu+fvss48URT0YIiACzhKQguis6FRwESiOAPMJ7733XjNr1iwbkY+RHNeCRhRX49xnE3wCpYUIi82aNTN77723HcHKfUW8jriikAwYMMCOqgwbNmwJgCxtgEspI4WsVbfaaquZpk2bVimI1A+l0ZXkijxK5YkSP2bMGEOwqk022cQceOCBpWZVEdeNHTvWGkBwkT7kkEMU0KYipK5KikCyCEhBTJY8VRsRWIoAiiFWf1yhNt54Y6sMEYVUydgoqCjNjFgx1xKrPwFu4p5cUUiGDx9ugwfdfPPNFimj1rj6oiD26dPHMI+L+Vu33HKLdUNlPhsuplIQ4/MEEpSFkV3+P1B2tKh8YbLhOUeppt3daaedbNCewq7UWSIgAiIQPQEpiNHLQCUQgUAIEH30pptusnNjZPWvGbFn9WdOVf/+/Q3RUOOaXFEQP/74Y7PtttvaAEgsg9K7d287D5FOM3PYcCPFNY85bKyJ6bmYSkGM/slDib/iiiusWynz6ggkpFQ8gRdffNE+6yzFM2jQIGv8KD4XXSECIiAC4RKQghgub91NBEIhgNWf0Zh//etfpl+/fk7OswsFVNZNmJ/JaNePP/5ooxISqj+OyRUFEXYDBw60TFdddVW7VAqKIZFyN998czsH9rfffrPP6IgRI8zo0aPtXEQpiNE+dYz0Xn/99TbaLIGCiC6rVDoBgvkQnZe1Ww8//HAnAi+VXltdKQIikAQCUhCTIEXVQQT+IcAozKhRo6zVnwASsvqX9mhg9SfgBFb/o48+2tSpU6e0jAK6yiUFEQSMGMKQteMyE8sjtGzZ0gY6QWlcdtllTf369TNPcWIbeTA/j7o0aNDAiTLnKiTBg2644Qa7zA1zSJX8I3DdddfZIDaHHXaYncvpX87KSQREQAT8JSAF0V+eyk0EIiPwySefGDogdLCx+hP0Q6l0At9//721+i9YsMDQUWaZhrgk1xTEuHALqhzIo127doZlPQj8hKK41lpr2W+2M383btw4qGKUne9LL71kbr/9dkNk43333bfs/JTB0gTuuusuG0n5gAMOsFF8lz5De0RABEQgegJSEKOXgUogAmUTYPkArP4EoZHVv2ycS2SA0k0QG6z+nTt3XuJYGD/mzJljPvrooyU+uGkyR0wpHgQyFfavv/7aKoooiyzpwbf34XejRo2qVRw9RZIlEqJIkyZNMldeeaVdgoSovkrBESAwFksNHXvssXakNrg7KWcREAERKI2AFMTSuOkqEYgNgZdfftla/bfaaitZ/QOSClb/F154wWD17969eyB3IdosiiALbmcqhHPnzjXrrLPOEh9Gd6QgBiKGkjLNVBBryoB5rp7C6H1nKpK44maPPmaOQDKv2O/0xRdfmPPOO89sttlm1hDid/7Kb2kCGPTeeOMNc+aZZ5o111xz6RO0RwREQAQiJCAFMUL4urUIlEuAkS0iDe6yyy52+Ypy89P1uQlg9X/00UdtJEJGaktJv/766xLKX6YiiEtwpiJINFV+r7HGGkvdqhiFZKmLtcN3An7KgwBJKI6ZSmOmIsk8Y2+0sTpFsnnz5kXXj6VFmP/5v//9r+hrdUHpBM4++2zDGpPZ64SWnqOuFAEREAF/CEhB9IejchGB0AnMnDnTnHvuubL6h0jes/qfddZZ1SpuXlGQTXWjgcxrzFQCM7eLmZvmp0LilVnfpRMIUx64HHsKY3WKJFFhsxXHzN+rrbbaEhXF8PHggw+aSy65RGscLkEm+B+slXjSSSeZ3XffXQa+4HHrDiIgAkUQkIJYBCydKgJxIiCrfzTS8Kz+fGeOAGZuL7fccksogt5o4Nprr+1LocNUSHwpcMIziZM8GKWuTnH0RiRnz55dNQLJ6PSUKVPMKaecYljrUCl8AswnHjNmjMGN3fUIuOHT0x1FQASCIiAFMSiyylcEAiRwzz33mAceeMBa/bNHBAK8rbJOEyAICXMA33rrLbueWeYooLcddKCROCkkeiiMXfzclTmhrMXnjUDSjvA8EzBFKToC++23n50mcNBBB0VXCN1ZBERABDIILJOxrU0REAEHCCxcuNCMHTvW9O3b10g5DF9gMD/++OPNrbfeaq3+9erVC78QuqMIlEiAUSpGtPnwDKOcuJpatGhhnnjiCbPBBhu4WgVb7p133tk8+eSTRgqi02JU4UUgUQRqJ6o2qowIVAAB5gzRyZNLWHTChj0yQBZKIuAiAaLm8mHNQ1fTq6++al25XS2/V25k4MnD26dvERABEYiSgBTEKOnr3iJQAgHcwXr16lXClfG45LXXXrOjF/EoTemlQAZyzSudn66MlgDLqaywwgqxW2LhnHPOMVdddZVdj9Ebrf/jjz8srJEjRxo+Bx54oF2WY9CgQYaAUKTHHnvMtivMq2Q/rrSkyZMnG5YAYn+/fv3ML7/8YvfH6Q/LXCALZKIkAiIgAnEgIAUxDlJQGUSgQAKffvqpmT59uu3wFHhJ7E5jiYhnnnkmduUqtkB0OpEFMlESAdcI8Oy2bt06dsX++OOPzemnn24D54wbN848/fTTVYaYr776yvz3v/81K6+8sp0HPGHCBDNv3jw7p5J5wRdffLE9n/nBLP+DMrjtttua3Xbbzbz00kt2KY+DDz44dnWmQMgCmSiJgAiIQBwISEGMgxRUBhEokAAWZgKgsA5a3BNzJDNdMNk+6qijzLRp08zJJ59siz98+HA7WrDPPvuY1Vdf3Xb6FixYEPeq2fIhA2Qhq78T4lIhswgQzbRJkyZZe+Px85BDDrFGsPXXX9+ceuqpdnTQK1mXLl3M5ZdfbgNEeftuu+02s91225nevXub9u3bmyuvvNIqXHfffbdp1aqVOeGEE+zSH+eff75VNlkKJG4JWSATJREQARGIAwEpiHGQgsogAgUSYLSqTZs2BZ4d7Wlt27Y1t99+e1UhCIjRoUMHM3fuXDNx4kS7H/cwRgsIlHHHHXeYN9980xBZ0ZWELDSC6Iq0VE5XCNB2eImlYV555RXvp9lkk02qtr0NlvBAMfRS586d7bqCn3zyiV3Go1mzZobPeuutZ/766y/z448/eqfqWwREQAREoBoCUhCrgaJdIhBXAnG2+mczw+ULFzGiruIG9vzzzxtGCrNTnz59bMCdHj162AWjXRqRk9U/W5r67QqBOD+7GJG8xDqNzZs3935W+41y+M0331Qdw0sBl1Lm9e2www5m1qxZVZ8vvvjCzkesOjkmGy617TFBpmKIgAgESEAKYoBwlbUIVDIB1gRkhA3FkBDuXbt2NU2bNl0KSeZSHY0aNaoKLrHUidohAiLgG4E4z3m7//77DYFpfv31V8NC8t27d89b71122cU8++yzdi7in3/+aY477jjz3Xffma233tq2PyiFJDwaiBjKOqJxS3GdExo3TiqPCIhAOAS0DmI4nHUXEfCFAFZ/l0bYGEV89NFHbbCI/fffv1oGtWu7a6fC6s96ckoi4BoBntuff/7ZoDwRRTNOqXHjxqZdu3bWWIRb6CmnnJK3eJyLkkidVl11VdOxY0ezxx57mDp16phjjz3WzldEIWbuIfMV45aQAbJQWxI3yag8IlC5BKQgVq7sVXMHCRBwAYXLlYT7KFb8RYsW2fD0rpS70HIyx4lFrpVEwDUCzO3jM378eBO3yJ60G5QJpSnTw2DYsGFLYP7yyy+rfl999dVm6NChVinEtdRL5513njn++OMNEVBxRV122WW9Q7H5RgaePGJTKBVEBESgogm4a7qvaLGp8pVKAAvznDlzrCuVCwxQaJk/tMUWW5jll1/ehSIXXMYZM2ZYWcjqXzAynRgzAjvttFPVEhIxK5rB3TxTOSykfCuttJKdd5h9LstibLjhhrFUDikr66kiCyUREAERiAuBWql0ikthVA4REIGaCbBI9I477hg7q3/NJU/WGbfccot56qmnzNixY0OvGHOo1HSHjj3nDV2VB4vJ4wbOshJ77bVXzvqFeYD5h7i8Eom0EhJzLMeMGWPuuusu06BBg0qosuooAiLgAAGNIDogJBVRBDIJ4NL4xBNPZO6K5TZuYnScS/lUF+00bpVEBlG6l5bCVdeU9jzWxC1uz2ah5UEhwZXzgQceMN9++22hlwV63p577lkxyiHMYY8MpBwG+lgpcxEQgSIJSEEsEphOF4GoCey99942eAOW5zgnFqlmlKuUT9zXQoQ9oy/IIopUCtPhw4ebhg0bGkY+S7k+iGtwIWRuWBB5l5vnnXfeaZdDGDRokF2qpab8ongO/Lgnz/Aaa6xhmMOnFC4BmMM+qnYk3NrqbiIgAi4RkILokrRUVhFIE6hXr57BzRQl5euvvxaTkAnAHPbIAFnEPbGmHGV98MEHzYQJE0zfvn1jU2QChvz++++xKU9mQXC9fP/99235iKQJv6SmgQMH2nUEb7jhhqRWMXb1gjVrN8JeSQREQATiRkAKYtwkovKIQAEEcMFs2bKlufbaaws4W6f4SQDmsHfBDZY1KJnLtcoqq5gXXnjBRnH0k0W5ecVZQaRuLLfAKM+IESPMqaeeagYMGGADE5Vb77hdz5w/FJVXXnnF3HvvvXErXuLKA2NYwzxuS4wkDrYqJAIiUBIBKYglYdNFIhA9gaOOOkpW/5DF4Fn9YR/3dPHFF5vdd9/dDBkyxFx66aWxLG7dunVjO4KYCax37952NJFIvIwmRhGYKLM8QWx36tTJ9O/f3y44T8AUpWAIwPbZZ5+1rGGuJAIiIAJxJCAFMY5SUZlEoAACzF058sgjzUsvvSSrfwG8yj0Fqz+sYQ77uKbZs2fbyJRPPvmkdSndf//941pUu+wAa2S6kGrXrm0VbRZaR+HGbTdpLt5bbrmlOfzww+1o83XXXeeCWJwqI0wZyYcxrJVEQAREIK4EpCDGVTIqlwgUQGDjjTe2nY3nnnvOhkkv4BKdUgIBrP4wpmMH87imcePGWZfStdZay45StG3bNq5FteWKu4tpdfC22WYbM3HiRMMan4wmJk2R2mSTTczgwYPNJ598Ykeff/jhh+owaF8RBGDISD5MYQtjJREQARGIMwGtgxhn6ahsIlAgAYKP4P6I8sI8KSX/CKAAoBAcdthhsQ6/P2zYMHPJJZeYa665xon5kUioR48eZujQoc6Oprz++uvmP//5j2Ehdlx627Rp49+DF3FORG294oorzKeffmrXSERWSsUTePHFF21QKwwKRMRlyRQlERABEYg7gTppq9aQuBdS5RMBEchPgOUC1l13XfPMM8+Yl19+2XTo0ME0atQo/0U6mpfA999/by666CIza9Ysc8wxx1imeS+I6CDlZB21jz/+2Dz88MOmW7duEZWk+Nsyl69r1652NK74q6O/okWLFubQQw81n332mVXKmaO4+eabR18wH0qAIkNd6tevb9ddxUiCAkzgHqWaCbDG4ahRo8zkyZPNLrvsYvbbbz8phzVj0xkiIAIxIaARxJgIQsUQAT8I/Pnnn7ZTgtWfBadl9S+N6v+3dy7QWs7ZH9/VmG6iC0KkJLpKpJBUMyNFU7rNdBshtcZQVmFIbmG5zEpRGWuppKYw0l33mUklKdKkJJLSbYZF0j1Rf589//esOp3Le3ov53ne57vXenTO+z6X3+/ze9/j2c/e+7t56j958mR3XO644w4rVqzYiZ0oxUfNnj3bayK7d+/ukbgUXy7pp2/VqpVHVfg37IYjQDQRI5p48cUXh31KWeOnFcnYsWPtk08+8fRI6i9luRPgwceKFStcNbhHjx5ea5v73npHBERABIJHQA5i8NZEIxKBhAnQ3gDnoUKFCnbzzTdbxYoVEz5nFE7w1Vdf2SuvvGLffvut4bQ0b948sNN+/PHHbcSIEZ5S2q5du8COM6+BtW3b1lN327Rpk9duoXrv+eefd0dx0KBBNmDAgFCNPb/B8uBp4sSJ3uoDBU4eQv3iF7/I77BIvP/jjz/6Q6WVK1da2bJlPaJMWqlMBERABMJIQA5iGFdNYxaBOAigDjlmzBhbt26dnvrHwSv21J9UXeT+acEQRKO5Nkqq3JBSbxhkRdX8+NFLkob0HTt2zG/XUL2PGAnRRMRJiCZmStppbBFwFCdNmuTz4/uCo1++fPnY25H6d8eOHTZt2jT/O0staocOHUKbMh2phdNkRUAE8iQgBzFPPHpTBMJPgPoonvpzI4OIDTfjSPbLzA4fPuwtQqiv4gYXh6Vq1aqBRTNjxgx3DlFTJUIVdiNV8YYbbrCuXbuGfSo5jh+BIxzFPn36GBHfTDPq7MhU2LBhg5UqVcqaNm0aqhrYRNaDRve0rNi3b59Vq1bNMw7OPPPMRE6pY0VABEQgMATkIAZmKTQQEUgtARxFevkhuoI8P03Uy5Url9qLBvTs9AqcOnWqNz8/44wz3GkOsmMIxkceecRGjRrlUUMat2eCEanFqSANOlONXok4idTvoTJLm4xMtKVLl9rbb79t33//veEokZ5dr169jJrqqlWrjPR9HONTTz3VmjVrZldeeWVGzVGTEQEREAEIyEHU50AEIkaAOrtZs2bZ+vXrXZGQmxyUJKNg7777rt/E7tmzx+gReP311we+PnPLli0eNaTWi5TSs846K2OWqnfv3nb55ZdHojULKcw4il26dPG000yN4iNos3jxYqP1zu7du/1vDPWKDRs2DN0DKR4kLV++3Kgr5G9GmTJlvNUNTe7p4SkTAREQgUwlIAcxU1dW8xKBOAhkf+qPs3jJJZfEcWR4dvn3v//tTmEYn/pPmTLFnUPabDz00EPhgR7nSJlXzZo1DaXYKNjOnTvdScSBojYxUyLBea3d2rVrbdmyZd4KhLpZWoHUrVvXo4u0CQmSbd261YgSrl692nbt2uUCPGQWNGrUyLMugjRWjUUEREAEUklADmIq6ercIhASAgcPHvT+iTz158aIJ+U89Se6EzbxCWot33//fX/qTwSDG9IGDRrY1VdfbcWLFw/JipgNHDjQxo8f71HDTGgDkRP4/v37u8hOv379cno7Y18jvfmee+6xa6+91h3FKPUWJNV2zZo1htANUbkjR454lBGxpSpVqvhWqVKllK79tm3bbNOmTb4RoWcc9H1kHVAepY8sDy5kIiACIhBVAnIQo7rymrcI5EHg448/9tQq6hZRQ0W2nb5u3DgFTTWTGzxuOOlDR4QG9VGe+pPSVrt27TxmGcy3YI5KKTerpJSefvrpwRxoEkZ1//33e9rhfffdl4SzhesUpGKSckqUmGgiaq5RNaL7fO5x2jZv3mx79+41HlphpOKSzokIDnV/PLwqXbq0lShRwr/rMbVh/k6xHThwwI/n4RD1kIjIwBpBKoyHRBxfuXJld0b5WyFxGUej/4iACIhAFgE5iFko9IMIiEBuBI5+6s+NFzdtJUuWdGeRJ+7cbKU6XYz0L24eiTzgFO7fv99v+rhhzJSn/qjN4hwSXcq0Hno5fbYefvhhv8nPxPTZnOab02vz5s3z9SZij6OIaFK6jSgezhTZAzhUMacKhyvmWPGdxxmLOWs4bETncdqIvqXScPAYW2x8fPd5jfExdowxxMbH36bY+Bij6gVTuTo6twiIQCYSkIOYiauqOYlAGgggdoOz9uWXX7rjhuMYe1KPoErsRjL7U39eL1asmI/wp59+8mNye+pPzVIsgoAjiCN63nnnuUNYsWLFNMwyfZcgiobKLFFDUg+jYLR+4Cb/sccei8J085wjDwRoi4GTiLprMo2HK0Tn+K7SR5OUSr6rOFd8v4iqsfFdJXKNc4WTxfeYDeO7yIZzhgPJOXAqifSx4UjipPH95hyIKfFdrfJz2miqHx4lk5XOJQIiIAIi8PNDt5//B/G/x2+iIQIiIAJJJMCNPymf3EiSMoYTyIZTyIbhKLKRLsZG6hc3l6S0xlLHkjikQJ4KNVmihjTZxjmMUuuRZ555xlCKfPrppwO5Nuke1DvvvONppzhUOIo4VwW1zz77zEVW+JeHNhjfK85Fvz5SKlP9cIWHR6SM0h8Rx5TvP8ZDngsvvNBFavhXJgIiIAIiEEwCchCDuS4alQiIQAQIvPbaa+4cPvjgg+4YRGDKx0xx6NChni48ZMiQY16P+i9EVp966il3EvNTeEVxE1Em0q6J8OGE0ecUpVAieEEyIpiMF2VTnFeik9Q0I4bFeGUiIAIiIALBICAHMRjroFGIgAhEjMDdd99tb731lkcNaSoeRXvhhRe8gfyIESOiOP085/zhhx/6QwNSPwcPHpzVZoGkn7d/bkj/3nvveU0eEXccLBq24xyGyXASabWDg0umAfWCV1xxhTX7ud1Oqusaw8RJYxUBERCBdBP4X3FBuq+q64mACIhARAkg+ENKKWmEtBUJ2019MpeNejVq4WTHE7j00kvtn//8pz377LOuHnz77bd7DS5CLaQjX3fddcY+YTY++y1atPCNeeAUL1y40P7xj3+4s9i4cWNvTxPmOWrsIiACIhBGAnIQw7hqGrMIiEAoCfztb39z5/CJJ56wqPX+y2nBqDOlVlWWM4FvvvnGKlSoYH369PH00aZNm3qELee9w/8qDm/M6SVCOn/+fJs5c6ZddNFF1rp1a3eMwz9LzUAEREAEgk9ADmLw10gjFAERyIcAUaigy+DfddddHhmZM2eONWnSJJ8ZReNtRRBzXmcEZqZNm2Y7duyw6tWr28CBAwul/UXOo0vPq6Sasn399deeik0ktXz58ta2bVsXuknPKHQVERABEYgmATmI0Vx3zVoEQkUgWY20Y0qqqCpS/5SORtqIcpBSesEFF3hKKe0DZP8jIAfx2E8CfT4RLvr222+tYcOGkRQuOpaIuWN86623+su0gRk1apRHVbt06eIpt9n31+8iIAIiIAKJE5BITeIMdQYREIEkEqBGb82aNd5jEeEKRDkQ4kDtEKl+tkqVKiXxisefatu2bS7Pj0Q/6pCMA9EMxnH++ed7TVjNmjWPPzDbK2PGjHHnEJER0gRlxxKYPn26jR492qNlx74Trd94YDFhwgT7/PPP7eKLL7bOnTtn9R+MFon8Z4tS6+uvv24fffSRP3Tp1q2bt/HI/0jtIQIiIAIiEC8BOYjxktJ+IiACKSGA5P2yZcu8bxo3fygZInlfr169wDXYpuH4qlWrXKqflFZk+ukr16hRoyyVyRgk2hPQ147ehihMyo4nMHv2bBs2bJjxb1QNURYcZXoT9uzZ06NjUWVRkHkTZeXhAj0X27RpY9RnykRABERABJJDQA5icjjqLCIgAnESoF5w8eLFnm5JmidRufr163tKXdiaxNPkffny5bZy5UqPMqLKyBxIg8PJxTlEiEWWMwFUOun3h2pl1IzvwYsvvmj0Bvztb39rUW11kui6L1iwwGbMmOE9H1F6JW1ZJgIiIAIikBgBOYiJ8dPRIiACcRKg3xn926j7O/PMM/2GmChhJhnRxbFjxxqO44UXXuj93BQ9zH2FeVCAAMuiRYty3ykD39m4caPR+5GHI/3797dTTz01A2eZvinxN2XIkCH+kObOO+/0qH76rq4riYAIiEDmEZCDmHlrqhmJQGAIIC5D+uCGDRusVKlSngZGb7Mo2JIlS7yn2759+6xatWrWqlUrd4yjMPd450hqMequtDSIihFxHj9+vNex9u7dOyrTTss8X3rpJa9f7t69u2ckpOWiuogIiIAIZCABOYgZuKiakggUNoEvvvjCJk2aZPRxq1GjhkvTI1EfRaNVAS0L1q1b533cOnTo4EI3UWSRfc6k5lJ3R4P0KNi7775rL7/8sje579SpUxSmnPY5Tpw40ebOnWson1511VVpv74uKAIiIAKZQEBtLjJhFTUHEQgIARxDbtB27tzpdYU0g0fIJcqGY3zLLbd4o/PJkyfbyJEjrWzZsoaDgCJqlI36TGrxomAffPCBpx9fd911vvZRmHNhzDHmeJOU4Da/AAAa90lEQVTqTT1igwYNCmMYuqYIiIAIhJqAIoihXj4NXgSCQYCbfG7IaFFx2WWXGdLzstwJ0NJgxYoVRquMHj16RFZYg4bwCLR8+umnucPKgHe2b99uDzzwgF1zzTUe2cqAKQV+CkRqqW198skn7eyzzw78eDVAERABEQgSATmIQVoNjUUEQkgAFcE5c+YYkTKcHQRoZPkToD4Tp5oU1JYtW0ZSxZI+k6h3ItqSyTZgwAB/CDBo0KBMnmbg5vbII494hBqlXJkIiIAIiED8BOQgxs9Ke4qACBxFgAb29LAjrZS6OqIjsoITIMpBvSbppn379rUiRYoU/CQhPYLI2uWXX27btm0L6QzyHzZpxa+99pq3PKlQoUL+B2iPpBGgV+If//hH69Kli7Vv3z5p59WJREAERCDTCchBzPQV1vxEIAUE1q9f773+SpYsacjKn3baaSm4SnROiZgPbQ/2799vt912m1WvXj2jJk8K8q5du3xD1ZV58hrzJuo8ZcoUd4ypSaRujM8VqrennHKKb2HtbUf7hV69elnHjh3td7/7XUataVgm88Ybb9ibb77ptb9qJxKWVdM4RUAECpuAHMTCXgFdXwRCRoDaudGjR7sIDTe/suQRQMAmpuxJLWdYjHRZ0kRJGd28ebPt3bvXDh486MMvWrSoO304fNyglylTxkqXLm0lSpQwHEI27NChQ74dOHDAj9+9e7f3zMShxJk8fPiw71e8eHE/vnLlylalShXveRfUtGYih0QQEW6SFR4BhGuIIBJJlImACIiACORPINrygvnz0R4iIAJHEaCx+auvvuoN4H//+98f9Y5+TAYBHO6///3vHp3FMWrSpEkyTpvUcyBEtGbNGk8t3rNnj5FqTMP3c8891x02Uo0rVaqU1GtmPxkpqTijpDcvXLjQG6STmss4SNWtU6eOCwBlPy7dv9MD9IYbbkj3ZXW9bARYA9ZCDmI2MPpVBERABHIhoAhiLmD0sgiIwLEEiGwNHz7crr/+ek+ZO/Zd/ZZMAqTEzZo1y/r06eOR2mSeu6DnWrt2rdHQngjhjz/+6CmfdevWtXr16tk555xT0NOldP+tW7faqlWrbPXq1Z7OSouVqlWrWqNGjaxWrVopvXb2k+PE4pjQk69ixYrZ39bvaSTw1Vdfee/JmTNnpvzhRRqnpUuJgAiIQMoIKIKYMrQ6sQhkDgHSBl988UVr3LixnMM0LCs1a9SvwfzBBx800inTZaRzEimmbx9pnkTl6tevbzfeeKOVK1cuXcM4oevgsLLFonbfffedLV++3KZPn+6Rb9Jb6YtHZDbVdY08UCGqGkTnEOEWIr1du3Z1zkStEUt64YUX7KOPPvIHE0Rnf/3rX7sQFbWgGFG4Z555xiO3HP/cc895/TH1s9jSpUs9cstnNkjGGrAWrEmqo9tBmrfGIgIiIAInSqDoiR6o40RABKJDAEflrLPOsp49e0Zn0oU8U1jDHPbpMG7uaQfw8MMPewSO1htPPPGE3X///R59CbpzmBMjxkxjeubAXJgT0UXmyFyZc6qMhyrpdOwLMo+LLrrIxo8fn3UIP9eoUcOjrjiFbdu29YcEONE33XST70cq8b333mv33HOPPzzgxeeff97fI1oKU8Sqgpp6zlqwJjIREAEREIH8CSiCmD8j7SECkSZAuuOWLVts8ODBkeZQGJO//fbb/YacNSCqmGxDXIao0IYNG1w1tGnTph4lTvZ1gnI+0mLZsCVLlhg9PEk7rFatmrVq1SqpPTxpsRDUthZ8lgYOHOhiQNRu/utf//I2HCh+UsPZv39/ZxRrMo/oEPvxsILoK1HmCy64wN577z3fj//QriTmMGa9GKAfWAvWRCYCIiACIpA/ATmI+TPSHiIQWQK0Ixg3bpy3IgiqUmQmLw7M27VrZ2PHjvW0Sdo/JMNIH6T3Im0miBzhEJQvXz4Zpw7NOUiXZtuxY4dNmzbNhg4d6hEwenriJGWykW6Jozx//nx3/C655BJPvfz88889wnrGGWdkTR/1WBwrjiHtGCEl0p/PPvtsO/3007P2C5Pqbtag9YMIiIAIiECOBOQg5ohFL4qACEAAJ4L2BNw0ywqHAOxpk8BadO/ePaFB4Bhyrp07d3pdYb9+/QwhlygbjvEtt9ziAjy0pKDVSNmyZY3WCIk4ikSsPv7448CiZX4zZszw8cV6NNKGpEWLFjZ16tSscW/fvt1TnalLpf6QyCsRVx4c0cYjLIaTW7t27bAMV+MUAREQgUIloBrEQsWvi4tAsAnMmTPHVUuDPcr4R3fHHXe46Eb8RwRjT5RjWYsTNVICcXwQE0HEhfo7nIKoO4dH84QFTGADI1jBDHYnYkGveSPNFKVctlj6cvPmzT3tNlarF2tpQ3rpunXrPOqIc4iaLcI21CWGxYJcExoWhhqnCIhAdAjIQYzOWmumIlAgArQ1YGvWrFmBjtPOySfAGsTWo6Bnp87uoYce8lTKP//5z9atW7eCniJy+8MIVqSfwg6GBTWUX6ndpcVCEA0H9rzzzvP2HzFlzyuuuMIVTKtXr+6vDxgwwEaPHu3DJ+JI70lSSekzSS0iqqCk5wbdWAPWgjWRiYAIiIAI5E9ADmL+jLSHCESSABEDUs6CosSI/D6NronwIJBB1IOedwircKP77LPPZq0Twis4VYydtExq7bLbihUrfB9uerGXXnrJb4rplzds2DB/LSj/YR6sBWsSrxHdQTSEdEHaPtx3331JFWGJdxxh3Y/6T5jBDoawLEjEDKfr4osvdhGgoDKghrB3797HDA+1V1RJSR9dv369O4LsgCLsp59+agjZrFmzxpVheR+VWL6TCNoE1fh7wFrEHOGgjlPjEgEREIGgEJCDGJSV0DhEIGAEULYknSwohpIi9XNEA0h9w1miF9tdd91lf/3rX12Cn759ecnxx+bCsW3atHEHoEqVKh4F4SYXoRJS51BrnDBhQmz3QPzLWrAm8Rg37rR2oA8gETA4yU6MAOxgCEuYwjZeQxkVldSgGbWoQ4YMsU8++cTat29/3PBoV4GITU69IvkcxlKT6Y9YokSJ444P2gusAWshEwEREAERiI+AHMT4OGkvEYgcAW6Ig9b7jkbn3Ng2bNjQfvWrX3kEkBtcojyoKnLzjvIqDl7r1q1dbIRo4/vvv5+1ftQiIcRBxCN200iDcOoTiYbUrVvXnU4iJUEy1oI1yc+IjOLoMu9HH33UlTnzO0bv500AhwmWMIUtjOMxakep3wvaZ+ngwYN24MABW7hwoZ100knxTCW0+8CeNWAtZCIgAiIgAvERiLZ8XXyMtJcIiEBACNA4vmjR/z3XKl68+DGqhEQ1Dh06ZLSCyEuOnxt8UjZJl4sZ8v44kX/5y1/8Jc5D+4ewGUqTMWGRoDYsDxvTo8dLiwcizKNGjbJ9+/ZlpV8evc/RP5MW3LlzZ0/XpAF9UPoi1qxZ09gy3VAuJeuA1HTWQiYCIiACIhAfAUUQ4+OkvUQgcgTijVilE0yxYsXyvVxMjp+0sv/85z8eDSSCEDN6/k2fPt1ryj777DN/mZtHVCu//vpr3zguaKmB+UV0EQwZM2aM4YjIOYytdvL/hS2MYQ3z/IwIN5HHoNW15jfuTHgf5rDPKY02E+anOYiACIhAqgjIQUwVWZ1XBEJOoCA1b0GaKvWF1E8x/pzk+Gn4TRppjx49rG/fvj500lWJDJF2x0ZfvKNFb4Iwv7xqQkmbJa2Wxu+xlgVBGHOmjgHGsIZ5rCVEXnPt06ePffnll/byyy/ntZveSyIBWMMc9jIREAEREIGCEZCDWDBe2lsEIkOAFMvvv/8+rhvgIEGJV47/scces2XLlhnN0QcOHGiko1WtWtUVUfkZBcugGE4Ia5Fb2iuOCum3PXv2DMqQM34csIY57PMz6mPvvPNO/7yR8ihLLQEY892GOexlIiACIiACBSNQ5GfFv/B0ui3Y3LS3CIhAggRoEYGgy0033ZTgmdJ/OBE32l9Qm7hr1y5XZMxLcZE/hTGVUNLSgmTjxo2zefPm2fjx448b1ptvvultGAYPHqw2FsfRSe0L//3vf+2ee+6xG2+8Ma7I7bvvvutRRMSQeJAhSz4BnMO5c+farbfealdddVXyL6AzioAIiEAECCiCGIFF1hRF4EQJtGzZ0mbNmnWihxfqcQWV46dOEccwaM4hEFkD1iK7odiK89iuXTs5h9nhpOF3eiXCnjVgLfIzHBb6DlInS99NWXIJwBS2MJZzmFy2OpsIiEC0CMhBjNZ6a7YiUCACHTp0cLXGSZMmFeg47Zw8ArBHMZO1yG68V6pUqRzfy75v2H7/4YcfQjFk1oU1iPc7QouWfv36uYruI4884qnDoZhogAdJ+jUsUSaGLYxlIiACIiACJ05ADuKJs9ORIpDxBGgZQXrplClTjHQ6WXoJwBz2rAFrkd3mzJmTkf3dEBchApyfDRgwwB544IH8dkv5+/TYYy3iNWpdn3rqKStfvrwNGjTIFixYEO+h2i8bAdjBEJYwha1MBERABEQgMQJyEBPjp6NFIOMJoNiI8mc8YhwZDyPNE4Q57HNSJt24caOxNWvWLM2j0uWyE2ANYuuR/b3cfv/lL3/pLVjatm1rb731lvfgRBxJFh8BWNG3FHYwvOuuu7zOOL6jtZcIiIAIiEBeBOQg5kVH74mACDiB22+/3XsKjh49WkTSRADW9GOEfU5GOw/6N1auXDmnt9P6WqtWrbwOr1GjRp7e9/bbb9uf/vQnO+ecc7wHHSmyGPNp3bq1j/uSSy4x9osZN/oNGjSwyy+/3KOmsdf596OPPrKmTZu6s3zzzTe76NDR7xf2z6wBa8GaFNSYF4q6ZcuWtWeeecaFiGjPIsuZAGwQa4IVzGAHQ5kIiIAIiEDyCMhBTB5LnUkEMpYAN8A4KkuWLDFUM2WpJQBjWMM8Nwcwr76IqR3d8WdfvXq1i64899xzVr9+ffvNb37jKbE4fdSF0WMSo8k8PSg3bdpkDz74oNdOkka7Y8cO69Kli3Xu3NlQYx07dmzWRVCgpTE9USIESIi8BVFVN5G+oaVLl3ZhFdoybNu2zdNm9T3L+ghk/QATUophBCvEaGAnEwEREAERSC6BXyT3dDqbCIhAphLgxp8G8q+++qr99NNPfrOfqXMtzHnhTBFZgzXMc7PvvvvOypUrl9vbaX/9oYcesiuvvNI/G6+88orXhZ188sneJuWzzz6z9evXu9OL03jKKad42uzw4cNt5syZHn0jckjLCAyhEXpTYm+88Yadf/751r9/f//9ySef9N52e/fu9d+D8h/WgjVJxHgYQP9NeE2bNs2osaxevbpHXc8444xETh3aY7/++mtPI+XzQ53hbbfdZhdeeGFo56OBi4AIiEAYCMhBDMMqaYwiEBACTZo0ccVG0h+J7PTq1SsgI8uMYYwcOdJWrlzpN8GXXXZZqCZFOilGhA9HB+cQow/loUOHvEavRo0a7hz6Gz//B8cPB+DDDz+0xo0bx162K664Iuvnzz//3IhQHu0gHT582DK5Xg8H6N5777VvvvnGnaOhQ4f69+7aa689hk0WpAz84b333rP58+e7gu9FF11kd999t5122mkZOFNNSQREQASCR0AOYvDWRCMSgUATwHEhAjRq1Ch79NFHPdVLN26JLRmOwIgRI7yXHtEzokb5GREr0jeDYkWL5l2xULt2ba9BxLmL7cv4e/ToYStWrHAnMDYXokUxo7avRYsWNnXq1NhLtn37djvrrLOyfg/CD0QPcWSSaXyvqLnE3nnnHVu4cKHNmDHDHSXq7i699FJ/L1P+w4MC5sj3gb8xzZs3t6uvvjpTpqd5iIAIiEBoCMhBDM1SaaAiEBwCODBPP/20DRs2zB5//HGvJbvmmmuCM8AQjWTRokXeQ49oGr3cihQpEtfoqXmbNWtWXPsGYadKlSpZlSpVfK6dOnWyLVu2eNopDc3PPvtso36Rusrzzjsvq2aRceMk8FnbvHmzRyZJcebBBGmYQTLGTruLVBmOEtuRI0c8BXnu3Lk2ceJEj9SSnkt6b5kyZVJ1+ZScd/fu3bZ06VJ7//33bc+ePe4UEj1GFTbe70FKBqaTioAIiEDECchBjPgHQNMXgRMlwA0c0vL0IaOOjBs9okFnnnnmiZ4yUschzoIYCwItN954oztCBQFAuiYNwmOOU0GOLax9Eab5wx/+YNQREgV8+OGHPSWVlEqcgpo1a7qzeLSjhcPQp08fj6riFFN7iIplkIw1YC1Yk1Qb3zucZjaM9FscrCFDhhgKnziJtWrVcjEgnO0gGf0tGe/atWsN55D0Y9q4tGnTxscbpLFqLCIgAiIQZQJFfn4aeSTKADR3ERCBxAn88MMP7ux88sknRgpqt27dEj9pBp9hwoQJnlaJQ4RTTd3eiVj37t09/TKIqp65zQcHj2gbEdNYnWJsX9RNS5YsaRUrVoy9lPUvaYeoV8LsRHllnSzJP4wbN87mzZsXCMeVyCpOGP/ihGEofRK9xcGmkXxOfJOJ5KuvvvKaU9aZNY0JCuG88jAAJVsJzSSTuM4lAiIgAsklIAcxuTx1NhGINIEvvvjC09527tzpCpzt27f3KEGkofz/5InuTJ482UVo6N9GmiVOUiJGJA1V0Ndffz2R0+jYBAnQnoP+jjjsQbStW7e6o0YEj16UpHPyUIfnw9SDFi9e3DfqPXHaS5Uq5Y46ET42jM8v2/79+104hnMQNT148KBv1JYS3cR55xzUiBLBxDGNCRgFkY3GJAIiIAIicDwBOYjHM9ErIiACCRLAUZw0aZKLTZB2Rw87JOqjaKSQ0rKAJuqIjnTo0CFhxzDGkZt1egsSheS8svQT4HNOqjDtSYh+htFwFHH2UCbet2+fbziQqM/i+GE4kieddJI7gDiQbAjJ4FSqXjCMq64xi4AIiEDuBOQg5s5G74iACCRIgDq72bNne0ohN5QoLx7dziDB0wf6cBrdo8jIDTepfa1atUpJfSbNw1H4pMG86j/T+5Hg803vRmpIO3bsmN6L62oiIAIiIAIikCICchBTBFanFQEROJYAIjZv/9wAnkgFjgwiG/Xq1Tt2p5D/tmrVKhftwXEgsoLwCuqSqTYaqpPaN2jQoFRfSuc/igCqs0TannrqqaNe1Y8iIAIiIAIiEG4CchDDvX4avQiEjgA31IsXL7YPPvjARTSoV6pfv741bNjQ6O0XJqP33fLly72ukJosRDgaNGhgTZo0SauQCiqaTzzxhDVq1Mh69uwZJoShHevo0aNt2bJlhjJr5cqVQzsPDVwEREAEREAEshOQg5idiH4XARFIKwEk77nR3rhxo4tgUNeEyiHRxaCJWyD2QZQQlUjqtRDwQBUSx4zWAoVpK1eutOHDh3svPqU7pnYlSOulByXtN3i4IRMBERABERCBTCIgBzGTVlNzEYEMIECrjDVr1hhCN0TlENAgyki/NBQR2Wi6nkqjnQLy/Gw0dGccCHEwDpRH69Sp4+0WUjmGEzk3kVkayZPainiNLPkEEKMhVbpr164eKU7+FXRGERABERABEShcAnIQC5e/ri4CIhAHAWr6iDDisJFOSV815PUx1BWpv0MEh7o/0jzp+1aiRAlXXUR5EUORke3AgQN+PD3iqIdERIa015haI5L/HE/aIM4oEcIwib+sWLHCSH8kstWrVy+fu/6THAIjR470dGLSeOn3KRMBERABERCBTCQgBzETV1VzEoGIEcDBI+UzJtNP+wdewyEkAokRAYzJ9NOOICbTT0pr0BqvJ7p869evt1GjRnnbhTvvvNPbayR6zigf/80339iIESO8B+Btt91m1atXjzIOzV0EREAERCDDCchBzPAF1vREQASiSQDHeNiwYZ6qS4/Ea665JpogEpz1okWLvKcnqcV9+/ZVz78EeepwERABERCB4BOQgxj8NdIIRUAEROCECSxYsMDmzJlj5cuXtx49eoQqXfaEJ52EA0lrHjt2rO3YscNatmzpbVmScFqdQgREQAREQAQCT0AOYuCXSAMUAREQgcQIkG6Ls4MAELVz3bp1S+yEGX70hAkTjFrOmjVrulOdaSnIGb58mp4IiIAIiECCBOQgJghQh4uACIhAWAigDDtx4kTbuXOni9i0b9/eW3WEZfypHOePP/5okydPdhGasmXLWqdOnVyxNpXX1LlFQAREQAREIIgE5CAGcVU0JhEQARFIIQEcxUmTJhniKzVq1LC2bdt6CmoKLxnYU5NCOm3aNFu3bp2L+VCvSb2hTAREQAREQASiSkAOYlRXXvMWARGIPAHq7GbPnm0bNmxwVdemTZta48aNI8FlyZIltnDhQm9zUq1aNWvVqpXqMyOx8pqkCIiACIhAfgTkIOZHSO+LgAiIQAQILF261BvA0xuSvo/Nmze3evXqZdTMV61aZYj24BjTM7NZs2Z25ZVXZtQcNRkREAEREAERSJSAHMRECep4ERABEcggAgjaLF682D744APbvXu3nXzyyV6v2LBhQytXrlyoZvrdd9/Z8uXLva5wz549VqZMGWvQoIE1adIk43pfhmphNFgREAEREIFAE5CDGOjl0eBEQAREoHAJrF271pYtW2YbN240hFxOOeUUq1u3rkcXzznnnMIdXLarb9261YgSrl692nbt2uUCPFWrVrVGjRpZrVq1su2tX0VABERABERABHIiIAcxJyp6TQREQAREIEcCtMpYs2aNIXRDVO7IkSMeZTz33HOtSpUqvlWqVCnHY5P14rZt22zTpk2+bdmyxcdRpEgRHwcCM3Xq1PEWFcm6ns4jAiIgAiIgAlEiIAcxSqutuYqACIhACghQ00eEEadt8+bNtnfvXjt48KBfqWjRop7OWapUKa/7I82zdOnSVqJECTvppJN8Y8dDhw75duDAAT+e9FbqIfft22ekvR4+fNjPV7x4cT++cuXK7owSIaRmUiYCIiACIiACIpAcAnIQk8NRZxEBERABEciFAA4eKZ9sOHz79+93pw+nkAgkRgQQh5Gm9CVLlnRVVdJZ2dSoPhewelkEREAEREAEUkBADmIKoOqUIiACIiACIiACIiACIiACIhBGAkXDOGiNWQREQAREQAREQAREQAREQAREIPkE5CAmn6nOKAIiIAIiIAIiIAIiIAIiIAKhJCAHMZTLpkGLgAiIgAiIgAiIgAiIgAiIQPIJyEFMPlOdUQREQAREQAREQAREQAREQARCSeD/APoOrO1PpyBOAAAAAElFTkSuQmCC" } }, "cell_type": "markdown", "id": "f03698cb-c592-4357-b4ad-a4492fc78469", "metadata": {}, "source": [ "![Screenshot 2023-03-10 at 9.46.04 PM.png](attachment:689d27b5-9f47-4551-ada3-c47a8287b037.png)" ] }, { "cell_type": "markdown", "id": "87b9d2f0-6543-405e-a277-9d6d63bbedb7", "metadata": {}, "source": [ "## Logical: Relational schema" ] }, { "attachments": { "c8becb6f-c574-470b-b1c3-c1b693d5cd1b.png": { "image/png": "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AjYuS3TXkrUjARIgAW8S4Kgrbx53tpoESIAESIAEPEGAio4nDjMbSQIkQAIkQALeJEBFx5vHna0mARIgARIgAU8QoKLjicPMRpIACZAACZCANwlQ0fHmcWerSYAESIAESMATBKjoeOIws5EkQAIkQAIk4E0CVHS8edzZahIgARIgARLwBAEqOp44zGwkCZAACZAACXiTABUdbx53tpoESIAESIAEPEGAio4nDjMbSQIkQAIkQALeJEBFx5vHna0mARIgARIgAU8QoKLjicPMRpIACZAACZCANwlQ0fHmcWerSYAESIAESMATBKjoeOIws5EkQAIkQAIk4E0CVHS8edzZahIgARIgARLwBAEqOp44zGwkCSQl4DiOvPnmm/LXX38lXRgFcxYuXCibN2/WmgwaNEiGDBkSBbViFUiABGKNABWdWDtirC8JRIjApUuXZMCAAfLnn39GqMTIFvP222/LihUrtFAoOY8++mhkd8DSSIAEPEGAio4nDjMbSQJJCdx11106s1GjRnLmzBlp27atfPzxx1K7dm3ZsGGD7N+/X7p06SIlSpSQli1bytKlS3X99evXS69evWT06NFSrlw5qVWrlvz000+67MiRI/LQQw9JsWLFdP4PP/zg2/Hzzz8vlSpVkuuvv15eeukl3/x9+/ZJq1atpGDBgtKuXTstC5amL7/8UkaMGCFz586V6dOny5w5c3SbAwcOSOvWrSVfvnxa1rJly3R+qHr5dsYJEiABzxGgouO5Q84Gk8B/CYwdO1Ynpk2bJjly5JCNGzfK4MGD5d5775UyZcrI+PHjVWFZu3at9OjRQ/r16yfo7jp9+rQqHlCEPvvsMyldurQ899xzWtakSZMkZ86cAqXjvvvukwcffFDnr1u3ThYtWiQfffSRxMfHy4QJE3zKUadOnVQBgrJUoUIFuf/++6Vr165Sp04d+dvf/iZNmzaVXbt2ya+//qplYf3q1avL7t27db/t27eXgwcPhqyXbsgvEiABTxKI82Sr2WgSIAEpVaqUUoBV5rLLLtNpdA/17t1bp2+//XapUaOG5MqVS6pVqyZbt26VU6dO6TJYU1577TXJmjWrPP7449KzZ0+dD+sMlA5I3759pUmTJjqN9WfMmCHXXHONHDt2TK1Ea9asUQXr+++/ly+++EKyZ88uw4YNk9y5c0uBAgV0v0WKFJE8efJo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" } }, "cell_type": "markdown", "id": "cc007081-c5f4-4c26-b5a4-f137a73238ff", "metadata": {}, "source": [ "![Screenshot 2023-03-10 at 9.46.29 PM.png](attachment:c8becb6f-c574-470b-b1c3-c1b693d5cd1b.png)" ] }, { "cell_type": "markdown", "id": "7b1e5305-7f4b-42b5-ae5d-d5888a2504a5", "metadata": {}, "source": [ "## Physical: Relational tables" ] }, { "cell_type": "code", "execution_count": null, "id": "8e7f9066-49ef-4f2b-993d-755d0a269800", "metadata": {}, "outputs": [], "source": [ "from DATA225utils import make_connection, dataframe_query" ] }, { "cell_type": "code", "execution_count": null, "id": "388ed0ae-02e7-4262-ae0f-de8f28831dc5", "metadata": {}, "outputs": [], "source": [ "conn = make_connection(config_file = 'CarDealership.ini')\n", "cursor = conn.cursor()" ] }, { "cell_type": "code", "execution_count": null, "id": "6eaa3dd4-cf82-4f72-a5e4-26d8927ad4e9", "metadata": {}, "outputs": [], "source": [ "cursor.execute('DROP TABLE IF EXISTS car')\n", "cursor.execute('DROP TABLE IF EXISTS transaction')\n", "cursor.execute('DROP TABLE IF EXISTS customer')\n", "cursor.execute('DROP TABLE IF EXISTS salesperson')" ] }, { "cell_type": "code", "execution_count": null, "id": "109eb66d-99e4-4748-845b-6e6639ecfba1", "metadata": {}, "outputs": [], "source": [ "cursor.execute( \n", " \"\"\"\n", " CREATE TABLE salesperson\n", " (\n", " id VARCHAR(4) NOT NULL,\n", " name VARCHAR(32) NOT NULL,\n", " PRIMARY KEY (id)\n", " )\n", " \"\"\"\n", " )\n", "\n", "cursor.execute( \n", " \"\"\"\n", " INSERT INTO salesperson\n", " VALUES ('SP11', 'Sarah'),\n", " ('SP22', 'Leslie'),\n", " ('SP33', 'Steve'),\n", " ('SP44', 'Judy'),\n", " ('SP55', 'Bruno')\n", "\n", " \"\"\"\n", " )\n", "\n", "conn.commit()\n", "\n", "_, df = dataframe_query(conn, 'SELECT * FROM salesperson')\n", "df" ] }, { "cell_type": "code", "execution_count": null, "id": "d159b236-6f59-444b-8207-48bb832f52d1", "metadata": {}, "outputs": [], "source": [ "cursor.execute( \n", " \"\"\"\n", " CREATE TABLE customer\n", " (\n", " id VARCHAR(4) NOT NULL,\n", " name VARCHAR(32) NOT NULL,\n", " gender CHAR NOT NULL,\n", " PRIMARY KEY (id)\n", " )\n", " \"\"\"\n", " )\n", "\n", "cursor.execute( \n", " \"\"\"\n", " INSERT INTO customer\n", " VALUES ('C111', 'Ron', 'm'),\n", " ('C222', 'Mara', 'f'),\n", " ('C333', 'Tom', 'm'),\n", " ('C444', 'Susan', 'f'),\n", " ('C555', 'Marsha', 'f'),\n", " ('C666', 'Max', 'm'),\n", " ('C777', 'Arnold', 'm')\n", "\n", " \"\"\"\n", " )\n", "\n", "conn.commit()\n", "\n", "_, df = dataframe_query(conn, 'SELECT * FROM customer')\n", "df" ] }, { "cell_type": "code", "execution_count": null, "id": "fa84b451-d0f6-4968-bb21-6bfd70ed9cbf", "metadata": {}, "outputs": [], "source": [ "cursor.execute( \n", " \"\"\"\n", " CREATE TABLE transaction\n", " (\n", " id VARCHAR(5) NOT NULL,\n", " month INT NOT NULL,\n", " customer_id VARCHAR(4) NOT NULL,\n", " salesperson_id VARCHAR(4) NOT NULL,\n", " PRIMARY KEY (id),\n", " FOREIGN KEY (salesperson_id) REFERENCES salesperson(id),\n", " FOREIGN KEY (customer_id) REFERENCES customer(id)\n", " )\n", " \"\"\"\n", " )\n", "\n", "cursor.execute( \n", " \"\"\"\n", " INSERT INTO transaction\n", " VALUES ('T0001', 9, 'C444', 'SP22'),\n", " ('T0002', 9, 'C333', 'SP11'),\n", " ('T0003', 9, 'C444', 'SP55'),\n", " ('T0004', 9, 'C222', 'SP22'),\n", " ('T0005', 9, 'C666', 'SP33'),\n", " ('T0006', 9, 'C111', 'SP55'),\n", " ('T0007', 9, 'C333', 'SP44'),\n", " ('T0008', 9, 'C222', 'SP44'),\n", " ('T0009', 9, 'C555', 'SP22'),\n", " ('T0010', 9, 'C777', 'SP11'),\n", " ('T0011', 9, 'C222', 'SP22'),\n", " ('T0012', 9, 'C777', 'SP11'),\n", " ('T0013', 9, 'C777', 'SP11')\n", " \"\"\"\n", " )\n", "\n", "conn.commit()\n", "\n", "_, df = dataframe_query(conn, 'SELECT * FROM transaction')\n", "df" ] }, { "cell_type": "code", "execution_count": null, "id": "90abefd1-c84a-474d-ae70-0d1367df156d", "metadata": {}, "outputs": [], "source": [ "cursor.execute( \n", " \"\"\"\n", " CREATE TABLE car\n", " (\n", " vin VARCHAR(8) NOT NULL,\n", " make VARCHAR(16) NOT NULL,\n", " model VARCHAR(16) NOT NULL,\n", " year INT NOT NULL,\n", " price DOUBLE NOT NULL,\n", " transaction_id VARCHAR(5) NOT NULL,\n", " PRIMARY KEY (VIN),\n", " FOREIGN KEY (transaction_id) REFERENCES transaction(id)\n", " )\n", " \"\"\"\n", " )\n", "\n", "cursor.execute( \n", " \"\"\"\n", " INSERT INTO car\n", " VALUES ('VIN11111', 'Ford', 'Taurus', 2016, 10000, 'T0005'),\n", " ('VIN12345', 'Chevy', 'Nova', 1975, 1000, 'T0002'),\n", " ('VIN22222', 'Ford', 'Fiesta', 2016, 10000, 'T0007'),\n", " ('VIN33333', 'Volvo', 'X90', 2015, 11000, 'T0004'),\n", " ('VIN44444', 'Volvo', '850', 1996, 5000, 'T0001'),\n", " ('VIN45678', 'Volvo', '240 DL', 1983, 1000, 'T0011'),\n", " ('VIN55555', 'Volvo', 'S60', 2016, 16000, 'T0006'),\n", " ('VIN66666', 'Honda', 'Accord', 2014, 2200, 'T0001'),\n", " ('VIN77777', 'Honda', 'Civic', 2005, 5000, 'T0010'),\n", " ('VIN88888', 'Toyota', 'Prius', 2015, 15000, 'T0002'),\n", " ('VIN98765', 'Volkswagen', 'Beetle', 1965, 200, 'T0010'),\n", " ('VIN99999', 'Ford', 'Focus', 2012, 700, 'T0007')\n", " \"\"\"\n", " )\n", "\n", "conn.commit()\n", "\n", "_, df = dataframe_query(conn, 'SELECT * FROM car')\n", "df" ] }, { "cell_type": "markdown", "id": "d48f7464-487d-4a24-9ba5-ba48203b2d24", "metadata": {}, "source": [ "## Queries" ] }, { "cell_type": "markdown", "id": "55ee826b-c5da-406f-a884-20749c18ed35", "metadata": {}, "source": [ "### **1.** In the month of September, which salesperson sold the **most** cars and how many?" ] }, { "cell_type": "markdown", "id": "18d32af9-2735-4db0-ae11-6eebbe8e5f34", "metadata": {}, "source": [ "#### Before we can tell who has sold the most cars, we must know **how many cars** each salesperson sold in September." ] }, { "cell_type": "code", "execution_count": null, "id": "b5bcf50f-648e-42d9-9959-8450e292967d", "metadata": {}, "outputs": [], "source": [ "_, df = dataframe_query(conn, \n", " \"\"\"\n", " SELECT sp.name AS spname, count(sp.name) AS cars_sold_in_sept \n", " FROM salesperson sp, transaction t\n", " WHERE t.salesperson_id = sp.id\n", " AND t.month = 9\n", " GROUP BY spname\n", " ORDER BY spname\n", " \"\"\"\n", " )\n", "\n", "df" ] }, { "cell_type": "markdown", "id": "d0d9e703-3ed2-46a7-85f5-db47cb41b755", "metadata": {}, "source": [ "#### Let's make that a view." ] }, { "cell_type": "code", "execution_count": null, "id": "c2db1a4b-8238-4499-9a4f-6d2e0be5cf51", "metadata": {}, "outputs": [], "source": [ "cursor.execute('DROP VIEW IF EXISTS salesperson_sales_sept')\n", "\n", "cursor.execute( \n", " \"\"\"\n", " CREATE VIEW salesperson_sales_sept AS\n", " SELECT sp.name AS spname, count(sp.name) AS cars_sold_in_sept \n", " FROM salesperson sp, transaction t\n", " WHERE t.salesperson_id = sp.id\n", " AND t.month = 9\n", " GROUP BY spname\n", " \"\"\"\n", " )\n", "\n", "_, df = dataframe_query(conn, 'SELECT * FROM salesperson_sales_sept')\n", "\n", "df" ] }, { "cell_type": "markdown", "id": "9d2ab05e-946a-4b6c-a28b-8c867e79ed15", "metadata": {}, "source": [ "#### The maximum number of vehicles sold in September." ] }, { "cell_type": "code", "execution_count": null, "id": "743fe6ee-90ea-499e-9154-963d42c5af8a", "metadata": {}, "outputs": [], "source": [ "_, df = dataframe_query(conn, \n", " \"\"\" \n", " SELECT MAX(cars_sold_in_sept) \n", " FROM salesperson_sales_sept\n", " \"\"\"\n", " )\n", "\n", "df" ] }, { "cell_type": "markdown", "id": "906ed413-80e4-44c5-90b3-d3172553854e", "metadata": {}, "source": [ "#### Who sold the most vehicles in September?" ] }, { "cell_type": "code", "execution_count": null, "id": "0d61f1c6-41ee-4fe7-ace0-dc7e1243049c", "metadata": {}, "outputs": [], "source": [ "_, df = dataframe_query(conn, \n", " \"\"\" \n", " SELECT * \n", " FROM salesperson_sales_sept\n", " WHERE cars_sold_in_sept = (\n", " SELECT MAX(cars_sold_in_sept)\n", " FROM salesperson_sales_sept)\n", " ORDER BY spname\n", " \"\"\"\n", " )\n", "\n", "df" ] }, { "cell_type": "markdown", "id": "e6274f09-2921-4254-a199-c8aafc1e206a", "metadata": {}, "source": [ "### **2.** Which salespersons in September sold **fewer than the average** number of cars in September? " ] }, { "cell_type": "code", "execution_count": null, "id": "a762c6c8-d6d3-4f5a-ab02-ec762e839272", "metadata": {}, "outputs": [], "source": [ "_, df = dataframe_query(conn, \n", " \"\"\" \n", " SELECT AVG(cars_sold_in_sept)\n", " FROM salesperson_sales_sept\n", " \"\"\"\n", " )\n", "\n", "df" ] }, { "cell_type": "code", "execution_count": null, "id": "5f37ecfb-e76c-49ff-bea8-329cdb6cb4c5", "metadata": {}, "outputs": [], "source": [ "_, df = dataframe_query(conn, \n", " \"\"\" \n", " SELECT * \n", " FROM salesperson_sales_sept\n", " WHERE cars_sold_in_sept < (\n", " SELECT AVG(cars_sold_in_sept)\n", " FROM salesperson_sales_sept)\n", " ORDER BY spname\n", " \"\"\"\n", " )\n", "\n", "df" ] }, { "cell_type": "markdown", "id": "407356fd-09df-40d5-80a2-90a21f2e9ff7", "metadata": {}, "source": [ "### **3.** In September, what is the **number and average price** of cars sold by **each salesperson** in each group consisting of a **car make and model** and a **customer gender**? Only consider salespersons who **sold two or more cars** in a group." ] }, { "cell_type": "markdown", "id": "9f647540-f35a-48e1-8163-0ef0252d57a3", "metadata": {}, "source": [ "#### First, let's see who sold what of each car make and model to each customer gender." ] }, { "cell_type": "code", "execution_count": null, "id": "191bd3a4-81eb-4cff-8e15-843ada2f6695", "metadata": {}, "outputs": [], "source": [ "_, df = dataframe_query(conn, \n", " \"\"\" \n", " SELECT sp.name AS spname, \n", " car.make, car.model, c.gender AS cgender, car.price\n", " FROM salesperson sp, transaction t, car, customer c\n", " WHERE t.salesperson_id = sp.id\n", " AND t.id = car.transaction_id\n", " AND t.customer_id = c.id\n", " AND t.month = 9\n", " ORDER BY spname, car.make, cgender\n", " \"\"\"\n", " )\n", "\n", "df" ] }, { "cell_type": "markdown", "id": "2e86073c-982b-43ab-8558-796d1220b9bf", "metadata": {}, "source": [ "#### Now we can group the results by salesperson, car make, and customer gender, and compute the average car price in each group." ] }, { "cell_type": "code", "execution_count": null, "id": "d7b8827c-97d9-49dc-9b94-03ee51c29e09", "metadata": {}, "outputs": [], "source": [ "_, df = dataframe_query(conn,\n", " \"\"\" \n", " SELECT sp.name AS spname, \n", " car.make, gender AS cgender,\n", " count(car.make) AS cars_sold, avg(car.price)\n", " FROM salesperson sp, transaction t, car, customer c\n", " WHERE t.salesperson_id = sp.id\n", " AND t.id = car.transaction_id\n", " AND t.customer_id = c.id\n", " AND t.month = 9\n", " GROUP BY spname, car.make, cgender\n", " ORDER BY spname, car.make, cgender\n", " \"\"\"\n", " )\n", "\n", "df" ] }, { "cell_type": "markdown", "id": "152130aa-a391-4294-b8c7-e41e8444afb5", "metadata": {}, "source": [ "#### We only want to see the groups where at least 2 cars were sold." ] }, { "cell_type": "code", "execution_count": null, "id": "b9697dec-1b9c-4e71-919c-20f1768953e5", "metadata": {}, "outputs": [], "source": [ "_, df = dataframe_query(conn, \n", " \"\"\" \n", " SELECT sp.name AS spname, \n", " car.make, gender AS cgender,\n", " count(car.make) AS cars_sold, avg(car.price)\n", " FROM salesperson sp, transaction t, car, customer c\n", " WHERE t.salesperson_id = sp.id\n", " AND t.id = car.transaction_id\n", " AND t.customer_id = c.id\n", " AND t.month = 9\n", " GROUP BY spname, car.make, cgender\n", " HAVING cars_sold >= 2\n", " ORDER BY spname, car.make, cgender\n", " \"\"\"\n", " )\n", "\n", "df" ] }, { "cell_type": "code", "execution_count": null, "id": "1e9260eb-c269-47df-9cc6-157bd6c7c257", "metadata": {}, "outputs": [], "source": [ "cursor.close()\n", "conn.close()" ] }, { "cell_type": "code", "execution_count": null, "id": "51f963fd-6a28-4435-a6b9-ac4fecdb2776", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.13" } }, "nbformat": 4, "nbformat_minor": 5 }