Database design 数据库设计[项目详情、成分]
我有以下表格结构: 项目 身份证 名字 价格 身份证 成本 项目\u id\u fk 比如说,商品名称是“含可乐和炸薯条的汉堡”。这三个项目在项目表中被视为单个项目。要计算出项目,我的想法是创建下表: 项目(详情) 身份证 名称 项目\u id\u fk 成分 身份证 名称 bundle\u id\u fk 因此,在项目_详情下,我可以添加“汉堡”、“可乐”、“炸薯条”。然后,我可以为每个项目添加各自的成分Database design 数据库设计[项目详情、成分],database-design,Database Design,我有以下表格结构: 项目 身份证 名字 价格 身份证 成本 项目\u id\u fk 比如说,商品名称是“含可乐和炸薯条的汉堡”。这三个项目在项目表中被视为单个项目。要计算出项目,我的想法是创建下表: 项目(详情) 身份证 名称 项目\u id\u fk 成分 身份证 名称 bundle\u id\u fk 因此,在项目_详情下,我可以添加“汉堡”、“可乐”、“炸薯条”。然后,我可以为每个项目添加各自的成分 因此,它被认为是一个好的设计吗?hm。。不是真的!商品、价格和细节之间存在一对一的关系
因此,它被认为是一个好的设计吗?hm。。不是真的!商品、价格和细节之间存在一对一的关系 我想你需要更像这样的东西 餐桌
id meal_name
id meal_id item_id
id name price description
id item_id ingredient_id
id name
餐饮项目表
id meal_name
id meal_id item_id
id name price description
id item_id ingredient_id
id name
项目表
id meal_name
id meal_id item_id
id name price description
id item_id ingredient_id
id name
项目成分表
id meal_name
id meal_id item_id
id name price description
id item_id ingredient_id
id name
配料表
id meal_name
id meal_id item_id
id name price description
id item_id ingredient_id
id name
然后是另一张桌子,像
这个想法是。。。三餐可以有很多项目。。。物品可以有多种成分。有了它,MySQL可以很容易地算出每顿饭的价格 此查询将显示膳食25中使用的所有成分:
SELECT ig.*
FROM `item_ingredients` as ii,
`ingredients` as ig,
`meal_items` as mi,
'meals` as me
WHERE me.`id` = 25
AND mi.`meal_id` = me.`id`
AND ii.`item_id` = mi.`item_id`
AND ig.`id` = ii.`ingredient_id`
这将显示第25餐的价格总和:
SELECT SUM(it.`price`)
FROM `items` as it,
`meal_items` as mi,
'meals` as me
WHERE me.`id` = 25
AND mi.`meal_id` = me.`id`
AND it.`id` = mi.`item_id`
如果这将成为排序系统的一部分,则需要使用表继承,以便可以将外键从订单行项指向一个表,而不使用表继承 您需要了解数据库表继承 为了简单起见,我们将使用单表继承 模式:
create table product_types (
product_type_id int primary key,
name text not null,
parent_id int null references product_types(product_type_id)
);
create table products (
product_id int primary key,
type int not null references product_types(product_type_id),
name text not null
);
create table combo_products (
combo_id int references products(product_id),
product_id int references products(product_id),
quantity int not null default 1,
primary key (combo_id, product_id)
);
create table catalogs (
catalog_id int primary key,
name text not null
);
create table catalog_items (
catalog_id int references catalogs(catalog_id),
product_id int references products(product_id),
price numeric(19,2) not null
);
create table bill_of_materials (
good_id int references products(product_id),
item_id int references products(product_id),
quantity int not null default 1,
primary key (good_id, item_id)
);
用法:
insert into product_types values
(1, 'Product', null),
(2, 'Good', 1),
(3, 'Combo', 1);
insert into products values
(1,2, 'Burger'),
(2,2, 'Fries'),
(3,2, 'Pop'),
(4,3, 'Combo 1'),
(5,2, 'Bun'),
(6,2, 'Patty'),
...;
insert into bill_of_materials values
(1, 5, 1), /*bun in burger*/
(1, 6, 1) /*patty in burger*/
...;
insert into combo_products values
(4, 1, 1), /*burger*/
(4, 2, 1), /*fries*/
(4, 3, 1); /*pop*/
insert to catalog values
(1, 'Default Catalog');
insert into catalog_items values
(1, 1, 4.99), /*burger*/
(1, 2, 2.49), /*fries*/
(1, 3, 1.99), /*pop*/
(1, 4, 7.99); /*combo1*/
这会成为订购系统的一部分吗?我想的是这样的:物品[id,名称],物品详细信息[id,名称,物品[id,fk],成分[id,名称,单位,数量….]。以这种方式,1项具有许多项详细信息。那么每种食物都有很多成分。例如,我创建了一个项目[汉堡配薯条和可乐]。在我的商品明细表中,我有分类[汉堡、薯条、可乐]。然后,我可以为每个项目的详细信息指定配料(可口可乐除外)。