#database #postgresql #project #primary-key #one-to-many
#База данных #postgresql #проект #первичный ключ #один ко многим
Вопрос:
Я создаю проект последнего года — систему онлайн-покупок, но у меня есть сомнения относительно первичного ключа, который будет использоваться в таблицах, поскольку он должен автоматически вставляться в другие таблицы для извлечения данных. Пример, если у меня здесь две таблицы shop и products, отношение между shop и product равно «один ко многим», что означает, что в одном магазине много продуктов. Я пытался использовать serial в качестве первичного ключа, но он работает плохо, потому что он принимает только количество товаров, равное количеству магазинов.
итак, что мне делать, чтобы решить эту проблему, поскольку во время вставки продукта через графический интерфейс мы можем просто ввести название продукта
Пожалуйста, вы можете мне помочь???
Я приложил несколько изображений, касающихся этой базы данных. Image giving error
Это то, что я сделал в Postgres
check_serial=# create table shop(id serial primary key,name text);
CREATE TABLE
check_serial=# create table product(pid serial primary key,pname text,id serial references shop(id) on delete cascade on update set null);
CREATE TABLE
check_serial=# insert into shop(name) values('abc');
INSERT 0 1
check_serial=# insert into shop(name) values('xyz');
INSERT 0 1
check_serial=# insert into product(pname) values('soap');
INSERT 0 1
check_serial=# insert into product(pname) values('tooth paste');
INSERT 0 1
check_serial=# insert into product(pname) values('shampoo');
ERROR: insert or update on table "product" violates foreign key constraint "product_id_fkey"
DETAIL: Key (id)=(3) is not present in table "shop".
check_serial=# insert into product(pname) values('pqr');
ERROR: insert or update on table "product" violates foreign key constraint "product_id_fkey"
DETAIL: Key (id)=(4) is not present in table "shop".
check_serial=#
Ответ №1:
Если я правильно понял, вы должны создать только отношение «многие ко одному» и удалить отношение «один ко многим» из магазина. Тогда вы можете использовать эту модель без каких-либо проблем. Просто вставьте название продукта с идентификатором магазина, а также вы можете присоединить продукт к магазину по идентификатору.
Комментарии:
1. Я думаю, вы не поняли мой вопрос. У меня есть две таблицы shop и product, поэтому в одном магазине много продуктов, поэтому первичный ключ магазина должен передаваться в качестве внешнего ключа в таблицу products теперь я запутался, какой тип данных я должен присвоить первичному ключу, если я передаю последовательные данные первичному ключу магазина, он принимает только одну информацию о продукте, которую он должен использовать.означает, что он не работает с serial в качестве первичного ключа, и если я использую int в качестве первичного ключа, он не обновит идентификатор магазина, переданный в качестве внешнего ключа в таблицу продуктов….. На самом деле я создаю систему онлайн-покупок проекта последнего года, можете ли вы помочь мне с ее базой данных
2. Структура ваших таблиц должна быть такой: Магазин с идентификатором bigserial, unique и auto increment. Продукт с идентификатором bigserial, уникальным и автоинкрементным идентификатором, а также ссылками на внешний ключ shop_id bigint на shop.id . Прежде всего, вы должны создать таблицу shop и вставить строку в таблицу shop, затем создать таблицу product, и когда вы вставляете строки в таблицу product, вы должны передать существующий идентификатор вашего магазина из таблицы shop в product.shop_id. Итак, это отношение «многие к одному». И вы можете получить все строки из таблицы product по shop_id .