gpt4 book ai didi

php - 如何在 PHP 和 MySQL 中处理多个值选择

转载 作者:行者123 更新时间:2023-11-29 18:45:08 25 4
gpt4 key购买 nike

我最近参加了在线 PHP/MySQL 类(class),作为练习的一种方式,我为一家油漆店制作了一个库存网站。

我们有一个油漆台:

paintID: INT, AIpaintType: varchar (e.g. metal, primer, water-based, etc.)paintPrice: INT (e.g. 10, 15, 20)paintColor: ???

颜色表:

colorID: INT, AIcolorName: varchar (e.g. blue, red, white, transparent, etc.)

每种涂料产品都有一种或多种颜色。所以我想在product.php页面中创建一个部分,提供所有颜色作为复选框。虽然在创建新产品时这很简单,

  • 一旦用户按下提交按钮,如何通过 PHP 将选定的颜色存储在 MySQL 数据库中(以及为 PaintColor 列提供什么类型)
  • 如何检索/显示所有可能的颜色以及在产品页面的“只读”或“更新”模式下选择一次的颜色

最佳答案

Paint 和 Color 之间的关系是多对多。

从概念上讲,两个实体之间可以有 M <-> M 关系,但在具体实现中,两个实体之间需要一个“解析器”表。我可能会将此表称为“paintColor”

里面会有这样的东西:

paintColor
----------
paintColorID
paintID (FK to paint)
colorID (FK to color)

正如您应该能够辨别的那样,这允许您将任意数量的单独颜色值与特定油漆相关联。我个人不知道这实际上是否是一个可行的设计,因为关于油漆/颜色组合的特定实例是否不需要具有其他属性的问题,例如您在 Paint 中使用 ColorID 作为外键的原始设计是其实不是你想要的。

例如,如果“金色”和“黑色”油漆的价格可能不同,那么您当前的型号就会出现问题,除非您将定价附加到油漆颜色而不是油漆。任何具有一定复杂程度的数据模型都会包含许多这样的权衡,并且设计背后的推理可能并不明显。

在您的简单模型中,您可能希望在实际的油漆店应用程序中存在其他外键关系,例如制造商。 PaintType 应该在表中,而不是 varchar。

MySQL 实际上有一种特殊的数据类型,本质上允许您在一个列中嵌入多对多。它被称为 ENUM 。如果您想将它用于此应用程序,那么这并不是您可以做出的最糟糕的决定,只要您记住 ENUM 违反了所有关系数据库都应该支持的基本规则。对于您的简单应用程序,它允许您制作“鱼与熊掌兼得”,这在简单的应用程序中效果很好。再说一遍,如果一种油漆对于两种不同颜色的油漆可能有不同的价格点,而这两种颜色是相同的油漆,那么您就会遇到问题。

出于这个原因,通常多对多关系更合适,并且按照您描述应用程序和您期望的界面的方式,解决方案是多对多。做出选择后,重要的是您开始了解该选择对您的应用程序的影响。

我通常建议人们考虑选择意味着什么:如果是 1-1 关系,那么实体 A 可以拥有且仅有一个属性 B。

关于php - 如何在 PHP 和 MySQL 中处理多个值选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44707174/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com