【问题标题】:Stop duplicating start of row data in database停止复制数据库中行数据的开始
【发布时间】:2014-01-27 05:33:41
【问题描述】:

我正在为当地的汽车经销商建立一个数据库。

客户想要一个向下钻取选项来定位服务计划,我正在尝试找出逻辑。

所以基本上用户做的第一件事就是选择车型,然后是变速箱年份,然后是公里/英里(此数据用于定位服务计划):

这是通过使用数据库中的值填充的下拉菜单完成的。

现在,每个任务的服务计划定价会根据 KM / Miles 而变化,并且在车辆之间永远不会相同。

所以视觉上看起来像这样:

所以前 4 列(型号、年份、变速箱、公里数)是下拉列表的值,这些值决定使用哪个服务计划(是的,有些车辆名称由于自动或手动变速箱而重复如上表所示 - 我需要确保它们不会在下拉菜单中重复)。

现在我想知道如何在 MySQL 中进行布局以使用 PHP 查询

用重复数据填充所有空白单元格,例如

以某种方式使用规范化(有人向我建议)不幸的是,我是数据库新手,不太清楚如何工作,我意识到这意味着拥有更小的关系表,但我不太了解逻辑。

【问题讨论】:

  • 您如何将数据存储在 db 中...您是否有 2 个差异表或更多...。表中的关键字段是什么...
  • 我还没有创建它,我正在尝试在开始之前弄清楚如何构建它。
  • 通过查看您的表格,我可以说您应该制作两张表格:Sr.No. -> Model -> Year -> Transmission 和其他为 `Sr. No -> KMs/Miles -> Oil...etc.`。然后你必须用 sr.no (索引字段)映射两个表。
  • 好的@Ankur140290,这听起来像我要找的,你能详细说明一下吗?
  • 当用户说假设Vehicle-1 1996 Automatic 那么你必须得到sr.no。从第一个表,然后搜索具有相同 sr.no 的第二个表。

标签: php mysql database database-design logic


【解决方案1】:

你可以有如下所示的表格:

因此,正如向您解释的那样,您可以编写查询来提取所需的数据。

【讨论】:

    【解决方案2】:

    正如有人建议的那样,如果您希望数据库具有数据完整性并能够适应变化,则需要规范化您的数据库。你想争取至少第 3 范式 (3NF)

    开始了解规范化,因为没有它,您将很难构建一个好的数据库。 http://en.wikipedia.org/wiki/Database_normalization

    您至少需要将其分成两个表。我建议一个Vehicle 表,其中包含一个列ModelYearTransmissionKM/Miles(所有车辆属性),然后是一个具有服务计划属性的Service Plan 表。然后,Vehicle 表可能会有一个服务计划列,该列上有一个外键约束,映射到Service Plan 表 (Service_Plan_ID) 的主键。这样,当您询问车辆 X 时,您将获得该车辆映射到的服务计划的映射。

    【讨论】:

    • 因为 KM 决定了使用哪些服务计划,我可能会将其放在服务计划表中吗?
    • 不,绝对不是。您没有在数据库中执行逻辑。您只是在创建一个实体并存储有关该实体的属性。车辆上有 KM/Miles。不是服务计划。
    • 规范化的一部分是表中的每一列都应该是描述该实体的东西
    • 好的,我明白了 :) 但就像每辆车都有 8 个服务计划,每一个都与上一个不同,并且取决于 KM,所以我怎么知道该指向哪里?
    • 如果您在车辆和服务计划之间存在多对多关系,那么我建议您使用另一个表作为映射表 (VehicleServicePlan),其中包含身份行和 VehicleId 的外键行和 ServicePlanId。
    猜你喜欢
    • 2014-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-09
    • 1970-01-01
    • 2011-06-09
    • 2015-07-12
    相关资源
    最近更新 更多