需要有关数据库结构的建议(MS SQL / MySQL)

Posted

技术标签:

【中文标题】需要有关数据库结构的建议(MS SQL / MySQL)【英文标题】:Need advice for Database structure (MS SQL / MySQL) 【发布时间】:2011-07-19 01:53:48 【问题描述】:

最好是MS SQL,我想从mysql切换过来。

所以我有一个很棒的客户,他有 4 个 Excel 文件。每个 Excel 文件代表一个Product Range

在每个 Excel 文件中,有 3 到 8 张工作表。每个Sheet 代表Type 中的Product Product Range

每个工作表,包含以下列:

PartNoDescriptionQTYPrice1Price2Price3Price4...

(从来没有,也不会超过 8 个价格列。)

每个工作表可能包含大约从 55000 的行。

现在,我现在面临的问题是不知道哪种方法是设置新数据库的最佳方式。

我目前拥有现有 MySQL 数据库的方式是每个 Sheet 代表一个表。而已! (它必须快速“放在那里”,因此没有时间投入到为 DB 设置适当的格式/结构。)

我最近发现我使用MSSQL数据库更胜任,所以我想进行切换,第二个原因,主要原因是因为我想重组数据库以便我可以做事更易于管理,并且可以更轻松地从我的站点设置数据库搜索。

我一点也不担心如何将所有内容插入数据库,因为去年我在业余时间编写了一个应用程序来解析这些 Excel 文件、提取工作表并将它们插入数据库, 带有可选设置。我担心如何实际设置这个新数据库。

鉴于上述详细信息,解决此问题的最佳方法是什么?

非常感谢任何帮助。谢谢!

更新:

关于定价列(示例),关于为什么每张表中有多个价格列的一些信息。:

价格栏 1 可能是镀锌单价,价格栏 2 可能是镀锌盒价格,价格栏 3 可能是不锈钢 GR304 盒价,而第 4 栏可能是不锈钢 GR316 单价。这些价格列对于每个产品范围都是不同的,但是,产品范围中的某些产品也可能包含一些相同的价格列。这就是为什么将每个产品作为单独的表格如此容易的原因。

【问题讨论】:

关于你的更新,是不是意味着有些产品可以用不同的材料制作,不同的材料价格不同? 那我宁愿看到一个更像partno, description, material, price的表格。 【参考方案1】:

一个简单的解决方案是将其拆分为 3 个表。 ProductRangeProductType 通过外键关系链接到 Product 表。

ProductRange
   Id
   RangeName
   // Plus any other columns you need. eg description, startdate etc

ProductType
   Id
   ProductTypeName

Product
   Id
   ProductRangeId
   ProductTypeId
   PartNo
   Description
   Qty
   Price1 
   // etc

如果您想在价格方面获得更大的灵活性,您可以在ProductPrice 表之间创建另一个Price 表。

Price
   Id
   Description
   Price

ProductPrice
    PriceId
    ProductId

在这种情况下,您的Product 表将不包含任何价格列。但是您现在可以根据需要添加任意数量的价格类型,并且每个 Product 可以有任意数量的价格。

【讨论】:

我建议为数量制作单独的表格,因为它不代表产品的质量......并且可能会随着价格而变化......只是为了未来的安全...... 这是一个非常有趣的方法@Geoff A。我希望在定价方面有很多灵活性,我会看看我能做什么。谢谢! @Ashwini - 是的,我们可以继续正常化一整天......但只是在这里保持简单:) @J.T.S. - 好吧,那么你定义。需要将价格放入他们自己的表中。【参考方案2】:

对我来说,有多个价格列似乎有点奇怪,除非 Price1 表示“商业费率”,而 Price2 表示“消费者费率”或类似的东西。如果不同的价格针对同一产品的不同功能,您可能需要考虑将它们分开到不同的表中。例如:

产品表:KeyTable、ProductDescription...

价格表:KeyTable、KeyProduct、PriceType、Price

或者,根据价格的计算方式,您可以从一个基本价格计算出各种其他价格。例如,如果商业价格是在基本价格上增加 5%,而消费者价格是在基本价格上增加 20%,则这些可能不应该存储在数据库中,因为它们很容易计算出来。是必需的。

【讨论】:

我明白了,让我解释一下为什么会有不同的定价列。 (我也会更新我的问题。) - 价格栏 1 可能是镀锌单价,价格栏 2 可能是镀锌盒价格,价格栏 3 可能是不锈钢 GR304 盒价,而第 4 栏可能是不锈钢 GR316 单价.这些价格列对于每个产品范围都是不同的,但是,产品范围中的某些产品也可能包含一些相同的价格列。这就是为什么将每个产品作为单独的表格如此容易的原因。【参考方案3】:

我假设您正在寻求有关数据库设计的建议,对吧?

我永远不会用每张表代表一个表来设计数据库。每个概念实体我都会有一个表,在你的情况下,产品是显而易见的。

所以有一个名为 Products 的表,其中包含您上面提到的列。为了适应产品类型,我只需要一个类型列来指示任何特定产品属于哪个产品类型。我最终会在 .Net 中使用枚举类型来指定支持的不同类型。

嗯,那是我的 5 美分。希望对您有所帮助。

【讨论】:

我已经画了一个简单的东西来看看我的桌子会是什么样子,我已经可以看到这会让一切变得多么容易。谢谢! :)

以上是关于需要有关数据库结构的建议(MS SQL / MySQL)的主要内容,如果未能解决你的问题,请参考以下文章

将数据从 MS SQL 移动到 MySQL

如何在 PHP + MS SQL 应用程序中向用户显示有关维护和夜间作业的消息

将 MS SQL 存储过程移植到 MySQL

MS SQL Server迁移至SQL Azure

有关优化此多层(具有多层子查询)SQL 查询的提示

MS SQL开发命名规则