数据库中同一列中的多个值

时间:2016-03-03 01:39:32

标签: sql

我在网上做点菜。但我想知道我是否可以在同一列中有2个值。或者,我有什么办法可以做到这样吗?

数据库结构:

id | product_code | product_name | price

示例数据:

1 | 'A01' | 'Chicken Fired Rice' | 6.50 10.50

因此,假设鸡肉炒饭有两种尺寸,规格为6.50美元,大尺寸为10.50美元。有什么想法我可以创建这样的数据库吗?

谢谢。

4 个答案:

答案 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)
)

或如果它总是两个尺寸,那么您可以创建包含两列的单个表来存储PriceRegular尺寸的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字段的引用。肯定会有/应该/将要添加到这样的表格结构中的其他信息,但这是您要求的灵活性的基础。