【问题标题】:How best to allow multiple categories for one user or id?如何最好地允许一个用户或 ID 使用多个类别?
【发布时间】:2015-01-27 15:43:50
【问题描述】:

我是 SQL 新手,但我正在尝试为目录类型数据库创建一个表。这个想法是有一些公司(公司表)在一个或多个类别中运营 - 例如。包,鞋子,皮带。我刚才有一个类别表,其中包含大约 55 个类别的列表 - 我想让它保持开放状态,以便以后添加新类别。

我有这样的表格:ID、Company_ID、Category 1(布尔值)、Category 2(布尔值)、Category 3……等等。

我的思路是正确的还是有更好的方法来做到这一点?

公司将能够登录的想法,由此它将知道他们的 ID,并且他们将能够选中他们所操作的类别的选择并保存。理想情况下,我希望能够让一些 PHP 自动以表单形式显示复选框,而不是对其进行硬编码。稍后我希望能够从搜索或链接中选择将 X 类别设置为 1 的公司。

【问题讨论】:

标签: mysql sql multiple-columns


【解决方案1】:

这是一个多对多关系的例子。

你必须使用第三个表来表示关系,所以你有以下三个表:

Company (id, name , ...)
Category (id, name, ...)
Company_Category (company_id, category_id)

其中company_idCompany.id 的外键,category_idCategory.id 的外键。

希望这会有所帮助。

【讨论】:

  • 类别表有将近 60 行,这样行吗?刚才它显示为 (id, company_id, art, audio, bag, barware, bedding,...,) 还是我做错了/行太多?
  • 我希望使用是/否或活动/非活动功能而不是列表来设置类别,不知道这是否是错误的方法?
  • 为什么您的类别表中有一个 company_id 字段?正确的做法是使用具有固定行的类别表(您可以根据需要添加新行),然后在中间表中为每个关联公司添加一个元组 - 类别,然后查询该表。否则,根据您的方法,每次添加新类别时都需要修改 Company 表的结构。
  • 我设想总共或大约 250 家公司。和50-60个类别。每个公司可能有 1 个类别或(理论上)所有类别,平均更可能是 2 或 3 个。我正在努力弄清楚应该作为类别表的列包含的内容。只是类别 ID 和类别名称,还是应该有公司 ID(外键?),以便我可以将类别与特定公司相关联?或者这就是加入表的用途?将类别作为单独的列包含在公司表中并仅使用平面数据库是不可能的或不明智的吗?
  • 对于关联,您使用连接表。你想要做的是一种数据库的非规范化。对于这些场景(如果您真的想这样做),您可能会考虑使用一些 NoSql 数据库并将列表存储在元组中。
【解决方案2】:

我不确定我是否理解您的意思...但是,据我了解,您只是在 Company 和 Category 之间存在 n-n 关系,您只需要一个中间表。 因此,您将拥有带有 COMPANY_ID 的公司、带有 CATEGORY_ID 的类别和可以有自己的 ID 的中间表,以及两个额外的列,一个用于 CATEGORY_ID,另一个用于 COMPANY_ID。

我不知道我是否理解您的问题,希望对您有所帮助。

顺便说一句,这比每次定义新类别时都修改公司表的架构要好得多。请不要那样做。

【讨论】:

  • 我想这就是我需要的...公司 1 的商品适用于 A、B 和 C 类...公司 2 的商品适用于 A、F、H 类...等等.每个公司可以有很多类别,这会有所不同吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-10
  • 1970-01-01
  • 2011-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多