数据库设计 - 目录 - 范围 - 产品

时间:2013-01-04 00:42:55

标签: mysql database database-design

任何人都可以建议以下数据库设计:

用户可以制作目录 在目录中,用户可以制作范围 - 即一系列产品 在一个范围内,用户可以添加多个产品 在一个范围内,用户可以添加多个范围 - > range-> range->范围都包含产品。

我目前在我的数据库中 -

catalogue_range with - id,name,description 和 catalogue_product with - id,range_id,name,description

谁能看到我想要制作的东西?

我的目标是能够在目录范围内创建多个目录范围,并为每个目录范围添加多个产品。

这是我当前的SQL:

`catalogue_range` (
      `id` char(40) NOT NULL,
      `profile_id` char(40) NOT NULL,
      `type` enum('pdf','db') DEFAULT NULL,
      `status` enum('new','draft','live') NOT NULL,
      `name` varchar(64) NOT NULL,
      `description` varchar(1000) NOT NULL,
      `updated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
      PRIMARY KEY (`id`),
      KEY `profile_id` (`profile_id`)
    )

`catalogue_product` (
  `id` char(40) NOT NULL,
  `catalogue_id` char(40) NOT NULL,
  `order` smallint(5) unsigned NOT NULL,
  `name` varchar(50) NOT NULL,
  `description` varchar(250) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `catalogue_id` (`catalogue_id`)
) 

提前致谢。

2 个答案:

答案 0 :(得分:1)

  1. 目录(目录ID ,您的私人属性)
  2. 产品(产品ID ,#catalogue id,您的私人属性)
  3. 范围(范围ID ,#range id parent,您的私人属性)
  4. 产品系列( #product id #range id
  5. 您需要编译存储过程/应用算法:

    • 范围的产品列表(计算递归sqls mysql不像oracle那样提供分析函数)
    • 目录/范围的范围列表

    希望它有所帮助。 S上。

答案 1 :(得分:1)

假设产品一次只能存在于一个目录中,那么您的设计几乎可以正常使用。您遗失的是catalogue_range上的递归外键。在catalogue_range表定义中添加以下内容:

`parent_range_id` char(40) NULL,
FOREIGN KEY (`parent_range_id`) REFERENCES catalogue_range(`id`)

任何给定用户的顶级范围将具有NULL parent_range_id,其他用户将引用包含范围。请注意,在SQL中,层次结构不一定容易使用。您可能还希望研究使层次结构数据更适合SQL的技术,例如nested sets