2013-05-04 2 views
0

Это мой первый проект схемы базы данных. Я пытаюсь разработать небольшое веб-приложение для своего отдела, которое будет использоваться для управления стоимостью продуктов питания. И я делаю это для своей цели обучения.Проектирование моей первой схемы базы данных: требуется предложение

Как работает стоимость еды управления в моем отделе:

  1. Всего пользователей: 15
  2. Один администратора, чтобы вести учет всех затрат. он будет ежедневно обновлять базу данных.
  3. Каждый член может сделать только один раз в день. Если у кого-то есть гость в любой конкретный день, он может заказать несколько блюд.
  4. Обычно участники оплачивают свой счет на неделю или две заранее.
  5. одно или два человека несут ответственность за привоз пищи извне, и им не нужно платить за обед. Транспортные расходы также предоставляются им. их стоимость еды + стоимость перевозки распределяется поровну с другими 15 членами расходов.

Баз данные запросы:

От администратора точки зрения:

  1. он будет управлять/добавить ежедневный заказ. (Таблица: заказы)
  2. он добавит платежи для всех членов, которые будут зачислены в счет «Баланс» соответствующего участника (Таблица: платежи)
  3. он сможет просмотреть обзор всех заказов участников/стоимость историю и их текущий баланс в диаграмме в течение одного месяца за раз.
  4. Если какой-либо участник имеет отрицательный баланс или меньше определенной суммы денег, он будет уведомлен о панели управления администратора.

С точки зрения члена:

  1. он сможет увидеть его текущий баланс и историю заказов/стоимость за последний месяц за один раз.
  2. он сможет увидеть последний x номер истории платежей, которые он сделал.

на основе запросов, которые я упоминал выше, я пытался разработать схему базы данных, которая выглядит, как на рисунке ниже:

database schema diagram

Elaboration некоторых атрибутов:

EPlatenum : Добавлено количество дополнительной тарелки пищи, кроме количества заказанной тарелки.

Eplatecost: стоимость дополнительной тарелки продуктов питания. эта стоимость распределяется поровну между индивидуальной стоимостью 15 человек.

EPersonnum & EPersoncost: Количество дополнительного человека, вовлеченного в результате чего продукты питания и их общую стоимость. стоимость будет распределена поровну между индивидуальной стоимостью 15 человек.

TransCost: стоимость перевозки. стоимость будет распределена поровну между индивидуальной стоимостью 15 человек.

Вопросы:

  1. какие ошибки я сделал и как я могу их преодолеть?

  2. Для моей таблицы DailyList я использовал «дату» в качестве основного ключа. Можно ли использовать дату в качестве первичного ключа? ЕСЛИ не в порядке, что здесь может быть основным ключом?

  3. Когда я собираюсь заполнить обзор диаграммы в течение 30-месячной стоимости/истории заказа, запрос базы данных будет огромным, я предполагаю. какой подход следует использовать для оптимизации запроса?

Я с нетерпением жду ваших предложений по улучшению схемы базы данных. Пожалуйста, помогите мне исправить мои дизайнерские ошибки и преодолеть их. Спасибо за терпеливость.

+3

От быстрого поиска вашей схемы вы должны ** никогда не хранить деньги как плавающие, поскольку они имеют ограниченную точность и могут быть неточными (например, 0,99 вместо 1). Я бы предложил изменить тип данных любого столбца, который хранит деньги как DECIMAL или NUMERIC, поскольку они являются номерами фиксированных точек. –

+0

Благодарю вас за предложение. – xihad

ответ

1

Мое первое впечатление:

  1. Я думаю, что платеж должен быть связан на заказ (потому что пользователь платит за конкретный заказ).
  2. Я не знаю, что такое DailyList, но если может быть больше двух с той же датой (и, как я могу представить, это может быть), вы не должны использовать его как ключ primari.
  3. Пароль должен быть закодирован, например. SHA (поэтому varchar 15 меньше).
+0

2. Ежедневный список на самом деле DailyCostList для других расходов, а также количество дополнительных лиц и общая стоимость их питания, количество дополнительной тарелки пищи и их стоимость включены сюда. будет одна запись для каждой даты и не более того. – xihad

+0

Итак, это совершенно нормально, если вы являетесь основным ключом. –

+0

1. Платежи выплачиваются заранее в течение одной недели или двух. Эти суммы будут добавлены в соответствующее поле баланса в таблице «пользователь». для отслеживания индивидуальной стоимости еды есть один атрибут «OrderCost» в таблице «заказы» – xihad