Вот моя база данных дизайна, я работаю над проектом электронной коммерции.
Поэтому, когда администратор создает новый продукт, у него новый идентификатор, и пользователь должен выбрать цвет и размер продукта. Проблема в том, что когда я создаю новый продукт (я устанавливаю идентификатор продукта как Identity Increment), я ввожу те же данные с тем же именем, тем же размером и цветом и т. д. точно так же, как тот же продукт, который я импортировал ранее Это означает, что продукт, который я только что созданный и предыдущий продукт отличаются, но на самом деле это всего лишь один продукт. Является причиной дублирующейся проблемы. Есть ли какие-либо решения этой проблемы?
Мой дизайн неправильный? Я хочу, чтобы, когда пользователь создавал аналогичный продукт, но с теми же атрибутами, это будет ошибка и сохранение не будет разрешено (кстати, я кодирую в ASP net Core)
Я решил эту проблему вот так
Чтобы избежать дублирования данных, нам нужно разбить дополнительную таблицу и установить ProductCode как уникальное значение.
Вы так говорите, @NghĩaNghĩa, но я ненавижу работать с базами данных, где каждый столбец идентификатора называется id (одной из них является база данных Stack Overflow). Честно говоря, все становится намного чище и понятнее, когда в столбце ID указывается тип идентификатора.
решите, что делает продукт уникальным, и создайте уникальный индекс для этих столбцов, чтобы предотвратить дублирование.
Я думаю, вам повезет больше, если у вас будет продукт и отдельные атрибуты, цены и таблицы складского учета. Кроме того, если у вас есть дизайн футболки, как вы их разделите? Обычно должен быть какой-то номер артикула, который не генерируется автоматически. Кроме того, если честно, проектирование базы данных не является подходящей темой stackO.
Я предлагаю вам изменить теги этого вопроса на C# ef-core и т. д. Ваша проблема не в базе данных, а в коде.
ок, я понял, поменяю





Некоторые предложения:
Не используйте «Имя» или «Идентификатор» в качестве имен столбцов. Вместо этого используйте имя_продукта, имя_цвета, имя_размера, идентификатор_продукта, идентификатор_цвета, идентификатор_размера.
Удалить сумму из таблицы товаров. Создайте новую таблицу инвентаризации с идентификатором инвентаря, продуктом_fk, суммой, типом_контейнера, местоположением_контейнера, датой_вставки, датой истечения срока действия, идентификатором_штока.
Каждая таблица должна иметь автоматически увеличивающийся первичный ключ, скрытый от пользователей. Product_pk, Inventory_pk, color_pk, size_pk.
проверка вставок и изменений должна осуществляться через ваше приложение и только через ограничения базы данных в качестве последней меры безопасности. Дизайн таблиц и связи не следует использовать для предотвращения дублирования, потому что однажды у вас может быть пример, когда дубликат необходим.
Существует множество передовых методов проектирования баз данных, о которых вам следует знать перед началом проекта. См. https://www.sisense.com/blog/better-sql-schema/
Если вы хотите заблокировать дубликаты (в отношении выбранного количества столбцов), у вас есть несколько способов сделать это.
Основными из них будут:
Блокирует любые попытки добавить существующую комбинацию столбцов.
ALTER TABLE TABLE ADD CONSTRAINT unique_combo UNIQUE (column1, column2, ...)
Что касается дизайна, я настоятельно рекомендую переработать дизайн вашей базы данных и подумать о таких вещах, как, например, имеет ли значение количество на уровне продукта, если вы можете иметь несколько размеров...
Когда вам сообщили: «Вопрос с таким названием уже существует; будьте конкретнее». Это не повод опечатывать слово «дизайн». Ключевой частью было, пожалуйста, будьте более конкретны. Значимое название важно.