powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Помогите пожалуйста
14 сообщений из 14, страница 1 из 1
Помогите пожалуйста
    #34973267
Spenser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прошу посмотреть и оценить набросок структуры БД .знаю что говн...

у меня учебная задача такова:
создать БД для автобусной кассы, которая занимается продажей билетов на разные рейсы.
- все рейсы из точки "А" см.рис.(некоторые могут иметь промежуточные станции).
- направление рейсов это туда и обратно.(или как?)
- мне кажется какая-то фигня у меня с датой рейсов(может быть ситуация, что в один день могут пойти по одному направлению несколько рейсов в разное время)

нужно чтобы структура БД позволяла в будущем:
- получить кол-во оставшихся билетов на любой рейс(т.е. туда и обратно)
- потом я точно не знаю куда стоимость билету прикрутить.(на билет даются скидки детям до 10 лет- 20%)
для MySQL
...
Рейтинг: 0 / 0
Помогите пожалуйста
    #34973457
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С билетом и клиентом какой то косяк. Что мешает прописать атрибуты клиента прямо в билете или напротив в билет id клиета?

Рейс смешал в себе места и собственно рейс. Полагаю, должна быть сущнось рейс с атрибутами: маршрут, время, автобус (возможно базовый тариф). И место с атибутами рейс, номер места, №билета (если место продано).

Сущность билет должна включать данные о рейсе, месте, цену (возможно с указанием применённых скидок, например, детский или пенсионный), данные о клиенте.

Нужен прейскурант. Это набор правил по которым определяется цена места. Обычно прейскуран представляет из себя несколько таблиц и расчётных процедур. Возможно, цена места будет зависеть от маршрута, от времени, от марки автобуса, от социального статуса пасажира и т.п.
...
Рейтинг: 0 / 0
Помогите пожалуйста
    #34974420
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имхо очень неправильно хранить в клиенте id билета. Получается отношение 1:1, а должно быть
1:n (один клиент может купить несколько билетов на разные рейсы)
Сущность "место" - нужно (правда, в отличие от mcureenab-а я считаю, что нужно хранить "места в автобусе", а не "места в рейсе" - несколько сложнее получить число занятых мест в текущем рейсе, но зато существенно уменьшается дублирование данных).
Думаю, что нужно предусмотреть сущность "расписание рейсов" со временем прибытия/отбытия, и в рейсе делать ссылку на элемент расписания.
Сущность "стоимость" - имхо не нужна, никакого смысла в ней нет (так же сомнительна полезность сущности "Дата").
Система тарифов - нужна ( ее реализация может быть разной )
...
Рейтинг: 0 / 0
Помогите пожалуйста
    #34974508
Spenser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо всем за замечания и советы.
Сделаю поправки и выложу снова на оценку.
...
Рейтинг: 0 / 0
Помогите пожалуйста
    #34975485
Spenser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как теперь схема смотрится?

mcureenabНужен прейскурант. Это набор правил по которым определяется цена места. Обычно прейскуран представляет из себя несколько таблиц и расчётных процедур. Возможно, цена места будет зависеть от маршрута, от времени, от марки автобуса, от социального статуса пасажира и т.п.
- Как это можно реализовать?(Цена места будет зависеть от маршрута и от значения скидки.)

- Как быть с промежуточными станциями.(Пример: еду я из Москвы[M] в Питер[П], по маршруту моего следования делаются остановки в разных населенных пунктах. Т.е. из [M] через 1,2,3,4,5,6,7,... до[П])

Опять загвостка.
...
Рейтинг: 0 / 0
Помогите пожалуйста
    #34976291
ЮВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Spenser - Как это можно реализовать?(Цена места будет зависеть от маршрута и от значения скидки.)


Имхо.
Базовая (без скидок ) стоимость проезда в автобусе зависит от расстояния и базовой цены на 1 км.
Т. о. для начала нужны 2 таблицы:
- список маршрутов:
- описание маршрутов.

Список маршрутов (Tab_Marsh);
Id_M - идентификатор маршрута;
Name_M - название марщрута.
например:
1, Москва-Дубна
2, Москва-Егорьевск
...
Описание маршрутов (Opis_M).

Id_M - идентификатор маршрута;
Name_S - название станции;
Dl - расстояние от соседней станции
Typ - конечная (промежуточная)
Например:
1, aaaa1, 0,0
1, bbbb1, 5,1
1, cccc1, 25,1
....
1, zzzz1, 7,0
2, aaaa2, 0,0
2, bbbb2, 4,1
2, cccc2, 13,1
....
2, zzzz2, 9,0

Такая таблица позволяет легко менять маршруты (добавляить, удалять станции, делать объезды и т. п.)

Тогда базовая стоимость проезда по маршруту, скажем, Москва-Егорьевск от станции gggg2 До станции kkkk2 будет:
select sum(dl)*tarif from Opis_M where id_m=2
and Name_s between 'gggg2" and "kkkk2";

Дополнительно должны быть либо отдельные таблицы по всем видам скидок, либо одна общая, но с идентификаторами скидок.
...
Рейтинг: 0 / 0
Помогите пожалуйста
    #34976531
Spenser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ЮВ
Тогда базовая стоимость проезда по маршруту, скажем, Москва-Егорьевск от станции gggg2 До станции kkkk2 будет:
select sum(dl)*tarif from Opis_M where id_m=2
and Name_s between 'gggg2" and "kkkk2";

Дополнительно должны быть либо отдельные таблицы по всем видам скидок, либо одна общая, но с идентификаторами скидок.

