【问题标题】:database schema confusion for category attributes类别属性的数据库模式混淆
【发布时间】:2026-01-13 21:40:01
【问题描述】:

这些是我的要求:

  1. 每个类别都有多个组
  2. 每个组有多个属性
  3. 每个属性都有多个值

到目前为止,我已经想出了这个数据库设计

类别组表

GroupID | CatID[References Category(CatID)] | GroupName

类别属性表

AttributeID | AttributeName | GroupID[References CategoryGroups(GroupID)] | AttributeValue

所以你们认为这是一个整洁的设计吗?有什么建议吗??

【问题讨论】:

    标签: mysql sql-server database database-design


    【解决方案1】:

    除了将第二个表命名为GroupAttributes,因为它对类别一无所知,这是一种最常用的好方法。您有多个 1:N(一对多)关系,并且您以正确的方式引用表。

    【讨论】:

    • 我现在主要关心的是如何批量上传数据?我在想的是,用户必须先选择类别,然后再选择组,然后他上传带有值的属性......我是对的吗?
    • 插入批处理数据可能有点复杂。我的意思是图形用户界面,用户必须使用。如果您指的是单个组的批处理值,那么可以肯定,这个工作流程可以很容易地想象为 GUI 和代码。但是,当您希望允许为多个类别和组添加值时,GUI 将变得非常复杂且难以看到低谷。如果没有像用户界面这样的东西,那么它应该很容易使用,就像你说的那样。您还可以按名称搜索类别或组以获取 ID 并根据需要在层次结构中插入尽可能高的数据。
    • 你会按照你说的去做..按组插入..还有一个查询...知道我将如何在 GUI 中显示按组名分组的属性吗?假设我有 3 个组...每个组下有 5 个属性..我将如何在 GUI 中显示这个??在第 1 组>>>5 属性...在第 2 组>>>>>>>5属性等等...
    • 有很多方法可以做到这一点,具体取决于您愿意显示多少信息。例如,对于逗号分隔值,您可以从按组分组的数据库中选择 something like this。为了详细显示,您必须查询数据库的次数与组数一样多。您还可以创建一个视图来合并所有信息,以便于搜索。
    【解决方案2】:

    你的四个概念有什么理由不用四个表吗?:

    Category: id, <category stuff>
    Group: id, category_id, <group stuff>
    Attribute: id, group_id, <attribute stuff>
    Value: id, attribute_id, <value stuff>
    

    主键是 id 列。

    外键同名(即attribute_id是Attribute.id的外键)

    【讨论】: