代码之家  ›  专栏  ›  技术社区  ›  Merc

我应该使这些字段正常化吗?

  •  0
  • Merc  · 技术社区  · 7 年前

    我被撕裂了。我所处理的数据是很难处理的;一份“工作”目前有100多栏。

    我把所有的栏目都放进了工作中,因为每次我得到一份工作的信息,我都会有99.99%的时间需要 全部的 数据的。所以,如果我是学生的话,拆分它可能会给我带来更好的成绩,但每次加载数据时,它都会分解成关节。

    我发现很难决定的一个例子是货物。一艘船可以有一件(80%的时间)、两件(99%的时间)或三件(1%的时间)货物。从来没有4个。以1:N的比例存储货物与作业的关系非常简单,但这也意味着:

    • 每次加载作业时,我都需要一个额外的查询来获取货物
    • crud更痛苦一点,因为我必须创建另一个商店,有权限等等。

    但是,现在我的数据库中有这些列:

    cargoId1, cargoDescription1, contractTonnage1,
    contractTonnageTolerance1, commentsOnTonnageTolerance1, 
    tonnageToBeLoaded1, tonnageLoaded1
    
    cargoId2, cargoDescription2, contractTonnage2, 
    contractTonnageTolerance2, commentsOnTonnageTolerance2, 
    tonnageToBeLoaded2, tonnageLoaded2
    
    cargoId3, cargoDescription3, contractTonnage3, 
    contractTonnageTolerance3, commentsOnTonnageTolerance3, 
    tonnageToBeLoaded3, tonnageLoaded3
    

    你会怎么做?思想?

    1 回复  |  直到 7 年前
        1
  •  1
  •   George Menoutis    7 年前

    我得警告你,你可能会因为一个“主要基于意见”的问题而获得否决票、关闭票和/或删除票。我认为你的问题主要是基于意见的,因为它本质上是“正常化的利弊”的同义词。(注:我讨厌这样会让你落选)。

    如果您希望两全其美,可以做的一件事是使表规范化,并创建一个视图,该视图将返回带有pivot的非规范化表单。这样,通过规范化,数据的完整性会更好,编写查询也会更容易。会(稍微有一个好的索引)影响性能的连接将被完成,但对于完整性来说,imo这是一个很小的代价。