{"id":17356808,"url":"https://github.com/thujuli/car-dealer-db","last_synced_at":"2025-03-27T15:35:36.959Z","repository":{"id":181943765,"uuid":"667697793","full_name":"thujuli/car-dealer-db","owner":"thujuli","description":"A simple database design for used car dealers","archived":false,"fork":false,"pushed_at":"2023-07-23T13:35:42.000Z","size":227,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-01T19:23:40.483Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/thujuli.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-07-18T05:36:15.000Z","updated_at":"2023-07-23T13:39:58.000Z","dependencies_parsed_at":"2024-12-06T10:42:19.403Z","dependency_job_id":"588e7db4-1abb-4d21-a66f-66c4aef751cd","html_url":"https://github.com/thujuli/car-dealer-db","commit_stats":null,"previous_names":["thujuli/car-dealer-db"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thujuli%2Fcar-dealer-db","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thujuli%2Fcar-dealer-db/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thujuli%2Fcar-dealer-db/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thujuli%2Fcar-dealer-db/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/thujuli","download_url":"https://codeload.github.com/thujuli/car-dealer-db/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245872574,"owners_count":20686410,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-15T18:58:50.003Z","updated_at":"2025-03-27T15:35:36.942Z","avatar_url":"https://github.com/thujuli.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# DATABASE DESIGN FOR USED CAR DEALERS\n\n## Backgound\n\nThis my final project for RDMS using PostgreSQL.....\n\n## Objective\n\n- Create database design for used car dealers\n- Implement database design to database server\n- Create and input dummy data for each table\n- Test Backup and restore database\n- Creating Transactional Query and Analytical Query\n\n## Requirements\n\n- PostgreSQL\n- PostgreSQL Client (psql, DBeaver, pgAdmin etc)\n- Python3\n\n## Create Database Design\n\n### Entities and Attributes\n\n![Entities and Attributes](diagram/images/entities-attributes.png?raw=true \"Entities and Attributes\")\n\n### Relations\n\n- One City can have many Users (Sellers and Buyers)\n- One Seller can own many Cars\n- One Car can have many Ads\n- One Buyer can bid many Ads\n- One Advertisment offered be many Buyers\n\n### Table Structure and Relations\n\n![Table Structure and Relations](diagram/images/diagram.png?raw=true \"Table Structure and Relations\")\n\n### Business Rules\n\n#### Cities\n\n- All fields cannot be empty\n\n#### Sellers\n\n- Primary key auto increment\n- All fields cannot be empty\n- Phone number cannot be the same (unique)\n\n#### Buyers\n\n- Primary key auto increment\n- All fields cannot be empty\n- Phone number cannot be the same (unique)\n\n#### Cars\n\n- Primary key auto increment\n- All fields cannot be empty\n- Price must be greater than 0\n\n#### Ads\n\n- Primary key auto increment\n- All fields cannot be empty\n- Default date is current date\n\n#### Bids\n\n- Primary key auto increment\n- All fields cannot be empty\n- Price must be greater than 0\n- Default date is current date\n- Status must be sent or cancel\n- Default status is sent\n\n## Setup Project\n\n#### Clone this repository\n\n```bash\n# clone using ssh\ngit clone git@github.com:thujuli/car-dealer-db.git\n\n# clone using https\ngit clone https://github.com/thujuli/car-dealer-db.git\n```\n\n#### Change directory to this repository\n\n```bash\ncd car-dealer-db/\n```\n\n## Implementation To The Database Server\n\n#### Create new database using psql\n\n```bash\npsql --username=postgres --command=\"CREATE DATABASE car_dealer;\" --password\n```\n\n#### Create all tables from sql script\n\n```bash\npsql --username=postgres --dbname=car_dealer --password --file=sql/ddl.sql\n```\n\n#### Checks all tables already exists\n\n```bash\npsql --username=postgres --dbname=car_dealer --command=\"\\dt\" --password\n```\n\n## Create And Input Dummy Data For Each Table\n\n#### Create virtual environment\n\n```bash\npython -m venv .venv\n```\n\n#### Use the virtual environment\n\n```bash\nsource .venv/bin/activate\n```\n\n#### Install third party packages from requirements.txt\n\n```bash\npip install -r requirements.txt\n```\n\n#### Change directory to dataset\n\n```bash\ncd dataset/\n```\n\n#### Run python script\n\n```bash\npython main.py\n```\n\n#### Checks all created csv files\n\n```bash\nls final/\n```\n\n#### Import csv files (dummy data) for each table\n\n```bash\n# import for table cities\npsql --username=postgres --dbname=car_dealer --command=\"\\copy cities from 'final/cities.csv' delimiter ',' csv header\" --password\n\n# import for table sellers\npsql --username=postgres --dbname=car_dealer --command=\"\\copy sellers from 'final/sellers.csv' delimiter ',' csv header\" --password\n\n# import for table buyers\npsql --username=postgres --dbname=car_dealer --command=\"\\copy buyers from 'final/buyers.csv' delimiter ',' csv header\" --password\n\n# import for table cars\npsql --username=postgres --dbname=car_dealer --command=\"\\copy cars from 'final/cars.csv' delimiter ',' csv header\" --password\n\n# import for table ads\npsql --username=postgres --dbname=car_dealer --command=\"\\copy ads from 'final/ads.csv' delimiter ',' csv header\" --password\n\n# import for table bids\npsql --username=postgres --dbname=car_dealer --command=\"\\copy bids from 'final/bids.csv' delimiter ',' csv header\" --password\n```\n\n#### Test queries to each table\n\n```bash\n# queries table cities\npsql --username=postgres --dbname=car_dealer --command=\"select * from cities;\" --password\n\n# queries table sellers\npsql --username=postgres --dbname=car_dealer --command=\"select * from sellers;\" --password\n\n# queries table buyers\npsql --username=postgres --dbname=car_dealer --command=\"select * from buyers;\" --password\n\n# queries table cars\npsql --username=postgres --dbname=car_dealer --command=\"select * from cars;\" --password\n\n# queries table ads\npsql --username=postgres --dbname=car_dealer --command=\"select * from ads;\" --password\n\n# queries table bids\npsql --username=postgres --dbname=car_dealer --command=\"select * from bids;\" --password\n```\n\n#### Back to main directory\n\n```bash\ncd ..\n```\n\n## Backup And Restore Database\n\n#### Backup database using pg_dump\n\n```bash\npg_dump --username=postgres --dbname=car_dealer --password \u003e backup/db.sql\n```\n\n#### Create a new database to restore the database\n\n```bash\npsql --username=postgres --command=\"CREATE DATABASE restore_car_dealer;\" --password\n```\n\n#### Restore database using psql\n\n```bash\npg_dump --username=postgres --dbname=restore_car_dealer --file=backup/db.sql --password \u003e backup/db.sql\n```\n\n#### Test queries to each table\n\n```bash\n# queries table cities\npsql --username=postgres --dbname=restore_car_dealer --command=\"select * from cities;\" --password\n\n# queries table sellers\npsql --username=postgres --dbname=restore_car_dealer --command=\"select * from sellers;\" --password\n\n# queries table buyers\npsql --username=postgres --dbname=restore_car_dealer --command=\"select * from buyers;\" --password\n\n# queries table cars\npsql --username=postgres --dbname=restore_car_dealer --command=\"select * from cars;\" --password\n\n# queries table ads\npsql --username=postgres --dbname=restore_car_dealer --command=\"select * from ads;\" --password\n\n# queries table bids\npsql --username=postgres --dbname=restore_car_dealer --command=\"select * from bids;\" --password\n```\n\n## Transactional Query\n\n#### Look for cars with a production date greater than 2015\n\n```sql\nSELECT * FROM cars\nWHERE \"year\" \u003e 2015;\n```\n\n#### Add one new record to the Bids Table\n\n```sql\n/* insert record */\nINSERT INTO bids (id, buyer_id, ad_id, price, status)\nVALUES (101, 3, 25,350000000, 'sent' );\n\n/* query select */\nSELECT * FROM  bids;\n```\n\n#### Find all cars owned by one user and sort by newest\n\n```sql\n/* example, seller name is 'Damu Samosir' */\nSELECT c.id AS card_id, c.brand, c.model, c.year, c.price, a.date\nFROM cars AS c\nJOIN sellers AS s ON c.seller_id = s.id\nJOIN ads AS a ON c.id = a.car_id\nWHERE s.name = 'Damu Samosir'\nORDER BY a.date DESC;\n```\n\n#### Find all cars by model name and sort by low price\n\n```sql\n/*example model name is 'yaris'*/\nSELECT *\nFROM cars\nWHERE model ILIKE '%yaris%'\nORDER BY price ASC;\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthujuli%2Fcar-dealer-db","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fthujuli%2Fcar-dealer-db","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthujuli%2Fcar-dealer-db/lists"}