Birden db tablo etiketleyebilirim etiket sisteminin tasarlanması

2 Cevap php

Ben onları etiketleri kullanarak arama yapabilirsiniz, böylece kullanıcıların öğeleri etiketlemek için izin isteyen. Temiz bu ulaşmanın en iyi yolu nedir? Bugüne kadar çözüm sadece benim şimdiki db sistemine iki ekstra tablo ekleyerek içerir ile geldi.

<db Trackable product 1>
int id;
info etc
</>

<db Trackable product 2>
int id;
info etc
</>

//defines the M:M relationship between Tag and various types of Trackable products
<db TagLink>
int trackableProd1Id
int trackableProd2Id
int tagId
</>

<db Tag>
int tagId
tag name etc
</>

Bu konuda gitmek için iyi bir yolu var mı? Bu yaklaşımın bir yararı iyi ölçek gerektiğini ve o da bana sadece Taglink tabloya bir sütun ekleyerek gelecekte daha izlenebilir ürünler eklemek için izin verir. Bu tabii ki ben tabloları 10 bulunuyor izlemek için planlanan eğer iyi bir fikir değil ama yukarı 3-4 tablolar için iyi çalışması için bu olmamalıdır ispatlamak gerekir?

2 Cevap

Aksine Taglink tabloda birden "TrackableProd_N_id" sütunları yerine, ben sen gibi çoklu-sütun yabancı anahtar, tanıtmak önermek

   TagLink table
      int ProdGroup    -- "points" to table 1 vs. table 2 etc.
      int ProductId
      int TagId

Ürünün ek kaynaklar gelip bu şekilde size sadece onlar için yeni bir ProdGroup numarası "icat" ve Productıd (veya konusu tabloya diğer birincil anahtar) kullanmanız gerekir.

(: Isterseniz, n ilişki m) Kuyu, genellikle etiketleri çok-çok ilişkisi ile uygulanmaktadır. Üç tablo vardır:

tags
    id INT NOT NULL AUTO INCREMENT
    name VARCHAR NOT NULL
    .
    .
    .
    possibly other fields
    .
    .
    .
    PRIMARY KEY (id)

items_you_want_to_tag
    id INT NOT NULL AUTO INCREMENT PRIMARY KEY
    name VARCHAR NOT NULL
    .
    .
    .
    possibly other fields
    .
    .
    .
    PRIMARY KEY (id)

xref
    tag_id INT NOT NULL
    item_id INT NOT NULL
    FOREIGN KEY (tag_id) REFERENCES tags(id)
    ON UPDATE CASCADE ON DELETE CASCADE,
    FOREIGN KEY (item_id) REFERENCES items_you_want_to_tag(id)
    ON UPDATE CASCADE ON DELETE CASCADE,
    PRIMARY KEY (tag_id, item_id)

Yukarıdaki şema tabii ki, pseudocode bulunmaktadır.

Yani şema tek bir istisna ile bana hemen hakkına görünüyor. Eğer iki tablo etiketlemek istiyorsanız, ben her bir ürün türü (İzlenebilir ürün 1 ve İzlenebilir ürün sizin durumunuzda 2 tablolar) için ayrı etiketleri tabloları oluşturmak ve aynı zamanda iki kavşak tablo yaratacaktır. Yani altı tablo olurdu.

Gerçi doğru dizinleri kullandığınızdan emin olun, ya da başka o iyi ölçek olmaz :)

GÜNCELLEME:

Veya, aynı etiketi ile hem ürün tipleri etiketlemek bir ürün grubunu içeren kavşak tabloya başka bir alan eklemek ve (zaten ;) MJV tarafından işaret olarak) çok birincil anahtar eklemek için muktedir istiyorum.