Domanda

In sostanza, voglio che l'utente sia in grado di definire un modello gerarchico, ma poi ho bisogno di consentire all'utente di memorizzare i dati all'interno del loro modello definito. Questo ha senso? Quindi, gli utenti saranno in grado di creare nuovi "tipi di unità" per essere organizzati in modo gerarchico e decidere come unità di questo tipo possono essere organizzati. Un semplice esempio: nella mia ipotetica interfaccia di un utente crea tre tipi di unità, tronco, ramo e foglie. L'utente definisce quindi le relazioni tra loro. Una foglia può esistere in qualsiasi punto della gerarchia, un ramo deve avere un tronco come un genitore. L'utente può quindi crea le istanze di questi tipi di unità (come unità) e in grado di organizzarle secondo le regole definite nel loro modello ... c'è un buon modo di fare questo nel database?

È stato utile?

Soluzione

Questa è una domanda molto ampia, ma questo può puntare nella giusta direzione. Si noti che si sta solo andando a essere in grado di memorizzare le regole di relazione nel database. farle rispettare sarà fino al vostro codice client. Prova questo per dimensioni ..

unit:
    unit id,
    name,

unit relationship:
    unit id,
    foreign unit id

È quindi possibile utilizzare il vostro tavolo rapporto unità nel seguente modo ..

unit id riferisce all'unità sta descrivendo. foreign unit id dovrebbe essere annullabile.

Un unit con nessun record di relazione può esistere solo alla radice della gerarchia. Un unit con un null foreign unit id può avere qualsiasi altra unit come suo genitore. In caso contrario, un unit deve avere un altro unit come padre, ed è tipo deve essere uno di quelli definiti nei suoi record di relazione.

Per quanto riguarda la memorizzazione delle istanze stesse, che dovrebbe essere semplice ..

instance:
    instance id,
    unit id,
    parent instance_id

Sono sicuro che ci sarebbero altri campi avresti bisogno (nome, per esempio), ma suppongo che si ottiene la deriva.

Altri suggerimenti

È necessario implementare tre concetti:

  • i "tipi di unità" e le loro associazioni consentite
  • la gerarchia
  • le unità reali

Questi concetti possono coesistere più o meno indipendentemente nel modello, ma lavorare insieme.

create table unittype
(
    id int;
    name varchar(20);
)

create table unitrelationship
(
    id int;
    parent_id int;
)

Si potrebbe modellare la gerarchia come tavolo di auto-riferimento:

create table hierarchy
(
    id int;
    parent_id int;
    unit_type_id int;
    unit_id int;
)

Si può quindi avere le istanze di unità in una o più tabelle e fare con loro quello che hai descritto.

create table unit
{
    id int;
    ....
}

La buona notizia è che si sono vincolanti solo i tipi di genitori al seguito, che possono essere applicate facilmente in un'interfaccia utente, ad esempio, con la scelta del genitore da un elenco di tutte le unità esistenti del tipo consentito.

Sto lavorando su un problema analogo, anche se ho bisogno di supportare più gerarchie (un set di bambini, più viste gerarchiche). Ho trovato Joe Celko di "Alberi e gerarchie in SQL per Smarties" (ISBN: 1.558.609,202 mila) utile. Sto ancora lavorando sul problema, ma si tratta così spesso quando si parla di questo argomento che è sembrato opportuno parlare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top