MySQL在大单表上的实际规范化

时间:2009-11-24 15:48:19

标签: mysql normalization

我对PHP MySQL比较陌生,并且自己负责学习“动手”方法。幸运的是,我目前拥有一个(非常)大型数据库,所有数据库都与硬币数据相关,并且有一个表可供使用。它目前有以下列(每行代表一个项目[硬币]):

Group
ItemNo
ListNo
TypeCode
DenomCode
PeriodCode
ActualDate
SortDate
CostPrice
SalePrice
Estimate
StockLevel
DateEntered
DateSold
Archived
ArchiveWhenSold
Highlight
KeepSold
OnLists
NotForSale
Proof
StockItem
OnWeb
Cats
Ref1
Ref2
Variety
Picture
Description
TypeName
TypeHeading
DenomName
DenomHeading
DenomValue
PeriodName
PeriodHeading
PeriodStartYear
PeriodEndYear

新表的分组相对明显:

周期:

PeriodCode
PeriodName
PeriodHeading
PeriodStartYear
PeriodEndYear

DENOM:

DenomCode
DenomName
DenomHeading
DenomValue

类型:

TypeCode
TypeName
TypeHeading

所有其余的,在硬币表格下:

Group
ItemNo
ListNo
TypeCode
ActualDate
SortDate
CostPrice
SalePrice
Estimate
StockLevel
DateEntered
DateSold
Archived
ArchiveWhenSold
Highlight
KeepSold
OnLists
NotForSale
Proof
StockItem
OnWeb
Cats
Ref1
Ref2
Variety
Picture
Description

所以我希望将表规范化为指定的表。我知道我在看JOIN,但我想知道最好的方法。我是否为每个数据组(Denom,Period,Type)创建一个新表FIRST,然后使用JOIN语句插入数据?或者有没有办法使用JOIN语句“动态”创建新表。我已经在这里打开了一本很棒的好书,并且很好地关注了MySQL的这一部分并且也在浏览这个网站,但是还没有找到“正确”的方法来做到这一点。

我在这里要求一些知识渊博的建议的原因是我对如何维护“关系”和键等有点不确定。即如果我创建一个名为“Denom”的表并用所有不同的项填充它从所有当前表数据,并让它创建一个唯一的主键,如何然后将这个新的主键的引用从Denom表插入主Coin表(在新项目DenomID下),以便它们匹配?

我基本上需要将此表拆分为4个单独的表。我尝试使用Access 2007的表分析器向导,它看起来很像我这样的n00b,但是有太多的数据,它实际上已经崩溃了。反复。可能是最好的,但现在我需要了解一些最佳实践,以及如何将其付诸实践。任何建议/帮助/相关链接将不胜感激。

1 个答案:

答案 0 :(得分:0)

首先创建表,不要忘记将外键字段添加到包含主表中主键的所有子表中(每个新表也必须获得主键),以便您可以加入表。如果您没有主键,则需要在执行任何其他操作之前创建一个主键。

将数据放入表中是一个简单的插入

insert tableb (field1, field2)
select field1, field2 from tablea

您将加入以获取数据库,因此请记住在新表上创建索引,尤其是在外键字段上。