- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我最近参加了在线 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页面中创建一个部分,提供所有颜色作为复选框。虽然在创建新产品时这很简单,
最佳答案
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/
我是一名优秀的程序员,十分优秀!