规范化数据并插入SQL

时间:2013-11-12 02:32:03

标签: sql sql-server database sql-server-2012

我有什么可能是一个愚蠢的问题,但在这里。

我有一个ORDER_T表,一个CUSTOMER_T表和一个ORDERLINE_T表。

我还有一组我需要规范化的数据。此“坏数据”中的每条记录在名为Item1,Item2和Item3的属性中最多存储3项。我认为我正确地将它正常化,通过采取每个项目,分离它,并使它构成它自己的记录是好的。例如

ORDER_T

OrderID ItemID ItemDescription CustomerID
1        1001   Apple             100
1        1002   Grape             100
1        1003   Pear              100

OrderID PK CustomerID FK 。我意识到当我试图插入我的数据库时,它通过PK抱怨了多个重复记录。杜 - 这是有道理的。现在我的问题是:

我相信我错了,但是将每个OrderID包含多个项目的数据标准化(到第三种形式)的正确方法是什么?是否具有诸如Item1,Item2,Item3等属性的“不良形式”,它不可扩展并且静态设置为那样?我是否过度思考它应该只是让它独自一人?

我只是相信我需要一些方向,我会很高兴。

1 个答案:

答案 0 :(得分:1)

你需要下一张桌子:

所有独特客户

customers:
CustomerId (PK)
Name

所有独特的物品

Items:
ItemId (PK)
ItemName

所有独特订单:

Orders:
OrderId (PK)
CustomerID (FK)
OrderDate

然后你需要多对多关系表:

OrderItems:
OrderId (FK)
ItemId (FK)
count
primary key (OrderId, ItemId)

然后您将能够插入订单(可以为空),然后通过OrderItems表添加/删除此订单中的商品