sql - 数据库父关系到子关系问题
问题描述
我有一个多商店的数据库。商店有很多物品,如衣服、食品、化妆品等。因此,对于每种类型的物品,它们都有一张用于存储商店详细信息的表格。
连衣裙:id、名称、尺寸、价格、颜色、item_id
食物:id、名称、类型、价格、到期日、item_id
化妆品:id、类型、价格、性别、item_id
项目:id、标签、store_id
商店:id,名称
这里 item 与 Dress、Food、Cosmetic 等有 OneToOne 关系。 Store 与 item 有 OneToMany 关系。
现在我只想为商店获取诸如 Dress and Food 之类的商品。但是不明白怎么查询。现在我正在考虑将枚举存储到枚举(食品,化妆品......)等表的项目中。然后通过加入 Dress table 的 Dress 来取物品,并单独取食物。
以他们的任何方式更改数据库而无需此,以便我可以查询更好的方式。数据库设计是否不好,这就是我面临问题的原因?有更好的方法吗?
解决方案
我认为,如果可以的话,你应该简化数据模型。
- 表:商店,包含商店id、名称、地址和您需要的任何其他信息
- 表:ItemType,包含商品类型 id、商品代码、文本描述(基本上是您可以出售的商品类型的标签列表。制作此表而不是为每种类型创建一个新表将让您在商店添加稍后新的项目类型
- 表:Item,包含一个主键 id 和以下外键(store id,item type id),然后是你所有的标准信息。价格、商品名称、描述
然后,如果您想获取一家商店的商品,请从 Store_id in 的商品中选择 *(从名称 = 'MyStore' 的商店中选择 id)。如果你想从一个商店获取所有化妆品,它是 select * from Item where store_id in (select id from Store where name = 'MyStore') 和 itemType_id in (select id from ItemType where code = 'cosmetics')
当项目目录发生变化时,这将使维护变得更加容易,因为这意味着您只需在 ItemType 中添加一行,然后就可以添加新项目。如果你添加一个新的商店,同样的事情。
推荐阅读
- javascript - Vue.js 不在 html 上显示值
- javascript - 在分配之前检查多维数组的一部分是否为空
- python - 为什么使用流光按钮时不显示输出?
- c++-cli - C++/CLI 中的 ExpandoObject
- anchor - 如何用苗条粘在锚上?
- html - 如何找出站点密钥
- dataset - 如何在 TensorFlow 2 中为三元组挖掘创建和打乱数据集?
- amazon-web-services - 为什么 RDS 不使用 Amazon 根证书进行 SSL 连接
- asynchronous - 在异步函数参数中声明特征对象的关联类型
- java - 引起:org.hibernate.exception.SQLGrammarException:JDBC异常执行SQL