astrodatagui: StarsDB: improve database structure

This commit is contained in:
2024-03-08 11:45:45 +01:00
parent 37b1887326
commit cdb0c61b1a
+12 -20
View File
@@ -21,6 +21,7 @@ class StarDB():
instance = StarDB(dbName) instance = StarDB(dbName)
StarDB.__instances.append(instance) StarDB.__instances.append(instance)
StarDB.__dbNames.append(dbName) StarDB.__dbNames.append(dbName)
return instance
def __init__(self, dbName: str): def __init__(self, dbName: str):
if(dbName in StarDB.__dbNames): if(dbName in StarDB.__dbNames):
@@ -59,28 +60,19 @@ class StarDB():
self.dbCursor.execute("""CREATE TABLE IF NOT EXISTS sequenceSourceNames self.dbCursor.execute("""CREATE TABLE IF NOT EXISTS sequenceSourceNames
( (
sequenceSourceNameID INTEGER NOT NULL, sourceName TEXT,
name TEXT UNIQUE, PRIMARY KEY (sourceName)
PRIMARY KEY (sequenceSourceNameID, name)
);""")
self.dbCursor.execute("""CREATE TABLE IF NOT EXISTS sequences
(
sequencesID INTEGER NOT NULL,
sequence INTEGER NOT NULL,
PRIMARY KEY (sequencesID, sequence)
);""") );""")
self.dbCursor.execute("""CREATE TABLE IF NOT EXISTS stars self.dbCursor.execute("""CREATE TABLE IF NOT EXISTS stars
( (
mainName TEXT NOT NULL, mainName TEXT NOT NULL,
sequenceSourceNameID INTEGER NOT NULL, sourceName TEXT NOT NULL,
sequencesID INTEGER NOT NULL, sequence INTEGER NOT NULL,
filename TEXT, filename TEXT NOT NULL,
PRIMARY KEY (mainName, sequenceSourceNameID, sequencesID), PRIMARY KEY (mainName, sourceName, sequence),
FOREIGN KEY (mainName) REFERENCES starnames(mainName), FOREIGN KEY (mainName) REFERENCES starnames(mainName),
FOREIGN KEY (sequenceSourceNameID) REFERENCES sequenceSourceNames(sequenceSourceNameID) FOREIGN KEY (sourceName) REFERENCES sequenceSourceNames(sourceName)
FOREIGN KEY (sequencesID) REFERENCES sequences(sequencesID)
);""") );""")
self.insertDefaultValues() self.insertDefaultValues()
@@ -89,13 +81,13 @@ class StarDB():
def insertDefaultValues(self): def insertDefaultValues(self):
sources = ["TESS", "Kepler", "K2"] sources = ["TESS", "Kepler", "K2"]
for i, s in enumerate(sources): for s in sources:
self.dbCursor.execute(f"""INSERT OR IGNORE INTO self.dbCursor.execute(f"""INSERT OR IGNORE INTO
sequenceSourceNames(sequenceSourceNameID, name) sequenceSourceNames(sourceName)
VALUES({i}, \"{s}\")""") VALUES(\"{s}\")""")
def insertStarAlternativeNames(self, mainName: str, altNames): def insertStarAlternativeNames(self, mainName: str, altNames):
for an in altNames: for an in altNames:
self.dbCursor.execute(f"""INSERT OR IGNORE INTO self.dbCursor.execute(f"""INSERT OR IGNORE INTO
starnames(mainName, altName) starnames(mainName, altName)
VALUES(\"{mainName}\", \"{an["ID"]}\")""") VALUES(\"{mainName}\", \"{an["ID"]}\")""")