共享主键

End*_*age 4 mysql tags database-design shared-primary-key

我猜这是一个半常见的问题,但我在过去的问题列表中找不到它.我有一组需要共享主键索引的产品表.假设如下:

product1_table:
    id,
    name,
    category,
    ...other fields

product2_table:
    id,
    name,
    category,
    ...other fields

product_to_category_table:
    product_id,
    category_id
Run Code Online (Sandbox Code Playgroud)

显然,在两个产品表之间建立共享索引会很有用.注意,保持它们分开的想法是因为它们除了基础之外还有很多不同的字段集,但是它们共享一个共同的分类.

更新:

很多人都建议使用表继承(或gen-spec).这是我所知道的一个选项,但在其他数据库系统中我可以在表之间共享一个序列,我希望MySQL有类似的解决方案.我认为它不是基于回答.我想我必须继续使用表继承...谢谢大家.

cha*_*aos 8

这不是很常见,不是.没有本机方式来共享主键.在你的情况下我可能做的是:

product_table
    id
    name
    category
    general_fields...

product_type1_table:
    id
    product_id
    product_type1_fields...

product_type2_table:
    id
    product_id
    product_type2_fields...

product_to_category_table:
    product_id
    category_id
Run Code Online (Sandbox Code Playgroud)

也就是说,有一个主产品表包含所有产品的条目,并且具有在类型之间进行概括的字段,以及具有外键的类型指定表到主产品表中,这些表具有特定于类型的数据.


Lar*_*tig 5

更好的设计是将公共列放在一个产品表中,将特殊列放在两个单独的表中。在所有三个表中都使用 product_id 作为主键,但在两个特殊表中,它是另外一个返回主 products 表的外键。

这简化了按类别搜索 ID 和名称的基本产品。

请注意,您的设计还允许每个产品最多属于一个类别。