Спасибо.
То что надо , но у меня возникли вопросы:
- для таблиц (Tab_Marsh) и (Opis_M) один primary key это возможно( или нет).
- как теперь эту базовую стоимость связать с билетом?(или еще с чем)
- как сделать так, чтобы в "реальном" билете и в рейсе выводилась информация о том маршруте, который описан а таблице (Opis_M)?
Т.е. пассажир сел в точке "А"(начало всего маршрута), а вышел в точке "5"(где-нибудь в середине общего маршрута с конечной точкой "В").
Только после решения этих вопросов я смогу нарисовать следующую структурную схему БД (надеюсь, что заключительную).
- чуть не забыл, а в запросе:
авторselect sum(dl)* tarif from Opis_M where id_m=2 and Name_s between 'gggg2" and "kkkk2";
значение tarif - это какая-то переменная, где она должна описываться?
...
Рейтинг: 0 / 0
Помогите пожалуйста
    #34978222
ЮВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Spenser[ - как теперь эту базовую стоимость связать с билетом?(или еще с чем)

Базовая стоимость с билетом явно (по ссылке) никак не связана. Просто она использутся для вычисления стоимости проезда со всеми скидками.
Т. е. пусть таблица "Проданные билеты" имеет, например, такую структуру:

id - идентификатор билета;
date- дата продажи;
time -номер рейса или время отправления;
n _stan - начальная станция (лучше использовать идентификатор станции из справочника станций);
k _stan - конечная станция;
summa- стоимость проезда - окончательная (вычисляеится по приведенной в прошлом письме формуле со всеми скидками и заносится в эту таблицу);
другие реквизиты (например, льготы, детский билет и т.п).

При аннулировании билета запись удаляется.
При замене билета (на другой рейс, другую станцию, дату и т. п.) - модифицируется (или создается заново)


Spenser - чуть не забыл, а в запросе:
авторselect sum(dl)* tarif from Opis_M where id_m=2 and Name_s between 'gggg2" and "kkkk2";
значение tarif - это какая-то переменная, где она должна описываться?

Tarif - это коэффициент или значение, используемое в расчетных формулах (типа "стоимость проезда 1 км", "% НДС", "Скидка пенсионерам", детям, мягкий /жесткий автобус и др. коэффициенты).
Сказать однозначно, как их лучше хранить, трудно - зависит от многих факторов.
Можно в ini-файле программы, можно в одной общей таблице в БД, можно в каждой отдельной таблице.
Но только не в исходном тексте программы.
...
Рейтинг: 0 / 0
Помогите пожалуйста
    #34978661
Фотография BULK INSERT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SpenserКак теперь схема смотрится?

фигня это а не схема... такая корявая не полетит.
...
Рейтинг: 0 / 0
Помогите пожалуйста
    #34978699
Spenser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BULK INSERT SpenserКак теперь схема смотрится?

фигня это а не схема... такая корявая не полетит.

если есть предложи свою
мне очень нужно, но прошу учесть что база MySQL, а приложение будет к ней делаться PHP.

Свой вариант сейчас готовлю.
...
Рейтинг: 0 / 0
Помогите пожалуйста
    #34978714
Фотография BULK INSERT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Spenserесли есть предложи свою.

я свою уже написал и уже сдал заказчику - года уже четыре как тому :)

автопредприятие - пассажирские автобусные перевозки Москва и Подмосковье - Чебоксары и Поволжье
...
Рейтинг: 0 / 0
Помогите пожалуйста
    #34978815
Spenser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BULK INSERT Spenserесли есть предложи свою.

я свою уже написал и уже сдал заказчику - года уже четыре как тому :)

автопредприятие - пассажирские автобусные перевозки Москва и Подмосковье - Чебоксары и Поволжье

А мой заказчик - это я сам, ставящий себе разные задачи для развития(задача учебная). Если что не получается я прошу совета :)
Наверно так и приходит опыт со временем.
Мне нужно составить схему в общих(основных) чертах, тонкости пускай пишут спецы(испольнители).

Тема пока не закрыта...
...
Рейтинг: 0 / 0
Помогите пожалуйста
    #34979204
Spenser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что скажите.

Мне кажется, что надо объединить таблицы "МЕСТО" и "ПРОДАННЫЕ БИЛЕТЫ".
Сущность билет я убрал (что скажите), а вместо как посоветовали добавил "ПРОДАННЫЕ БИЛЕТЫ".

авторЕсли я не ошибаюсь, то кол-во оставшихся билетов на рейс можно определить так: с помощью counta получаю кол-во проданных билет на заданный рейс(Х) из таблицы "ПРОДАННЫЕ БИЛЕТЫ", потом из кол-ва мест в автобусе(Y) в таблице "АВТОБУС" --- (X)=Z -количество оставшихся мест. Это провильно или нет?

Как быть со связями и с избыточностью данных?

Я прошу оценить полностью все таблицу, чтобы тему закрыть.
...
Рейтинг: 0 / 0
Помогите пожалуйста
    #34979215
Spenser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Забыл уточнить что стоимость билета у меня в данном случае получается сразу из таблицы "СПРАВОЧНИК МАРШРУТА"

Пример: маршрут (А)-1-2-3-4-5-6-(Б) так вот стоимость билета из А --> [4] или в (Б) сразу задана в таблице "СПРАВОЧНИК МАРШРУТА" в итоге получается у меня так что на промежуточных станциях не продаются билеты.

Прошу на выше сказанное обратить внимание(так поставлено задание)
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Помогите пожалуйста
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]