Не могли бы вы разобраться с несколькими вопросами по созданию базы данных счетов-фактур SQL для начинающих? - PullRequest
0 голосов
/ 04 июля 2011

Я немного новичок в SQL.

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

Screenshot

Вот диаграмма вороньих лап, которую я сделал:

crow's foot diagram

Я не уверен, должен ли адрес доставки и биллинга клиента быть отдельным лицом. Я также не уверен в отношении tblProductLine к tblItem и tblInvoice. Правильно ли я это изобразил?

Я соответствовал схеме и правильно установил отношения? Кроме того, может ли кто-нибудь объяснить, когда нужны внешние ключи? (так как я не был уверен, куда их поместить), я предполагаю, что они идут в конце отношений 1 ко многим, чтобы ссылаться на предыдущую таблицу, которая их вызывала, но я не уверен ... какие таблицы нуждаются в сторонних ключ

В любом случае ... любая помощь или комментарии будут великолепны!

Ответы [ 2 ]

1 голос
/ 04 июля 2011

Обычно ЗАКАЗЫ и СЧЕТА, хотя и очень тесно связаны, разъединены; вы объединяете их в одно целое.

ЗАКАЗЧИК размещает ЗАКАЗ на один или несколько ИЗДЕЛИЙ. Это создает заголовок заказа и детали заказа. Продавец выставляет СЧЕТ со ссылкой на Заказ. Но в очень простой операции «мама и поп» можно обойтись без ORDERS и позволить сущности INVOICE представлять заказ.

        ORDER|INVOICE DETAIL
        id  int PK
        headerid foreign key references INVOICEHEADERS or ORDERHEADERS *mutatis mutandis*
        productid foreign key references PRODUCTS(id)
        quantity
        extendedamount

Внешние ключи необходимы, потому что они предотвращают такие вещи, как создание заказа на несуществующий продукт или выставление счетов клиенту, который не существует. Они гарантируют, что строка базы данных не содержит невозможностей.

Обычно CUSTOMERADDRESSES представляет собой отдельную таблицу, которая ссылается на CUSTOMERS. У клиента может быть один или несколько адресов.

Всякий раз, когда у сущности "может быть один или несколько X", это признак того, что вам нужна отдельная таблица для захвата X-ов.

1 голос
/ 04 июля 2011

Некоторые мысли в случайном порядке:

  1. Ваша воронья нога находится на неправильном сайте для некоторых сущностей.У сотрудника может быть несколько счетов, но я предполагаю, что счет "принадлежит" одному сотруднику.
  2. Почему у вашего Employee есть InvoiceID?Разумеется, они могут иметь более одного счета?
  3. Подумайте о добавлении таблицы Address и предоставьте вашему клиенту ShippingAddress и BillingAddress (необязательно), оба ссылаются на Address.
  4. В чем разница между Quantity и Amount в tblProductLine?
  5. Где вы получаете цену за Доставка и обработка от?
  6. ВыСохраняете размер в дополнительном поле, но не в цвете.Цвет может быть частью ItemDescription, но тогда вы действительно не сможете обнаружить, что красный и синий Jag Something являются одним и тем же продуктомВ зависимости от ваших требований, может быть лучше нормализовать эту таблицу и переместить size и color в подстол.Если вам нужно переименовать продукт, вы можете изменить только одну запись вместо многих.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...