我正在设计一个产品关系数据库,其中有产品是彼此的副本/盗版,我希望能够通过系统显示。
所以最初在我的初稿期间,我有一个名为“isacopyof”的产品中的字段,只想列出以逗号分隔的productID列表,这些列表是当前产品的副本。
显然,一旦我开始实施,那就不会有效了。
到目前为止,大多数多对多关系解决方案围绕一个关联表,列出了表A中的相关id和来自表B的相关id。这有效,但我的情况涉及SAME产品表中的相关项...
我如何围绕它构建解决方案?或许我在想错误的方向?
答案 0 :(得分:2)
因为某些东西是副本,这意味着你有父子关系......分层数据。
您正在寻找要建模的数据的正确轨道。您可以向现有表添加一列以保存parent_id值,而不是使用单独的表来保存关系,该值是指示当前记录的父级的主键值。这是an excellent read about handling hierarchical data in MySQL ...
可悲的是,MySQL没有分层查询语法,对于像这样的事情我强烈建议查看那些:
答案 1 :(得分:2)
你是在思考。
如果您的products
表格带有productid
密钥,则可以clones
表格productid1
和productid2
字段映射{{1} {}}到products
和两个字段上的多键。没问题,它仍然是3NF。
答案 2 :(得分:1)
您无法在“链接”表中找到指向同一产品表的链接。
有几种方法可以做到这一点,但基本设计可能只是2列:
ProductID1, ProductID2
这两列都链接回产品表中的ProductID。如果您知道哪个是“真正的”产品,哪个是副本,您可能有逻辑/约束,将“真正的”productID放在ProductID1中,将“copy”productID放在ProductID2中。