我在网上做点菜。但我想知道我是否可以在同一列中有2个值。或者,我有什么办法可以做到这样吗?
数据库结构:
id | product_code | product_name | price
示例数据:
1 | 'A01' | 'Chicken Fired Rice' | 6.50 10.50
因此,假设鸡肉炒饭有两种尺寸,规格为6.50美元,大尺寸为10.50美元。有什么想法我可以创建这样的数据库吗?
谢谢。
答案 0 :(得分:1)
这是个糟糕的主意,你的数据库设计违反了第一个普通形式:https://en.wikipedia.org/wiki/First_normal_form。
对于这种违规行为,对这样的表格进行选择会更加困难。
答案 1 :(得分:1)
不要在违反 First Normal Form
的价格列中存储类似信息,这将很难解析数据
我会选择两张桌子
一个用于存储产品信息,另一个用于存储价格。
产品表
Create table Product
(
Product_Id int, --Auto generated
product_code varchar(10),
product_name varchar(100)
)
价格表
Create table Price
(
Price_Id Int, --Auto Generated
Product_Id int, --Foreign key column referred from product table
Size varchar(20),
Price Decimal(10,2)
)
或如果它总是两个尺寸,那么您可以创建包含两列的单个表来存储Price
和Regular
尺寸的Large
。
Create table Product
(
Product_Id int, --Auto generated
product_code varchar(10),
product_name varchar(100),
Regular_size_price Decimal(10,2),
Large_size_price Decimal(10,2)
)
答案 2 :(得分:1)
从DB的角度来看,这是糟糕的设计。为了帮助您避免这样的问题,有一组规则要求Normal Forms。
有很多方法可以解决这个问题。 一种是在你的桌子上添加另一列"尺寸"例如,将一个插入一个小的行,另一个插入一个大的。
如果你真的想要使用那个设计,我确信你可以使用逗号分隔值和管道相同的字符串,并使用创造力来打破这个字符串的大小价格。 :)
答案 3 :(得分:0)
有几种方法;一个是使用JSON字段,这是一个不受普遍支持的东西。虽然在大多数情况下这不是一个好主意,包括你的。
规范化是将数据库结构分解为逻辑关系部分(表)的过程。例如:
产品:id | code | name
价格:product_id | size | price
通过这种方式,您可以为任何特定产品提供任意数量的价格; product_id
是外键,是对产品的id
字段的引用。肯定会有/应该/将要添加到这样的表格结构中的其他信息,但这是您要求的灵活性的基础。