First, the user interface: kullanıcı olarak ben hate bir strictly hierarchical şekilde düzenlenen bir katalogda bir ürün aramak için. Ben bir "egzotik" bir ürün, en azından benim için (sadece bir kategorize olduğunu keşfetmek için "umut verici" kategoriler keşfetmek zaman harcamak bana ve bu kuvvet nedir alt-alt-alt-alt ... kategori hatırlıyorum asla ) garip bir yol.
Ne Kevin Peno göstermektedir iyi sitesi ve faceted browsing . As Marcia Bates, After the Dot-Bomb: Getting Web Information Retrieval Right This Time in yazdığı ".. faceted classification is to hierarchical classification as relational databases are to hierarchical databases. .." olarak bilinir .
Özünde, yönlü arama kullanıcıların tercih ne olursa olsun "faset" den başlayarak katalog arama ve onları arama boyunca diğer yönü seçerek bilgileri filtrelemek izin verir. Etiket sistemleri genellikle nasıl tasavvur edildiğini aksine, hiçbir hiyerarşik bu yönleriyle bazı organize engeller, unutmayın.
Hızla yönlü arama tüm hakkında ne olduğunu anlamak için vardır some demos to explore at The Flamenco Search Interface Project - Search Interfaces that Flow.
(Anladığım kadarıyla) Second, the application logic: ne Manitra önermektedir de iyi bir tavsiyedir, yani ayıran nodes
ve links
bir ağaç / grafiğin farklı ilişkiler. O transitive closure of a directed acyclic graph (DAG) (ulaşabilirlik ilişki) olarak bilinir (ancak, çok daha iyi bir sezgisel adıdır) "ata masa" dediği. Manitra dediği gibi performans ötesinde, bu, büyük ölçüde sorguları basitleştirmek.
Güncellemeleri gerçek zamanlı ve artan, bir toplu iş tarafından periyodik değil böylece But Ben, böyle "ata masada" (geçişli kapanma) için view öneririz. Orada SQL kodu (ama belirli DBMSes biraz adapte olması gerektiğini düşünüyorum) I query language for graph sets: data modeling question benim cevap belirtilen gazetelerde. (. - PostScript PS) Özellikle, Maintaining Transitive Closure of Graphs in SQL bakmak.
Products-Categories relationship
Manitra ilk nokta da, vurgu değer.
Ne söylediğini ürünler ve kategoriler arasında çok-çok ilişkisi var olmasıdır. Yani: Her ürün bir veya daha fazla kategoride olabilir ve her kategoride sıfır veya daha fazla ürün olabilir.
Ilişki değişkenler (relvars) Ürünler ve Kategoriler verilen bu ilişki ile bir relvar PC olarak en az P # niteliklerini ve ilgili ürün ve kategorileri ile bir yabancı anahtar ilişkileri C #, yani ürün ve kategori numaraları (Identifier), örneğin, temsil edilebilir sayılar.
Bu kategoriler 'hiyerarşileri yönetimi tamamlayıcıdır. Tabii ki, bu sadece bir tasarım eskiz.
On faceted browsing in SQL
"Yönlü tarama" uygulamak için yararlı bir kavram relational division, ya da, hatta, relational comparisons (bağlantılı sayfanın altına bakınız). Yani Bir kullanıcı (faset navigasyon) bir (tabii ki, kategoriler aksi seçerek, not Tüm dışlayan tahmin ediliyor gibi kategorilerde sadece ürün elde seçilen kategorilerde (artan) listesinde PC (Ürün Kategorileri) bölünmesi iki kategori tek) sıfır ürünler elde edecektir.
SQL tabanlı VTYS genellikle bu operatörleri (bölünme ve karşılaştırmalar) eksikliği, bu yüzden ben / bunları tartışmak uygulayan bazı ilginç yazılara aşağıda veriyoruz:
ve böylece ...
Ben burada ayrıntılarına girmeyeceğim ama kategoriler hiyerarşileri ve faset tarama arasındaki etkileşim özel bir bakıma ihtiyacı vardır.
A digression on "flatness"
Ben kısaca Pras, Managing Hierarchical Data in MySQL ile bağlantılı makale baktı, ama ben girişte bu birkaç satır sonra okuma durdu:
Introduction
Most users at one time or another have
dealt with hierarchical data in a SQL
database and no doubt learned that the
management of hierarchical data is not
what a relational database is intended
for. The tables of a relational
database are not hierarchical (like
XML), but are simply a flat list.
Hierarchical data has a parent-child
relationship that is not naturally
represented in a relational database
table. ...
Bu 8 koordinatları (üçüz) tarafından tespit edilecek, demek P1 (x1, y1, z1: ilişkilerin düzlüğüne bu ısrarı just nonsense, bir three dimensional Cartesian coordinate system bir küp hayal olduğunu anlamak için ), P2 (x2, y2, z2), ..., P8 (x8, y8, z8) [onlar gerçekten bir küp temsil ettiğini, bu nedenle burada bu koordinatlara kısıtlamaları ile ilgili değildir].
Şimdi, biz bir ilişki değişken içine koordinatları (puan) bu seti koyacağız ve biz bu değişkeni isim olacak Points
. Yapacaklarımız aşağıda bir tablo olarak Points
ve represent ilişki değeri:
Points| x | y | z |
=======+====+====+====+
| x1 | y1 | z1 |
+----+----+----+
| x2 | y2 | z2 |
+----+----+----+
| .. | .. | .. |
| .. | .. | .. |
+----+----+----+
| x8 | y8 | z8 |
+----+----+----+
Bu küp bir sekmeli şekilde temsil sadece eyleminde tarafından "dümdüz" ediliyor mu? Bir ilişki (değer) onun tablo temsili olarak aynı şey midir?
N ilişki niteliklerin sayısı ("sütun") bir n-boyutlu ayrık uzayda puan setleri değerleri gibi bir ilişki değişken varsayar. Bu ne anlama geliyor, bir n-boyutlu ayrık alanı için, "düz" olması? Sadece saçma, ben yukarıda yazdığım gibi.
Beni yanlış anlamayın, bu SQL bir kötü tasarlanmış bir dil olduğunu ve SQL tabanlı DBMSes huyların ve eksiklikleri dolu olduğu kesinlikle doğrudur (NULL, fazlalık, ...), özellikle kötü olanlar, DBMS-olarak- aptal-mağaza tipi (hiçbir başvuru kısıtlamaları, hiçbir bütünlüğü kısıtlar, ...). Ama tersine, ilişkisel veri modeli sınırlamaları hayaller ile ilgisi var daha onlar ondan çevirmek ve kötü sonuçtur.
Özellikle, ilişkisel veri modeli, bunu anlamak kez, yukarıda bahsettiğim yayınlanan makalelere referanslar ayrıntılı olarak, hangi yapı, hatta hiyerarşileri ve grafikleri temsil hiçbir sorun teşkil etmektedir. Hatta SQL can, daha iyi bir şey eksik, eksiklikleri geçiştirmeye eğer.
On the "The Nested Set Model"
I that article geri kalanını yağsız ve ben böyle mantıksal tasarımı ile özellikle etkilendim değilim: iki farklı oluşumları, nodes ve links geçinip önerir, içine bir ilişkisi ve bu muhtemelen beceriksizlik neden olur. Ama ben daha iyice olduğunu tasarımını analiz eğimli değilim, üzgünüm.
EDIT: Stephan Eggermont ki "The flat list model is a problem. It is an abstraction of the implementation that makes performance difficult to achieve. ...", aşağıda yorumlarda, itiraz etti.
Şimdi, benim açımdan, tam, yani:
- Bu "Düz liste model" olan bir fantasy: Bir yatıyordu sırf tablolar ("düz listeler") olarak ilişkileri ilişkileri "düz listeler" (bir "nesne" ve olduğu anlamına gelmez (temsil) onun temsilleri) aynı şey değildir;
- mantıksal bir temsilidir (ilişki) ve fiziksel depolama detayları (yatay veya dikey ayrıştırma, sıkıştırma, indeksler (sağlamalarının, b + ağaç, r-ağacı, ...), kümeleme, bölümleme vb) farklıdır; ilişkisel veri modeli noktalarından biri (RDM) (kullanıcı ve DBMSes bir gerçeklenimcileri hem avantajları ile) "fiziksel" modeli mantıksal ayrılabilmesi için;
- performans (EGGERMONT sözleri, logical-physical confusion klasik bir örneğidir) fiziksel depolama ayrıntıları (uygulama) ve not mantıksal gösterimi arasında doğrudan bir sonucudur.
RDM model, herhangi bir şekilde uygulamaları kısıtlama yoktur; tek tek uygun görmek gibi dizilerini ve ilişkileri uygulamak için ücretsizdir. İlişkileri not necessarily dosya ve küpe bir dosya vardır not necessarily kayıtları vardır. Böyle yazışmalar bir aptal direct-image implementation olduğunu.
Ne yazık ki SQL tabanlı VTYS uygulamaları are, çok sık, aptal direkt görüntü uygulamaları ve çeşitli senaryolar kötü performansını acı - OLAP / ETL ürün var bu eksikliklerini gidermek için.
Bu yavaş yavaş değişiyor. Sonunda bu temel tuzaktan kaçınmak ticari ve özgür yazılım / açık kaynak uygulamaları vardır:
/ Tabii ki, gelin bir "optimal" fiziksel depolama tasarımı var olmalıdır not olduğunu, ama ne olursa olsun fiziksel depolama tasarım declarative language ilişkisel cebir dayalı güzel tarafından abstracted edilebilir taşı (- "prolog to SQL converter" sorusuna cevabım görmek örneğin Prolog gibi) bir mantık programlama dili üzerinde daha doğrudan veya (ve SQL bir bad örnektir). İyi bir DBMS veri erişim istatistikleri (ve / veya kullanıcı ipuçları) dayalı, on-the-fly fiziksel depolama tasarımını değiştirmek gerekir.
Son olarak, EGGERMONT en açıklamada deyimi "The relational model is getting squeeezed between the cloud and prevayler." başka saçmalık ama ben burada bir çürütme veremem, bu yorum çok uzun zaten.