2010-11-19 5 views
1

Kullanıcı hesaplarım (Kullanıcılar). Alt hesaplar için işlevselliğe sahip olması gerekir.Veritabanı tasarımı yardımı - hiyerarşik veriler

Yani örneğin, Dunder Mifflin adlı bir şirket bir hesabı olabilir. Şirketin alt hesaplar, Muhasebe ve Satış olacaktır. Muhasebe hesabında Kevin, Angela ve Oscar için alt hesaplar olacaktır. Ve seviye sayısında bir sınır yoktur.

Benim ilk fikir böyle bir tablo yaratmaktı:

CREATE TABLE Users 
(
    UserID INTEGER, 
    ParentUserID INTEGER, 
    ... 
) 

birincil hesabın ParentUserID sadece boş olurdu, ama bir alt hesap onun ebeveynin Kullanıcı Kimliğini içerecektir.

Bunun için iyi bir tasarım mı? Başka bir yol bilmiyorum.

+0

Bana doğru görünüyor. – rwilliams

+0

Bu iyi bir yaklaşım. Tasarıma Kıyaslama Listesi denir. SQL Server'daki Ortak Tablo İfadeleri, bunu çözmeye çalıştığınız sorun için nispeten kolay bir yaklaşım haline getirir. Veritabanlarındaki hiyerarşileri temsil etme hakkında daha fazla bilgi için şu soruya bakın: http://stackoverflow.com/questions/4048151/what-are-the-options-for-storing-hierarchical-data-in-a-relational-database – orangepips

cevap

2

Bu iyi bir tasarım ve gerçekten başka bir seçeneğiniz var. Bu hiyerarşik ilişkileri sorgulamak yardımcı olacak CTEs (Common Table Expressions) kadar okuyun (yinelemeli.)

hiyerarşik yapıların

Rekürsif sorgulama SQL Server 2000'de mümkündü ama çok 2005.

kendisine katılır bir tablo beri CTEs ile basitleştirilmiştir Tasarımcınızda böyle bir şeye benzeyecektir: Self Join Cap

+0

CTE <==> Genel Tablo İfadesi? – John

+0

@John: Evet, teşekkürler. Cevap güncellendi. –

+0

Bunun için teşekkürler! – John

4

bunun için iyi bir tasarımdır. Bir alternatif, hiyerarşiyi eşlemek için HIERARCHID veri türünü kullanmaktır, ancak bununla sınırlı olan destek (raporlama, ORM araçları vb.).

Aslında kurulumları bir dizi TAM kullanacağız. Belli ki, çöplükte olmayan çok fazla alternatif yoktur (hiyerarşi için X alanlarına sahip olmak gibi). Hiçbir alternatif bilmiyorum.

+0

Hiyerarşi Kimliği Sınırlı araç desteğine sahip olmakla birlikte, sözdizimini öğrendikten sonra, özellikle sınırsız seviyelere sahip bir hiyerarşi bağlamında bazı çok kullanışlı sorgu seçenekleri sağlar. –

2

Bu, kendi kendine katılma olarak adlandırılır ve evet, hiyerarşik verileri temsil etmenin standart yoludur. Muhtemelen Dunder Mifflin ile ilgili tüm kullanıcılar gibi bir şey almak için this gibi sorguya ihtiyacım olacak.

0

Alt hesaplar ne için kullanılır? Veritabanı tasarımı ciddi bir konudur. Önceki cevaplar, gösterdiğiniz tasarımın tanımı gereği iyi olduğunu iddia ediyor. Hiyerarşik verileriniz olduğunda, evet, her zaman ebeveyn kimliğinize sahip olursunuz. Ancak, çoğu zaman hesapların ait olduğu bir çeşit grup hesabı vardır. Bir hiyerarşi kurmak için daha uygun bir yer olurdu.

+0

Yani, hiyerarşik Hesap tablosuna sahip olacaksınız ve Hesap tablosuna başvuran yabancı anahtarı olan Kullanıcılar tablosuna sahip olacaksınız. – Nickolodeon