MySQL数据库 - 相同结果来自同一个表/多对多数据库设计问题

时间:2010-08-21 03:41:43

标签: mysql database hierarchical-data

我正在设计一个产品关系数据库,其中有产品是彼此的副本/盗版,我希望能够通过系统显示。

所以最初在我的初稿期间,我有一个名为“isacopyof”的产品中的字段,只想列出以逗号分隔的productID列表,这些列表是当前产品的副本。

显然,一旦我开始实施,那就不会有效了。

到目前为止,大多数多对多关系解决方案围绕一个关联表,列出了表A中的相关id和来自表B的相关id。这有效,但我的情况涉及SAME产品表中的相关项...

我如何围绕它构建解决方案?或许我在想错误的方向?

3 个答案:

答案 0 :(得分:2)

因为某些东西是副本,这意味着你有父子关系......分层数据。

您正在寻找要建模的数据的正确轨道。您可以向现有表添加一列以保存parent_id值,而不是使用单独的表来保存关系,该值是指示当前记录的父级的主键值。这是an excellent read about handling hierarchical data in MySQL ...

可悲的是,MySQL没有分层查询语法,对于像这样的事情我强烈建议查看那些:

  • PostgreSQL(免费)
  • SQL Server(Express是免费的)
  • Oracle(Express也免费)

答案 1 :(得分:2)

你是在思考。

如果您的products表格带有productid密钥,则可以clones表格productid1productid2字段映射{{1} {}}到products和两个字段上的多键。没问题,它仍然是3NF。

答案 2 :(得分:1)

您无法在“链接”表中找到指向同一产品表的链接。

有几种方法可以做到这一点,但基本设计可能只是2列:

ProductID1, ProductID2

这两列都链接回产品表中的ProductID。如果您知道哪个是“真正的”产品,哪个是副本,您可能有逻辑/约束,将“真正的”productID放在ProductID1中,将“copy”productID放在ProductID2中。