Базы данных | Задания для практического занятия 2
Использование инструмента ERD в pgAdmin 4
Задание:
- Используя инструмент ERD в pgAdmin 4, создайте новый проект ERD.
- Создайте таблицы, как определено в схеме, указав соответствующие типы данных и первичные ключи.
- Установите связи между таблицами, создав внешние ключи, как указано. Используйте инструмент “один-ко-многим” для каждого ограничения внешнего ключа.
- Автоматически выровняйте таблицы для лучшей читаемости.
- Сгенерируйте SQL DDL скрипт для этой схемы базы данных.
- Сохраните ваш проект ERD.
Вариант 1: Система управления библиотекой
Сценарий: Спроектируйте базу данных для небольшой библиотеки, чтобы управлять ее коллекцией книг, авторов, читателей и выдачей книг.
Схема базы данных:
- Таблицы:
Books
(Книги):book_id
(integer, Primary Key) - Уникальный идентификатор каждой книги.title
(character varying) - Название книги.isbn
(character varying) - Международный стандартный книжный номер.publication_year
(integer) - Год публикации.genre
(character varying) - Жанр книги.
Authors
(Авторы):author_id
(integer, Primary Key) - Уникальный идентификатор каждого автора.first_name
(character varying) - Имя автора.last_name
(character varying) - Фамилия автора.
Book_Authors
(Книги_Авторы): (Таблица-связка для отношения “многие-ко-многим” между книгами и авторами)book_id
(integer, Foreign Key referencingBooks(book_id)
)author_id
(integer, Foreign Key referencingAuthors(author_id)
)- (Составной первичный ключ:
book_id
,author_id
)
Borrowers
(Читатели):borrower_id
(integer, Primary Key) - Уникальный идентификатор каждого читателя.first_name
(character varying) - Имя читателя.last_name
(character varying) - Фамилия читателя.address
(character varying) - Адрес читателя.phone_number
(character varying) - Номер телефона читателя.
Loans
(Выдачи):loan_id
(integer, Primary Key) - Уникальный идентификатор каждой выдачи.book_id
(integer, Foreign Key referencingBooks(book_id)
)borrower_id
(integer, Foreign Key referencingBorrowers(borrower_id)
)loan_date
(date) - Дата выдачи книги.return_date
(date, Nullable) - Дата возврата книги (может быть null, если книга еще не возвращена).
- Связи:
- Один-ко-многим между
Authors
иBook_Authors
(Один автор может написать несколько книг). - Один-ко-многим между
Books
иBook_Authors
(Одна книга может быть написана несколькими авторами). - Один-ко-многим между
Books
иLoans
(Одна книга может быть выдана несколько раз). - Один-ко-многим между
Borrowers
иLoans
(Один читатель может взять несколько книг).
- Один-ко-многим между
Вариант 2: База данных интернет-магазина книг
Сценарий: Спроектируйте базу данных для интернет-магазина книг, чтобы управлять книгами, авторами, покупателями, заказами и издателями.
Схема базы данных:
- Таблицы:
Books
(Книги):book_id
(integer, Primary Key)title
(character varying)isbn
(character varying)publication_year
(integer)price
(numeric)publisher_id
(integer, Foreign Key referencingPublishers(publisher_id)
)
Authors
(Авторы):author_id
(integer, Primary Key)first_name
(character varying)last_name
(character varying)
Book_Authors
(Книги_Авторы): (Таблица-связка)book_id
(integer, Foreign Key referencingBooks(book_id)
)author_id
(integer, Foreign Key referencingAuthors(author_id)
)- (Составной первичный ключ:
book_id
,author_id
)
Customers
(Покупатели):customer_id
(integer, Primary Key)first_name
(character varying)last_name
(character varying)email
(character varying)address
(character varying)
Publishers
(Издатели):publisher_id
(integer, Primary Key)publisher_name
(character varying)publisher_address
(character varying)
Orders
(Заказы):order_id
(integer, Primary Key)customer_id
(integer, Foreign Key referencingCustomers(customer_id)
)order_date
(date)
Order_Items
(Позиции_заказа): (Таблица-связка для отношения “многие-ко-многим” между заказами и книгами)order_item_id
(integer, Primary Key) - Уникальный идентификатор каждой позиции в заказе.order_id
(integer, Foreign Key referencingOrders(order_id)
)book_id
(integer, Foreign Key referencingBooks(book_id)
)quantity
(integer)price
(numeric) - цена книги на момент заказа (может отличаться от текущей цены).
- Связи:
- Один-ко-многим между
Authors
иBook_Authors
. - Один-ко-многим между
Books
иBook_Authors
. - Один-ко-многим между
Publishers
иBooks
. - Один-ко-многим между
Customers
иOrders
. - Один-ко-многим между
Orders
иOrder_Items
. - Один-ко-многим между
Books
иOrder_Items
.
- Один-ко-многим между
Вариант 3: База данных системы регистрации на курсы университета
Сценарий: Спроектируйте базу данных для университета, чтобы управлять студентами, курсами, преподавателями, факультетами и записями на курсы.
Схема базы данных:
- Таблицы:
Students
(Студенты):student_id
(integer, Primary Key)first_name
(character varying)last_name
(character varying)major
(character varying)
Courses
(Курсы):course_id
(integer, Primary Key)course_name
(character varying)course_code
(character varying)credits
(integer)department_id
(integer, Foreign Key referencingDepartments(department_id)
)
Professors
(Преподаватели):professor_id
(integer, Primary Key)first_name
(character varying)last_name
(character varying)department_id
(integer, Foreign Key referencingDepartments(department_id)
)
Departments
(Факультеты):department_id
(integer, Primary Key)department_name
(character varying)building
(character varying)
Enrollments
(Записи): (Таблица-связка - представляет студента, записанного на курс, который ведет преподаватель)enrollment_id
(integer, Primary Key) - Уникальный идентификатор каждой записи.student_id
(integer, Foreign Key referencingStudents(student_id)
)course_id
(integer, Foreign Key referencingCourses(course_id)
)professor_id
(integer, Foreign Key referencingProfessors(professor_id)
)semester
(character varying) - например, “Осень 2024”, “Весна 2025”.grade
(character varying, Nullable) - Оценка, полученная студентом (может быть null, если курс еще не завершен).
- Связи:
- Один-ко-многим между
Departments
иCourses
. - Один-ко-многим между
Departments
иProfessors
. - Один-ко-многим между
Students
иEnrollments
. - Один-ко-многим между
Courses
иEnrollments
. - Один-ко-многим между
Professors
иEnrollments
.
- Один-ко-многим между
Вариант 4: База данных сервиса потоковой музыки
Сценарий: Спроектируйте базу данных для сервиса потоковой музыки, чтобы управлять исполнителями, альбомами, песнями, пользователями и плейлистами.
Схема базы данных:
- Таблицы:
Artists
(Исполнители):artist_id
(integer, Primary Key)artist_name
(character varying)genre
(character varying)
Albums
(Альбомы):album_id
(integer, Primary Key)album_name
(character varying)artist_id
(integer, Foreign Key referencingArtists(artist_id)
)release_year
(integer)
Songs
(Песни):song_id
(integer, Primary Key)song_name
(character varying)album_id
(integer, Foreign Key referencingAlbums(album_id)
)track_number
(integer)duration
(integer) - Длительность в секундах.
Users
(Пользователи):user_id
(integer, Primary Key)username
(character varying, unique)email
(character varying, unique)registration_date
(date)
Playlists
(Плейлисты):playlist_id
(integer, Primary Key)playlist_name
(character varying)user_id
(integer, Foreign Key referencingUsers(user_id)
)creation_date
(date)
Playlist_Songs
(Песни_плейлиста): (Таблица-связка)playlist_id
(integer, Foreign Key referencingPlaylists(playlist_id)
)song_id
(integer, Foreign Key referencingSongs(song_id)
)- (Составной первичный ключ:
playlist_id
,song_id
) added_date
(timestamp)
- Связи:
- Один-ко-многим между
Artists
иAlbums
. - Один-ко-многим между
Albums
иSongs
. - Один-ко-многим между
Users
иPlaylists
. - Один-ко-многим между
Playlists
иPlaylist_Songs
. - Один-ко-многим между
Songs
иPlaylist_Songs
.
- Один-ко-многим между
Вариант 5: База данных каталога товаров для электронной коммерции
Сценарий: Спроектируйте базу данных для платформы электронной коммерции, чтобы управлять товарами, категориями, брендами, поставщиками и отзывами о товарах.
Схема базы данных:
- Таблицы:
Products
(Товары):product_id
(integer, Primary Key)product_name
(character varying)description
(text)price
(numeric)category_id
(integer, Foreign Key referencingCategories(category_id)
)brand_id
(integer, Foreign Key referencingBrands(brand_id)
)supplier_id
(integer, Foreign Key referencingSuppliers(supplier_id)
)
Categories
(Категории):category_id
(integer, Primary Key)category_name
(character varying)
Brands
(Бренды):brand_id
(integer, Primary Key)brand_name
(character varying)
Suppliers
(Поставщики):supplier_id
(integer, Primary Key)supplier_name
(character varying)supplier_contact
(character varying)
Product_Reviews
(Отзывы_о_товарах):review_id
(integer, Primary Key)product_id
(integer, Foreign Key referencingProducts(product_id)
)rating
(integer) - например, от 1 до 5 звезд.comment
(text, Nullable)review_date
(timestamp)
- Связи:
- Один-ко-многим между
Categories
иProducts
. - Один-ко-многим между
Brands
иProducts
. - Один-ко-многим между
Suppliers
иProducts
. - Один-ко-многим между
Products
иProduct_Reviews
.
- Один-ко-многим между
Вариант 6: База данных системы продажи билетов на мероприятия
Сценарий: Спроектируйте базу данных для системы продажи билетов на мероприятия, чтобы управлять событиями, местами проведения, билетами, покупателями и заказами.
Схема базы данных:
- Таблицы:
Events
(События):event_id
(integer, Primary Key)event_name
(character varying)event_date
(timestamp)venue_id
(integer, Foreign Key referencingVenues(venue_id)
)
Venues
(Места_проведения):venue_id
(integer, Primary Key)venue_name
(character varying)venue_address
(character varying)capacity
(integer)
Tickets
(Билеты):ticket_id
(integer, Primary Key)event_id
(integer, Foreign Key referencingEvents(event_id)
)ticket_type
(character varying) - например, “Обычный вход”, “VIP”.price
(numeric)quantity_available
(integer)
Customers
(Покупатели):customer_id
(integer, Primary Key)first_name
(character varying)last_name
(character varying)email
(character varying)
Orders
(Заказы):order_id
(integer, Primary Key)customer_id
(integer, Foreign Key referencingCustomers(customer_id)
)order_date
(timestamp)
Order_Tickets
(Билеты_заказа): (Таблица-связка)order_ticket_id
(integer, Primary Key) - Уникальный идентификатор каждой позиции билета в заказе.order_id
(integer, Foreign Key referencingOrders(order_id)
)ticket_id
(integer, Foreign Key referencingTickets(ticket_id)
)quantity
(integer)price
(numeric) - Цена билета на момент заказа.
- Связи:
- Один-ко-многим между
Venues
иEvents
. - Один-ко-многим между
Events
иTickets
. - Один-ко-многим между
Customers
иOrders
. - Один-ко-многим между
Orders
иOrder_Tickets
. - Один-ко-многим между
Tickets
иOrder_Tickets
.
- Один-ко-многим между
Вариант 7: База данных системы бронирования отелей
Сценарий: Спроектируйте базу данных для отеля, чтобы управлять номерами, гостями, бронированиями и удобствами.
Схема базы данных:
- Таблицы:
Rooms
(Номера):room_id
(integer, Primary Key)room_number
(character varying, unique within hotel) - уникальный в пределах отеляroom_type
(character varying) - например, “Одноместный”, “Двухместный”, “Люкс”.capacity
(integer) - вместимостьprice_per_night
(numeric) - цена за ночь
Guests
(Гости):guest_id
(integer, Primary Key)first_name
(character varying)last_name
(character varying)phone_number
(character varying)email
(character varying)
Reservations
(Бронирования):reservation_id
(integer, Primary Key)guest_id
(integer, Foreign Key referencingGuests(guest_id)
)room_id
(integer, Foreign Key referencingRooms(room_id)
)check_in_date
(date) - дата заездаcheck_out_date
(date) - дата выездаnumber_of_guests
(integer) - количество гостейtotal_price
(numeric) - общая стоимость
Amenities
(Удобства):amenity_id
(integer, Primary Key)amenity_name
(character varying) - например, “Wi-Fi”, “Завтрак”, “Парковка”.
Room_Amenities
(Удобства_номеров): (Таблица-связка для отношения “многие-ко-многим” между номерами и удобствами)room_id
(integer, Foreign Key referencingRooms(room_id)
)amenity_id
(integer, Foreign Key referencingAmenities(amenity_id)
)- (Составной первичный ключ:
room_id
,amenity_id
)
- Связи:
- Один-ко-многим между
Rooms
иReservations
. - Один-ко-многим между
Guests
иReservations
. - Один-ко-многим между
Rooms
иRoom_Amenities
. - Один-ко-многим между
Amenities
иRoom_Amenities
.
- Один-ко-многим между
Вариант 8: База данных системы бронирования авиабилетов
Сценарий: Спроектируйте базу данных для авиакомпании, чтобы управлять рейсами, аэропортами, самолетами, пассажирами и бронированиями.
Схема базы данных:
- Таблицы:
Flights
(Рейсы):flight_id
(integer, Primary Key)flight_number
(character varying, unique) - уникальный номер рейсаdeparture_airport_id
(integer, Foreign Key referencingAirports(airport_id)
) - аэропорт отправленияarrival_airport_id
(integer, Foreign Key referencingAirports(airport_id)
) - аэропорт прибытияdeparture_time
(timestamp) - время отправленияarrival_time
(timestamp) - время прибытияaircraft_id
(integer, Foreign Key referencingAircrafts(aircraft_id)
) - самолет
Airports
(Аэропорты):airport_id
(integer, Primary Key)airport_code
(character varying, unique) - например, “JFK”, “LAX”, “CDG”.airport_name
(character varying)city
(character varying)country
(character varying)
Aircrafts
(Самолеты):aircraft_id
(integer, Primary Key)model
(character varying) - например, “Boeing 737”, “Airbus A320”.capacity
(integer) - вместимость
Passengers
(Пассажиры):passenger_id
(integer, Primary Key)first_name
(character varying)last_name
(character varying)passport_number
(character varying, unique) - уникальный номер паспортаemail
(character varying)
Bookings
(Бронирования):booking_id
(integer, Primary Key)flight_id
(integer, Foreign Key referencingFlights(flight_id)
)passenger_id
(integer, Foreign Key referencingPassengers(passenger_id)
)booking_date
(timestamp) - дата бронированияseat_number
(character varying) - номер местаfare
(numeric) - стоимость билета
- Связи:
- Один-ко-многим между
Airports
иFlights
(для аэропортов отправления и прибытия - две связи). - Один-ко-многим между
Aircrafts
иFlights
. - Один-ко-многим между
Passengers
иBookings
. - Один-ко-многим между
Flights
иBookings
.
- Один-ко-многим между
Вариант 9: База данных социальной сети (упрощенная)
Сценарий: Спроектируйте базу данных для упрощенной социальной сети, чтобы управлять пользователями, постами, комментариями и лайками.
Схема базы данных:
- Таблицы:
Users
(Пользователи):user_id
(integer, Primary Key)username
(character varying, unique) - уникальное имя пользователяemail
(character varying, unique) - уникальный emailregistration_date
(timestamp) - дата регистрации
Posts
(Посты):post_id
(integer, Primary Key)user_id
(integer, Foreign Key referencingUsers(user_id)
)post_text
(text) - текст постаpost_timestamp
(timestamp) - время создания поста
Comments
(Комментарии):comment_id
(integer, Primary Key)post_id
(integer, Foreign Key referencingPosts(post_id)
)user_id
(integer, Foreign Key referencingUsers(user_id)
)comment_text
(text) - текст комментарияcomment_timestamp
(timestamp) - время создания комментария
Likes
(Лайки):like_id
(integer, Primary Key)post_id
(integer, Foreign Key referencingPosts(post_id)
)user_id
(integer, Foreign Key referencingUsers(user_id)
)like_timestamp
(timestamp)- (Уникальное ограничение:
post_id
,user_id
) - чтобы пользователь мог поставить лайк посту только один раз.
- Связи:
- Один-ко-многим между
Users
иPosts
. - Один-ко-многим между
Posts
иComments
. - Один-ко-многим между
Users
иComments
. - Один-ко-многим между
Posts
иLikes
. - Один-ко-многим между
Users
иLikes
.
- Один-ко-многим между
Вариант 10: База данных онлайн-рецептов
Сценарий: Спроектируйте базу данных для веб-сайта с онлайн-рецептами, чтобы управлять рецептами, ингредиентами, пользователями, создающими рецепты, и категориями.
Схема базы данных:
- Таблицы:
Recipes
(Рецепты):recipe_id
(integer, Primary Key)recipe_name
(character varying)description
(text)instructions
(text)category_id
(integer, Foreign Key referencingCategories(category_id)
)user_id
(integer, Foreign Key referencingUsers(user_id)
) - Пользователь, создавший рецепт.creation_date
(date)
Ingredients
(Ингредиенты):ingredient_id
(integer, Primary Key)ingredient_name
(character varying)
Recipe_Ingredients
(Рецепты_Ингредиенты): (Таблица-связка)recipe_id
(integer, Foreign Key referencingRecipes(recipe_id)
)ingredient_id
(integer, Foreign Key referencingIngredients(ingredient_id)
)quantity
(character varying) - например, “1 стакан”, “2 ст.л.”, “по вкусу”.- (Составной первичный ключ:
recipe_id
,ingredient_id
)
Categories
(Категории):category_id
(integer, Primary Key)category_name
(character varying) - например, “Завтрак”, “Обед”, “Ужин”, “Десерт”.
Users
(Пользователи):user_id
(integer, Primary Key)username
(character varying, unique)email
(character varying, unique)
- Связи:
- Один-ко-многим между
Categories
иRecipes
. - Один-ко-многим между
Users
иRecipes
. - Один-ко-многим между
Recipes
иRecipe_Ingredients
. - Один-ко-многим между
Ingredients
иRecipe_Ingredients
.
- Один-ко-многим между
Вариант 11: База данных агентства по прокату автомобилей
Сценарий: Спроектируйте базу данных для агентства по прокату автомобилей, чтобы управлять автомобилями, клиентами, прокатом и моделями автомобилей.
Схема базы данных:
- Таблицы:
Cars
(Автомобили):car_id
(integer, Primary Key)license_plate
(character varying, unique)model_id
(integer, Foreign Key referencingCar_Models(model_id)
)mileage
(integer)availability_status
(character varying) - например, “Доступен”, “В прокате”, “На обслуживании”.
Car_Models
(Модели_автомобилей):model_id
(integer, Primary Key)model_name
(character varying) - например, “Седан”, “Внедорожник”, “Грузовик”.make
(character varying) - например, “Toyota”, “Ford”, “Honda”.rental_rate_per_day
(numeric)
Customers
(Клиенты):customer_id
(integer, Primary Key)first_name
(character varying)last_name
(character varying)driver_license_number
(character varying, unique)phone_number
(character varying)
Rentals
(Прокат):rental_id
(integer, Primary Key)car_id
(integer, Foreign Key referencingCars(car_id)
)customer_id
(integer, Foreign Key referencingCustomers(customer_id)
)rental_start_date
(date)rental_end_date
(date)total_rental_price
(numeric)
- Связи:
- Один-ко-многим между
Car_Models
иCars
. - Один-ко-многим между
Customers
иRentals
. - Один-ко-многим между
Cars
иRentals
.
- Один-ко-многим между
Вариант 12: База данных системы управления обучением сотрудников
Сценарий: Спроектируйте базу данных для компании, чтобы управлять сотрудниками, учебными курсами, учебными сессиями и записями сотрудников на обучение.
Схема базы данных:
- Таблицы:
Employees
(Сотрудники):employee_id
(integer, Primary Key)first_name
(character varying)last_name
(character varying)department
(character varying)job_title
(character varying)
Training_Courses
(Учебные_курсы):course_id
(integer, Primary Key)course_name
(character varying)description
(text)duration_days
(integer)
Training_Sessions
(Учебные_сессии):session_id
(integer, Primary Key)course_id
(integer, Foreign Key referencingTraining_Courses(course_id)
)session_date
(date)location
(character varying)capacity
(integer)
Employee_Trainings
(Обучение_сотрудников): (Таблица-связка)employee_training_id
(integer, Primary Key) - Уникальный идентификатор каждой записи об обучении сотрудника.employee_id
(integer, Foreign Key referencingEmployees(employee_id)
)session_id
(integer, Foreign Key referencingTraining_Sessions(session_id)
)enrollment_date
(date)completion_status
(character varying) - например, “Записан”, “Завершено”, “Ожидает”.grade
(character varying, Nullable)
- Связи:
- Один-ко-многим между
Training_Courses
иTraining_Sessions
. - Один-ко-многим между
Employees
иEmployee_Trainings
. - Один-ко-многим между
Training_Sessions
иEmployee_Trainings
.
- Один-ко-многим между
Вариант 13: База данных системы управления пациентами больницы
Сценарий: Спроектируйте базу данных для больницы, чтобы управлять пациентами, врачами, приемами, медицинскими записями и отделениями.
Схема базы данных:
- Таблицы:
Patients
(Пациенты):patient_id
(integer, Primary Key)first_name
(character varying)last_name
(character varying)date_of_birth
(date)gender
(character varying)address
(character varying)phone_number
(character varying)
Doctors
(Врачи):doctor_id
(integer, Primary Key)first_name
(character varying)last_name
(character varying)specialization
(character varying)department_id
(integer, Foreign Key referencingDepartments(department_id)
)
Departments
(Отделения):department_id
(integer, Primary Key)department_name
(character varying) - например, “Кардиология”, “Неврология”, “Педиатрия”.building
(character varying)
Appointments
(Приемы):appointment_id
(integer, Primary Key)patient_id
(integer, Foreign Key referencingPatients(patient_id)
)doctor_id
(integer, Foreign Key referencingDoctors(doctor_id)
)appointment_date_time
(timestamp)reason_for_visit
(text)
Medical_Records
(Медицинские записи):record_id
(integer, Primary Key)patient_id
(integer, Foreign Key referencingPatients(patient_id)
)record_date
(date)diagnosis
(text)treatment
(text)doctor_id
(integer, Foreign Key referencingDoctors(doctor_id)
)
- Связи:
- Один-ко-многим между
Departments
иDoctors
. - Один-ко-многим между
Patients
иAppointments
. - Один-ко-многим между
Doctors
иAppointments
. - Один-ко-многим между
Patients
иMedical_Records
. - Один-ко-многим между
Doctors
иMedical_Records
.
- Один-ко-многим между
Вариант 14: База данных управления членством в тренажерном зале
Сценарий: Спроектируйте базу данных для тренажерного зала, чтобы управлять членами, тренерами, занятиями, типами членства и посещаемостью.
Схема базы данных:
- Таблицы:
Members
(Члены):member_id
(integer, Primary Key)first_name
(character varying)last_name
(character varying)date_of_birth
(date)email
(character varying, unique)phone_number
(character varying)membership_type_id
(integer, Foreign Key referencingMembership_Types(membership_type_id)
)join_date
(date)
Trainers
(Тренеры):trainer_id
(integer, Primary Key)first_name
(character varying)last_name
(character varying)specialization
(character varying)
Classes
(Занятия):class_id
(integer, Primary Key)class_name
(character varying) - например, “Йога”, “Зумба”, “Спиннинг”.description
(text)trainer_id
(integer, Foreign Key referencingTrainers(trainer_id)
)schedule_time
(timestamp)capacity
(integer)
Membership_Types
(Типы членства):membership_type_id
(integer, Primary Key)membership_name
(character varying) - например, “Базовый”, “Премиум”, “Семейный”.price
(numeric)duration_months
(integer)
Attendance
(Посещаемость):attendance_id
(integer, Primary Key)member_id
(integer, Foreign Key referencingMembers(member_id)
)class_id
(integer, Foreign Key referencingClasses(class_id)
)attendance_date
(date)
- Связи:
- Один-ко-многим между
Membership_Types
иMembers
. - Один-ко-многим между
Trainers
иClasses
. - Один-ко-многим между
Classes
иAttendance
. - Один-ко-многим между
Members
иAttendance
.
- Один-ко-многим между
Вариант 15: База данных системы штрафов за парковку
Сценарий: Спроектируйте базу данных для города, чтобы управлять штрафами за парковку, транспортными средствами, сотрудниками службы парковки и нарушениями.
Схема базы данных:
- Таблицы:
Parking_Tickets
(Штрафы за парковку):ticket_id
(integer, Primary Key)vehicle_id
(integer, Foreign Key referencingVehicles(vehicle_id)
)officer_id
(integer, Foreign Key referencingParking_Officers(officer_id)
)violation_id
(integer, Foreign Key referencingParking_Violations(violation_id)
)ticket_issue_date_time
(timestamp)ticket_location
(character varying)fine_amount
(numeric)payment_status
(character varying) - например, “Оплачен”, “Не оплачен”, “Просрочен”.
Vehicles
(Транспортные средства):vehicle_id
(integer, Primary Key)license_plate_number
(character varying, unique)make
(character varying)model
(character varying)color
(character varying)
Parking_Officers
(Сотрудники службы парковки):officer_id
(integer, Primary Key)officer_badge_number
(character varying, unique)first_name
(character varying)last_name
(character varying)
Parking_Violations
(Нарушения правил парковки):violation_id
(integer, Primary Key)violation_code
(character varying, unique)violation_description
(text)fine_amount
(numeric)
- Связи:
- Один-ко-многим между
Vehicles
иParking_Tickets
. - Один-ко-многим между
Parking_Officers
иParking_Tickets
. - Один-ко-многим между
Parking_Violations
иParking_Tickets
.
- Один-ко-многим между
Вариант 16: База данных службы доставки еды
Сценарий: Спроектируйте базу данных для службы доставки еды, чтобы управлять ресторанами, клиентами, заказами, курьерами и позициями меню.
Схема базы данных:
- Таблицы:
Restaurants
(Рестораны):restaurant_id
(integer, Primary Key)restaurant_name
(character varying)address
(character varying)phone_number
(character varying)cuisine_type
(character varying)
Customers
(Клиенты):customer_id
(integer, Primary Key)first_name
(character varying)last_name
(character varying)address
(character varying)phone_number
(character varying)email
(character varying)
Delivery_Drivers
(Курьеры):driver_id
(integer, Primary Key)first_name
(character varying)last_name
(character varying)vehicle_type
(character varying) - например, “Автомобиль”, “Велосипед”, “Скутер”.
Orders
(Заказы):order_id
(integer, Primary Key)customer_id
(integer, Foreign Key referencingCustomers(customer_id)
)restaurant_id
(integer, Foreign Key referencingRestaurants(restaurant_id)
)driver_id
(integer, Foreign Key referencingDelivery_Drivers(driver_id)
, Nullable) - Курьер, назначенный на заказ (изначально Null).order_date_time
(timestamp)delivery_address
(character varying)order_status
(character varying) - например, “Ожидает”, “Готовится”, “В пути”, “Доставлен”.total_amount
(numeric)
Menu_Items
(Позиции меню):menu_item_id
(integer, Primary Key)restaurant_id
(integer, Foreign Key referencingRestaurants(restaurant_id)
)item_name
(character varying)description
(text)price
(numeric)
- Связи:
- Один-ко-многим между
Restaurants
иMenu_Items
. - Один-ко-многим между
Customers
иOrders
. - Один-ко-многим между
Restaurants
иOrders
. - Один-ко-многим между
Delivery_Drivers
иOrders
(nullable foreign key).
- Один-ко-многим между
Вариант 17: База данных кинотеатра для продажи билетов
Сценарий: Спроектируйте базу данных для кинотеатра, чтобы управлять фильмами, сеансами, кинозалами, билетами и клиентами.
- Таблицы:
Movies
(Фильмы):movie_id
(integer, Primary Key)movie_title
(character varying)genre
(character varying)duration_minutes
(integer)release_date
(date)
Theaters
(Кинозалы):theater_id
(integer, Primary Key)theater_name
(character varying) - например, “Зал 1”, “IMAX Зал”.capacity
(integer)
Screenings
(Сеансы):screening_id
(integer, Primary Key)movie_id
(integer, Foreign Key referencingMovies(movie_id)
)theater_id
(integer, Foreign Key referencingTheaters(theater_id)
)start_time
(timestamp)end_time
(timestamp)ticket_price
(numeric)
Customers
(Клиенты):customer_id
(integer, Primary Key)first_name
(character varying)last_name
(character varying)email
(character varying)
Tickets
(Билеты):ticket_id
(integer, Primary Key)screening_id
(integer, Foreign Key referencingScreenings(screening_id)
)customer_id
(integer, Foreign Key referencingCustomers(customer_id)
)seat_number
(character varying)purchase_date_time
(timestamp)
- Связи:
- Один-ко-многим между
Movies
иScreenings
. - Один-ко-многим между
Theaters
иScreenings
. - Один-ко-многим между
Screenings
иTickets
. - Один-ко-многим между
Customers
иTickets
.
- Один-ко-многим между
Вариант 18: База данных управления запасами на производстве
Сценарий: Спроектируйте базу данных для производственной компании, чтобы управлять продуктами, сырьем, поставщиками, запасами и заказами.
- Таблицы:
Products
(Продукты):product_id
(integer, Primary Key)product_name
(character varying)description
(text)selling_price
(numeric)
Raw_Materials
(Сырье):material_id
(integer, Primary Key)material_name
(character varying)unit_of_measurement
(character varying) - например, “кг”, “литры”, “штуки”.supplier_id
(integer, Foreign Key referencingSuppliers(supplier_id)
)cost_per_unit
(numeric)
Suppliers
(Поставщики):supplier_id
(integer, Primary Key)supplier_name
(character varying)contact_person
(character varying)phone_number
(character varying)
Inventory
(Запасы):inventory_id
(integer, Primary Key)material_id
(integer, Foreign Key referencingRaw_Materials(material_id)
)quantity_in_stock
(integer)last_stock_update
(timestamp)
Production_Orders
(Производственные заказы):order_id
(integer, Primary Key)product_id
(integer, Foreign Key referencingProducts(product_id)
)order_date
(date)quantity_ordered
(integer)status
(character varying) - например, “Ожидает”, “В производстве”, “Завершен”.
- Связи:
- Один-ко-многим между
Suppliers
иRaw_Materials
. - Один-ко-многим между
Raw_Materials
иInventory
. - Один-ко-многим между
Products
иProduction_Orders
.
- Один-ко-многим между
Инструкции по сдаче:
Шаг 1. Сделайте высококачественный снимок экрана вашей ER-диаграммы
- Разверните холст ERD: В pgAdmin 4 убедитесь, что вся ваша ER-диаграмма видна на экране. Возможно, вам потребуется немного уменьшить масштаб или снова использовать функцию “Auto Align” (Автовыравнивание), чтобы все таблицы и связи были четко видны, не перекрывались и не обрезались.
- Сделайте снимок экрана: Сделайте снимок экрана всего окна pgAdmin 4, четко показывая созданную вами ER-диаграмму.
- Проверьте качество снимка экрана: Откройте снимок экрана и убедитесь, что:
- Видна вся ER-диаграмма.
- Названия таблиц, названия столбцов, типы данных, первичные ключи, внешние ключи и связи четко читаются.
- Снимок экрана не размыт и не пикселизирован. Если он нечеткий, сделайте снимок экрана повторно.
- Сохраните снимок экрана: Сохраните снимок экрана как файл изображения (например,
.png
,.jpg
). Назовите файл информативно, например,Variant[Номер варианта]_ERD_Screenshot_[ВашаФамилия]_[ВашеИмя].png
(например,Variant1_ERD_Screenshot_Иванов_Иван.png
).
Шаг 2: Загрузите снимок экрана на Google Диск
- Откройте Google Диск: Перейдите в свою учетную запись Google Диска в веб-браузере.
- Перейдите в папку для сдачи (необязательно, но рекомендуется): Вы можете создать новую папку на своем Google Диске специально для этого курса баз данных или для сдачи заданий, чтобы все было организовано.
- Загрузите файл: Нажмите кнопку “+ Создать” (или “Загрузить”) и выберите “Загрузить файлы”. Выберите файл изображения снимка экрана, который вы сохранили на шаге 7. Дождитесь завершения загрузки.
Шаг 3: Настройте права доступа к снимку экрана на Google Диске
- Найдите загруженный файл: Найдите файл снимка экрана, который вы только что загрузили, на своем Google Диске.
- Получите ссылку для общего доступа: Щелкните правой кнопкой мыши по файлу снимка экрана и выберите “Получить ссылку” (или “Поделиться”).
- Измените настройки ссылки: В появившемся диалоговом окне совместного доступа нажмите “Изменить” рядом с “Ограниченный доступ” (или текущей настройкой доступа).
- Выберите “Всем, у кого есть ссылка”: Выберите опцию “Всем, у кого есть ссылка” из раскрывающегося меню.
- Установите разрешение “Читатель” (Viewer): Убедитесь, что установлено разрешение “Читатель” (оно должно быть установлено по умолчанию).
- Скопируйте ссылку: Нажмите кнопку “Копировать ссылку”. Ссылка на ваш снимок экрана теперь скопирована в буфер обмена.
- Нажмите “Готово”: Закройте диалоговое окно совместного доступа.
Шаг 4: Отправьте ссылку на Google Диск в Google Таблицы
- Откройте Google Таблицу: Google Таблица
- Найдите свою строку: Найдите свое имя или идентификатор студента в первом столбце Google Таблицы. Ваша ячейка для сдачи будет находиться в соответствующей строке.
- Вставьте ссылку в виде комментария:
- Нажмите на ячейку, предназначенную для вашей сдачи.
- Щелкните правой кнопкой мыши по ячейке и выберите “Вставить комментарий” (или “Комментарий”).
- Вставьте ссылку на Google Диск, которую вы скопировали на шаге 3, в поле комментария.
- Нажмите “Комментировать” или кнопку “Опубликовать”, чтобы сохранить комментарий со ссылкой.
- Проверьте отправку: Дважды проверьте, что ваш комментарий виден в ячейке и что вы правильно вставили ссылку.
Важные напоминания:
- Убедитесь, что на Google Диске установлен доступ “Всем, у кого есть ссылка, разрешено просматривать”. Если это не настроено правильно, ваш преподаватель не сможет увидеть ваш снимок экрана.
- Проверьте свою ссылку! Откройте ссылку в режиме инкогнито или на другом устройстве, чтобы убедиться, что она работает должным образом и отображает ваш снимок экрана.
- Сдайте работу до указанного срока. Проверьте инструкции к заданию, чтобы узнать крайний срок сдачи.