Похоже, вы хотите хранить заказы и информацию об этих заказах.Сначала создайте таблицу заказов.
create table orders (
id integer primary key autoincrement,
created_at timestamp not null default current_timestamp,
buyer text not null,
ship_chr text not null
)
Обратите внимание, что вместо order_id
первичный ключ таблицы просто id
.Это не обязательно, но мне нравится это соглашение, поскольку в нем различаются первичные и внешние ключи.
Также обратите внимание, что я использую тип timestamp
для хранения дат, это значительно усложнит работу с этими датами.проще, чем вы можете использовать функции даты SQLite .
Теперь нам нужна таблица для информации о том, что в каждом порядке.
create table order_products (
id integer primary key autoincrement,
order_id integer not null references orders(id),
product text not null,
quantity integer not null,
rate integer not null
)
Это устанавливает одно-отношения ко многим между orders
и order_products
.Один заказ может иметь много products
.Вы можете связать эти таблицы вместе, используя join .Вот как вы получите покупателя для каждого продукта.
select o.buyer, op.product, op.quantity
from order_products op
join orders o on o.id = op.order_id
abc|pen|50
abc|paper|25
abc|pin|50
xyz|paper|25
xyz|pen|100
join orders o on o.id = op.order_id
говорит, что для каждой строки в order_products
найдите одну в orders
, где order.id
соответствует строке order_id
и обработайтеони оба в одной строке.
Отсюда вы, вероятно, захотите сделать products
и buyer
их собственными таблицами, а также хранить любую информацию о покупателях и товарах.Это также гарантирует существование товаров и покупателей, избегая опечаток.
create table buyers (
id integer primary key autoincrement,
name text not null,
address text not null,
phone text not null
);
create table products (
id integer primary key autoincrement,
name text not null,
stock integer not null default 0
);
create table orders (
id integer primary key autoincrement,
created_at timestamp not null default current_timestamp,
buyer_id integer references buyers(id) not null,
ship_chr text not null
);
create table order_products (
id integer primary key autoincrement,
order_id integer not null references orders(id),
product_id integer not null references products(id),
quantity integer not null,
rate integer not null
);
Затем вы можете объединить все вместе, чтобы получить информацию о товарах и покупателях.
select b.name, p.name, op.quantity
from order_products op
join orders o on o.id = op.order_id
join buyers b on b.id = o.buyer_id
join products p on p.id = op.product_id
name|name|quantity
abc|pen|50
abc|paper|25
abc|pin|50
xyz|paper|25
xyz|pen|100
SQL Fiddle
Если вы не сделаете это сейчас, это будет сложнее сделать позже.