Я пытаюсь сделать счет для клиентов, которые купили продукты. Я хочу такой же ID_Invoice
и внутри будут другие продукты, которые купил клиент.
Я хочу, чтобы это выглядело так,
|ID_Invoice | ID_Reg | ID_Product | ProductType | Price |
+-----------+--------+------------+-------------+-------+
| 1 | 1 | 12345 | Software | 300 |
| 1 | 1 | 12346 | Software | 400 |
| 2 | 3 | 12347 | Software | 350 |
| 3 | 4 | 22346 | Hardware | 600 |
Один и тот же покупатель (ID_Reg
) может купить 2 разных товара, и это будет в одном счете (ID_Invoice
).
Но когда я пытаюсь вставить значения в Invoice
, я получаю сообщение об ошибке
Нарушение ограничения PRIMARY KEY «PK_IDInvoice». Не удается вставить повторяющийся ключ в объект «dbo.Invoice». Повторяющееся значение ключа (1).
надеюсь хорошо объяснил
Можете ли вы объяснить мне больше? В двух таблицах будут какие столбцы?
Кажется, вам нужно нормализовать свою таблицу (таблицы). Сделав это, вы увидите, в чем проблема, и сможете ее решить. Переходи на НФ3. Это довольно хорошее объяснение нормализации, но не стесняйтесь искать дополнительную информацию. edureka.co/blog/normalization-in-sql
Взгляните на стандартные образцы баз данных MS, чтобы увидеть, как «продажи» или «счета» обычно представляют собой базу данных. Обычно вам нужно как минимум 2 таблицы для поддержки такого рода информации. Точно так же, как квитанция, которую вы получаете, когда делаете покупку в магазине, счет-фактура на самом деле представляет собой просто набор одной или нескольких вещей, которые вы покупаете (или продаете). Проектирование баз данных — это совершенно другой навык, чем написание кода для использования базы данных. Я предлагаю вам сначала найти хорошо спроектированную базу данных, если вы только учитесь программировать.
Большое спасибо за помощь! В итоге я создал две таблицы, одна из которых подключается к клиенту, а другая — к продуктам. Это был школьный проект, и в то же время мы должны создать базу данных, а затем dml для этого.
Вам нужна таблица invoices
, в которой каждая строка представляет отдельный счет, а id_invoice
является первичным ключом.
Вам нужна таблица invoice_lines
или invoice_products
, в которой есть одна строка для каждой строки счета (или продукта). Это в основном таблица, которую вы описали выше.
Учитывая ваше описание, (id_invoice, id_product)
должен быть уникальным в этой таблице. И id_invoice
должен быть ссылкой внешнего ключа на invoices(id_invoice)
. Обычно я бы также дал такой таблице первичный ключ identity
.
dtaskin этот ответ не решает вашу проблему?
Ваша таблица счетов не допускает таких дубликатов. Похоже, вам нужно два стола для меня.