Seite 1 von 1

sqlite index oder table

Verfasst: Montag 10. März 2008, 19:59
von feldmaus
Hi Alle,

Bei sqlite werden zwei verschiedene Typen unterschieden, table und index.
Wo ist der Unterschied zwischen den beiden Typen index und table?
Welchem Typ entsprechen die unten aufgeführten Daten?

Für mein Programm habe ich mir eine baumartige Datenstruktur für meine sqlite Datenbank überlegt. Die mit folgenden Daten gefüttert wird,
  • Monster
    • Ork
      • LE 30
      • GS 7
    • Gnom
      • LE 25
      • GS 5
    • Zwerg
      • LE 35
      • GS 6
und,
  • Landschaftstyp
    • Wald
      • Ork 10%
      • Gnom 20%
      • Zwerg 3%
    • Fluss
      • Ork 5%
      • Gnom 20%
      • Zwerg 1%
    • Berg
      • Ork 10%
      • Gnom 3%
      • Zwerg 30%
Für die Ansicht habe ich in Qt4 ein QTreeView Objekt, wo ich erst alle Namen der vorhandenen Tabellen oder/und Indices auflisten will. Allerdings weiß ich nicht welchen Typ ich habe, index oder table?

Der Befehl zum einlesen aller ? lautet,

Code: Alles auswählen

tabUebersicht = 'Select name FROM sqlite_master WHERE type=* ORDER BY name'
Grüße Markus

Verfasst: Montag 10. März 2008, 20:53
von BlackJack
Es gibt nur Tabellen für Daten. Indexe kann man auf Tabellen anlegen um Suchanfragen zu beschleunigen. Und baumartige Strukturen musst Du in Tabellen umwandeln.

Vielleicht solltest Du erst einmal Grundlagen zu relationalen Datenbanken lernen.

Verfasst: Dienstag 11. März 2008, 03:00
von feldmaus
BlackJack hat geschrieben:Es gibt nur Tabellen für Daten. Indexe kann man auf Tabellen anlegen um Suchanfragen zu beschleunigen. Und baumartige Strukturen musst Du in Tabellen umwandeln.

Vielleicht solltest Du erst einmal Grundlagen zu relationalen Datenbanken lernen.
Eine Tabelle deren Elemente auf Tabellen verweist?!

Also ein Index wäre also eine Durchnummerierung der Zeilen in der Tabelle?
Wo steht das erklärt?

Grüße Markus

Verfasst: Dienstag 11. März 2008, 09:03
von jens
Es gibt da verschiedene Varianten wie man das lösen könnte.

Die Frage ist, haben Monster immer die gleiche Anzahl von Eigenschaften (in deinem Beispiel zwei)?
Wenn ja, dann eine Tabelle mit den Feldern:
  • ID, Monstertyp, Eigenschaft-1, Eigenschaft-2
Wenn nein, dann zwei Tabellen:
  • Tabelle 1:
    • ID, Monstertyp
    Tabelle 2:
    • ID, Monster-ID, Eigenschaft
Im django ORM kann sowas so aussehen:

Code: Alles auswählen

class Monster(models.Model):
    id = models.AutoField(primary_key=True)
    monstertyp = models.CharField(max_length=255)

class MonsterEigenschaft(models.Model):
    id = models.AutoField(primary_key=True)
    monster = models.ForeignKey(Monster)
    eigenschaft = models.CharField(max_length=255)
(Das "id" Feld läßt man normalerweise weg, das macht django automatisch. Hab ich aber extra mit aufgeführt)
Siehe http://www.djangoproject.com/documentation/db-api/

Verfasst: Dienstag 11. März 2008, 11:12
von BlackJack
@feldmann_markus: Ein Index ist eine Datenstruktur innerhalb der Datenbank mit der man (bestimmte) Suchanfragen (vielleicht) beschleunigen kann. Ich glaube nicht, dass Dich das jetzt schon interessieren sollte.

Nachlesen kann man in "Datenbanksysteme" von Kemper/Eickler, aber es sollte eigentlich auch zu jeder grösseren Datenbank Doku geben, wo das relationale Modell und Normalformen erklärt werden. Es gibt auch einen Wikipedia-Artikel: Relationale Datenbank.