these are all files of lesser importance

This commit is contained in:
eclipse 2025-07-15 23:14:07 +02:00
parent 4b3bf9464b
commit 6e737c4103
5 changed files with 333 additions and 139 deletions

View File

@ -1,132 +0,0 @@
DROP TABLE IF EXISTS "AutorHrsg_Index";
DROP TABLE IF EXISTS "AutorInnen_und_Hrsg";
DROP TABLE IF EXISTS "TextGenres_Index";
DROP TABLE IF EXISTS "WerkGenres_Index";
DROP TABLE IF EXISTS "Genres";
DROP TABLE IF EXISTS "Reihen";
DROP TABLE IF EXISTS "Sprachen";
DROP TABLE IF EXISTS "Tete";
DROP TABLE IF EXISTS "Textformen";
DROP TABLE IF EXISTS "Verlage";
DROP TABLE IF EXISTS "Veroeffentlichungen_Index";
DROP TABLE IF EXISTS "Werke";
DROP TABLE IF EXISTS "Werksformen";
CREATE TABLE IF NOT EXISTS "AutorHrsg_Index" (
"ID" INTEGER,
"Werk" INTEGER NOT NULL,
"AutorIn_oder_Hrsg" INTEGER NOT NULL DEFAULT 1,
PRIMARY KEY("ID" AUTOINCREMENT),
FOREIGN KEY("AutorIn_oder_Hrsg") REFERENCES "AutorInnen_und_Hrsg"("ID"),
FOREIGN KEY("Werk") REFERENCES "Werke"("ID")
);
CREATE TABLE IF NOT EXISTS "AutorInnen_und_Hrsg" (
"ID" INTEGER,
"Name" TEXT NOT NULL,
"Funktion" TEXT NOT NULL,
PRIMARY KEY("ID" AUTOINCREMENT)
);
CREATE TABLE IF NOT EXISTS "TextGenres_Index" (
"ID" INTEGER,
"Text" INTEGER NOT NULL,
"Genre" INTEGER NOT NULL,
PRIMARY KEY("ID" AUTOINCREMENT),
FOREIGN KEY("Genre") REFERENCES "Genres"("ID"),
FOREIGN KEY("Text") REFERENCES "Texte"("ID")
);
CREATE TABLE IF NOT EXISTS "WerkGenres_Index" (
"ID" INTEGER,
"Werk" INTEGER NOT NULL,
"Genre" INTEGER NOT NULL,
PRIMARY KEY("ID" AUTOINCREMENT),
FOREIGN KEY("Genre") REFERENCES "Genres"("ID"),
FOREIGN KEY("Werk") REFERENCES "Werke"("ID")
);
CREATE TABLE IF NOT EXISTS "Genres" (
"ID" INTEGER,
"Genre" TEXT NOT NULL,
PRIMARY KEY("ID" AUTOINCREMENT)
);
CREATE TABLE IF NOT EXISTS "Reihen" (
"ID" INTEGER,
"Reihentitel" TEXT NOT NULL,
"Verlag" TEXT,
PRIMARY KEY("ID" AUTOINCREMENT),
FOREIGN KEY("Verlag") REFERENCES "Verlage"("ID")
);
CREATE TABLE IF NOT EXISTS "Sprachen" (
"ID" INTEGER,
"Sprache" TEXT NOT NULL,
PRIMARY KEY("ID" AUTOINCREMENT)
);
CREATE TABLE IF NOT EXISTS "Texte" (
"ID" INTEGER,
"Titel" TEXT NOT NULL,
"Untertitel" TEXT,
"Reihe" INTEGER,
"Textform" INTEGER,
"Originalsprache" INTEGER,
PRIMARY KEY("ID" AUTOINCREMENT),
FOREIGN KEY("Originalsprache") REFERENCES "Sprachen"("ID"),
FOREIGN KEY("Reihe") REFERENCES "Reihen"("ID"),
FOREIGN KEY("Textform") REFERENCES "Textformen"("ID")
);
CREATE TABLE IF NOT EXISTS "Textformen" (
"ID" INTEGER,
"Textform" TEXT NOT NULL,
PRIMARY KEY("ID" AUTOINCREMENT)
);
CREATE TABLE IF NOT EXISTS "Verlage" (
"ID" INTEGER,
"Verlag" TEXT NOT NULL,
PRIMARY KEY("ID" AUTOINCREMENT)
);
CREATE TABLE IF NOT EXISTS "Veröffentlichungen_Index" (
"ID" INTEGER,
"Text" INTEGER NOT NULL,
"Werk" INTEGER NOT NULL,
"neuer Titel" TEXT,
"neuer Untertitel" TEXT,
"Veröffentlicht als" INTEGER NOT NULL,
PRIMARY KEY("ID" AUTOINCREMENT),
FOREIGN KEY("Text") REFERENCES "Texte"("ID"),
FOREIGN KEY("Veröffentlicht als") REFERENCES "AutorInnen_und_Hrsg"("ID"),
FOREIGN KEY("Werk") REFERENCES "Werke"("ID")
);
CREATE TABLE IF NOT EXISTS "Werke" (
"ID" INTEGER,
"Werkstitel" TEXT NOT NULL,
"Werksuntertitel" TEXT,
"Werksform" INTEGER,
"Verlag" INTEGER,
"Reihe" INTEGER,
"Reihennummer" TEXT,
"Erscheinungsdatum" TEXT,
"ISBN_13" TEXT,
"ISBN_10" TEXT,
"ISSN" TEXT,
"Preis" TEXT,
"Titelbild" BLOB,
"Klappentext" TEXT,
"Anmerkungen" TEXT,
PRIMARY KEY("ID" AUTOINCREMENT),
FOREIGN KEY("Reihe") REFERENCES "Reihen"("ID"),
FOREIGN KEY("Verlag") REFERENCES "Verlage"("ID"),
FOREIGN KEY("Werksform") REFERENCES "Werksformen"("ID")
);
CREATE TABLE IF NOT EXISTS "Werksformen" (
"ID" INTEGER,
"Werksform" TEXT NOT NULL,
"Medium" TEXT,
PRIMARY KEY("ID" AUTOINCREMENT)
);
CREATE VIEW Meine_Buecher AS
SELECT DISTINCT w.Werkstitel
, a.Name
, a.Funktion
FROM Werke w
INNER JOIN AutorHrsg_Index i
ON w.ID = i.Werk
INNER JOIN AutorInnen_und_Hrsg a
ON i.AutorIn_oder_Hrsg = a.ID
WHERE a.ID < 4;

19
tmp.md
View File

@ -26,14 +26,14 @@ Welche Tabellen habe ich?
- x Originalsprache zu Sprache - x Originalsprache zu Sprache
- x Reihentitel zu Reihe - x Reihentitel zu Reihe
- x Werks[unter]titel zu [Unter]Titel - x Werks[unter]titel zu [Unter]Titel
- x Werksform.Medium löschen
- sollte column Werk.Werksform required sein? - x AutorIn_und_Hrsg in zwei Tabellen aufteilen: Pseudonym (nur ich), Herausgeber (egal wer)
- in der alten Tabelle hatte TR die ID 1, PJ die 3 -> muss ich in den VÖ-Zeilen noch anpassen
- x sollte column Werk.Werksform required sein? -> prolly schon; hab's im input field vom Modal auch schon umgesetzt
- braucht table Werk eine column AutorInHrsg? - braucht table Werk eine column AutorInHrsg?
- x eigene Tabelle "Bild" mit ID (PK) / Werk (FK) / Bild / ggf. Anmerkungen
Was ich vllt. noch ändern will:
- VÖ-Daten als Datentyp TIMESTAMP abspeichern
View "Meine Bücher": View "Meine Bücher":
@ -47,3 +47,10 @@ INNER JOIN AutorHrsg_Index i
INNER JOIN AutorInnen_und_Hrsg a INNER JOIN AutorInnen_und_Hrsg a
ON i.AutorIn_oder_Hrsg = a.ID ON i.AutorIn_oder_Hrsg = a.ID
WHERE a.ID < 4 WHERE a.ID < 4
Checkmark Entities (yes/no)
- &#10004; / &#10008; (geschwungen, schwarz auf transparent)
- &#9989; / &#10062; (weiß auf grün)
- (kein yes) / &#10060; (rot auf transparent)

138
utils/schema.sql Normal file
View File

@ -0,0 +1,138 @@
BEGIN TRANSACTION;
DROP TABLE IF EXISTS "Genre";
CREATE TABLE "Genre" (
"ID" INTEGER,
"Genre" TEXT NOT NULL,
PRIMARY KEY("ID" AUTOINCREMENT)
);
DROP TABLE IF EXISTS "Herausgeber";
CREATE TABLE "Herausgeber" (
"ID" INTEGER,
"Name" TEXT NOT NULL,
PRIMARY KEY("ID" AUTOINCREMENT)
);
DROP TABLE IF EXISTS "Pseudonym";
CREATE TABLE "Pseudonym" (
"ID" INTEGER,
"Pseudonym" TEXT NOT NULL,
PRIMARY KEY("ID" AUTOINCREMENT)
);
DROP TABLE IF EXISTS "Reihe";
CREATE TABLE "Reihe" (
"ID" INTEGER,
"Titel" TEXT NOT NULL,
"Verlag" TEXT,
PRIMARY KEY("ID" AUTOINCREMENT),
FOREIGN KEY("Verlag") REFERENCES "Verlag"("ID")
);
DROP TABLE IF EXISTS "Sprache";
CREATE TABLE "Sprache" (
"ID" INTEGER,
"Sprache" TEXT NOT NULL,
PRIMARY KEY("ID" AUTOINCREMENT)
);
DROP TABLE IF EXISTS "Text";
CREATE TABLE "Text" (
"ID" INTEGER,
"Titel" TEXT NOT NULL,
"Untertitel" TEXT,
"Reihe" INTEGER,
"Textform" INTEGER,
"Sprache" INTEGER,
PRIMARY KEY("ID" AUTOINCREMENT),
FOREIGN KEY("Reihe") REFERENCES "Reihe"("ID"),
FOREIGN KEY("Sprache") REFERENCES "Sprache"("ID"),
FOREIGN KEY("Textform") REFERENCES "Textform"("ID")
);
DROP TABLE IF EXISTS "Text_Genre";
CREATE TABLE "Text_Genre" (
"Text" INTEGER,
"Genre" INTEGER,
PRIMARY KEY("Text","Genre"),
FOREIGN KEY("Genre") REFERENCES "Genre"("ID"),
FOREIGN KEY("Text") REFERENCES "Text"("ID")
);
DROP TABLE IF EXISTS "Textform";
CREATE TABLE "Textform" (
"ID" INTEGER,
"Textform" TEXT NOT NULL,
PRIMARY KEY("ID" AUTOINCREMENT)
);
DROP TABLE IF EXISTS "Titelbild";
CREATE TABLE "Titelbild" (
"ID" INTEGER,
"Mimetype" TEXT NOT NULL,
"Dateiname" TEXT NOT NULL,
"Dateigroesse" INTEGER NOT NULL,
"Breite" INTEGER NOT NULL,
"Hoehe" INTEGER NOT NULL,
"Bild" BLOB NOT NULL,
"Thumbnail" BLOB NOT NULL,
"sha256" TEXT NOT NULL UNIQUE,
PRIMARY KEY("ID" AUTOINCREMENT)
);
DROP TABLE IF EXISTS "Verlag";
CREATE TABLE "Verlag" (
"ID" INTEGER,
"Verlag" TEXT NOT NULL,
PRIMARY KEY("ID" AUTOINCREMENT)
);
DROP TABLE IF EXISTS "Veroeffentlichung";
CREATE TABLE "Veroeffentlichung" (
"ID" INTEGER,
"Text" INTEGER NOT NULL,
"Werk" INTEGER NOT NULL,
"AltTitel" TEXT,
"AltUntertitel" TEXT,
"Pseudonym" INTEGER NOT NULL,
PRIMARY KEY("ID" AUTOINCREMENT),
FOREIGN KEY("Pseudonym") REFERENCES "Pseudonym"("ID"),
FOREIGN KEY("Text") REFERENCES "Text"("ID"),
FOREIGN KEY("Werk") REFERENCES "Werk"("ID")
);
DROP TABLE IF EXISTS "Werk";
CREATE TABLE "Werk" (
"ID" INTEGER,
"Titel" TEXT NOT NULL,
"Untertitel" TEXT,
"Werksform" INTEGER,
"Verlag" INTEGER,
"Reihe" INTEGER,
"Reihennummer" TEXT,
"Erscheinungsdatum" TEXT,
"ISBN_13" TEXT,
"ISBN_10" TEXT,
"ISSN" TEXT,
"Preis" TEXT,
"Titelbild" INTEGER,
"Klappentext" TEXT,
"Anmerkungen" TEXT,
PRIMARY KEY("ID" AUTOINCREMENT),
FOREIGN KEY("Reihe") REFERENCES "Reihe"("ID"),
FOREIGN KEY("Titelbild") REFERENCES "Titelbild"("ID"),
FOREIGN KEY("Verlag") REFERENCES "Verlag"("ID"),
FOREIGN KEY("Werksform") REFERENCES "Werksform"("ID")
);
DROP TABLE IF EXISTS "Werk_Genre";
CREATE TABLE "Werk_Genre" (
"Werk" INTEGER,
"Genre" INTEGER,
PRIMARY KEY("Werk","Genre"),
FOREIGN KEY("Genre") REFERENCES "Genre"("ID"),
FOREIGN KEY("Werk") REFERENCES "Werk"("ID")
);
DROP TABLE IF EXISTS "Werk_Herausgeber";
CREATE TABLE "Werk_Herausgeber" (
"Herausgeber" INTEGER,
"Werk" INTEGER,
PRIMARY KEY("Herausgeber","Werk"),
FOREIGN KEY("Herausgeber") REFERENCES "Herausgeber"("ID"),
FOREIGN KEY("Werk") REFERENCES "Werk"("ID")
);
DROP TABLE IF EXISTS "Werksform";
CREATE TABLE "Werksform" (
"ID" INTEGER,
"Werksform" TEXT NOT NULL,
PRIMARY KEY("ID" AUTOINCREMENT)
);
COMMIT;

181
utils/sqlacodegen_output.py Normal file
View File

@ -0,0 +1,181 @@
from typing import List, Optional
from sqlalchemy import Column, ForeignKey, Integer, LargeBinary, Table, Text
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, relationship
class Base(DeclarativeBase):
pass
class Genre(Base):
__tablename__ = 'Genre'
Genre: Mapped[str] = mapped_column(Text)
ID: Mapped[Optional[int]] = mapped_column(Integer, primary_key=True)
Text_: Mapped[List['Text_']] = relationship('Text_', secondary='Text_Genre', back_populates='Genre_')
Werk: Mapped[List['Werk']] = relationship('Werk', secondary='Werk_Genre', back_populates='Genre_')
class Herausgeber(Base):
__tablename__ = 'Herausgeber'
Name: Mapped[str] = mapped_column(Text)
ID: Mapped[Optional[int]] = mapped_column(Integer, primary_key=True)
Werk: Mapped[List['Werk']] = relationship('Werk', secondary='Werk_Herausgeber', back_populates='Herausgeber_')
class Pseudonym(Base):
__tablename__ = 'Pseudonym'
Pseudonym: Mapped[str] = mapped_column(Text)
ID: Mapped[Optional[int]] = mapped_column(Integer, primary_key=True)
Veroeffentlichung: Mapped[List['Veroeffentlichung']] = relationship('Veroeffentlichung', back_populates='Pseudonym1')
class Sprache(Base):
__tablename__ = 'Sprache'
Sprache: Mapped[str] = mapped_column(Text)
ID: Mapped[Optional[int]] = mapped_column(Integer, primary_key=True)
Text_: Mapped[List['Text_']] = relationship('Text_', back_populates='Sprache1')
class Textform(Base):
__tablename__ = 'Textform'
Textform: Mapped[str] = mapped_column(Text)
ID: Mapped[Optional[int]] = mapped_column(Integer, primary_key=True)
Text_: Mapped[List['Text_']] = relationship('Text_', back_populates='Textform1')
class Titelbild(Base):
__tablename__ = 'Titelbild'
Mimetype: Mapped[str] = mapped_column(Text)
Dateiname: Mapped[str] = mapped_column(Text)
Dateigroesse: Mapped[int] = mapped_column(Integer)
Breite: Mapped[int] = mapped_column(Integer)
Hoehe: Mapped[int] = mapped_column(Integer)
Bild: Mapped[bytes] = mapped_column(LargeBinary)
Thumbnail: Mapped[bytes] = mapped_column(LargeBinary)
sha256: Mapped[str] = mapped_column(Text, unique=True)
ID: Mapped[Optional[int]] = mapped_column(Integer, primary_key=True)
Werk: Mapped[List['Werk']] = relationship('Werk', back_populates='Titelbild1')
class Verlag(Base):
__tablename__ = 'Verlag'
Verlag: Mapped[str] = mapped_column(Text)
ID: Mapped[Optional[int]] = mapped_column(Integer, primary_key=True)
Reihe: Mapped[List['Reihe']] = relationship('Reihe', back_populates='Verlag1')
Werk: Mapped[List['Werk']] = relationship('Werk', back_populates='Verlag1')
class Werksform(Base):
__tablename__ = 'Werksform'
Werksform: Mapped[str] = mapped_column(Text)
ID: Mapped[Optional[int]] = mapped_column(Integer, primary_key=True)
Werk: Mapped[List['Werk']] = relationship('Werk', back_populates='Werksform1')
class Reihe(Base):
__tablename__ = 'Reihe'
Titel: Mapped[str] = mapped_column(Text)
ID: Mapped[Optional[int]] = mapped_column(Integer, primary_key=True)
Verlag_: Mapped[Optional[str]] = mapped_column('Verlag', ForeignKey('Verlag.ID'))
Verlag1: Mapped[Optional['Verlag']] = relationship('Verlag', back_populates='Reihe')
Text_: Mapped[List['Text_']] = relationship('Text_', back_populates='Reihe1')
Werk: Mapped[List['Werk']] = relationship('Werk', back_populates='Reihe1')
class Text_(Base):
__tablename__ = 'Text'
Titel: Mapped[str] = mapped_column(Text)
ID: Mapped[Optional[int]] = mapped_column(Integer, primary_key=True)
Untertitel: Mapped[Optional[str]] = mapped_column(Text)
Reihe_: Mapped[Optional[int]] = mapped_column('Reihe', ForeignKey('Reihe.ID'))
Textform_: Mapped[Optional[int]] = mapped_column('Textform', ForeignKey('Textform.ID'))
Sprache_: Mapped[Optional[int]] = mapped_column('Sprache', ForeignKey('Sprache.ID'))
Genre_: Mapped[List['Genre']] = relationship('Genre', secondary='Text_Genre', back_populates='Text_')
Reihe1: Mapped[Optional['Reihe']] = relationship('Reihe', back_populates='Text_')
Sprache1: Mapped[Optional['Sprache']] = relationship('Sprache', back_populates='Text_')
Textform1: Mapped[Optional['Textform']] = relationship('Textform', back_populates='Text_')
Veroeffentlichung: Mapped[List['Veroeffentlichung']] = relationship('Veroeffentlichung', back_populates='Text2')
class Werk(Base):
__tablename__ = 'Werk'
Titel: Mapped[str] = mapped_column(Text)
ID: Mapped[Optional[int]] = mapped_column(Integer, primary_key=True)
Untertitel: Mapped[Optional[str]] = mapped_column(Text)
Werksform_: Mapped[Optional[int]] = mapped_column('Werksform', ForeignKey('Werksform.ID'))
Verlag_: Mapped[Optional[int]] = mapped_column('Verlag', ForeignKey('Verlag.ID'))
Reihe_: Mapped[Optional[int]] = mapped_column('Reihe', ForeignKey('Reihe.ID'))
Reihennummer: Mapped[Optional[str]] = mapped_column(Text)
Erscheinungsdatum: Mapped[Optional[str]] = mapped_column(Text)
ISBN_13: Mapped[Optional[str]] = mapped_column(Text)
ISBN_10: Mapped[Optional[str]] = mapped_column(Text)
ISSN: Mapped[Optional[str]] = mapped_column(Text)
Preis: Mapped[Optional[str]] = mapped_column(Text)
Titelbild_: Mapped[Optional[int]] = mapped_column('Titelbild', ForeignKey('Titelbild.ID'))
Klappentext: Mapped[Optional[str]] = mapped_column(Text)
Anmerkungen: Mapped[Optional[str]] = mapped_column(Text)
Genre_: Mapped[List['Genre']] = relationship('Genre', secondary='Werk_Genre', back_populates='Werk')
Herausgeber_: Mapped[List['Herausgeber']] = relationship('Herausgeber', secondary='Werk_Herausgeber', back_populates='Werk')
Reihe1: Mapped[Optional['Reihe']] = relationship('Reihe', back_populates='Werk')
Titelbild1: Mapped[Optional['Titelbild']] = relationship('Titelbild', back_populates='Werk')
Verlag1: Mapped[Optional['Verlag']] = relationship('Verlag', back_populates='Werk')
Werksform1: Mapped[Optional['Werksform']] = relationship('Werksform', back_populates='Werk')
Veroeffentlichung: Mapped[List['Veroeffentlichung']] = relationship('Veroeffentlichung', back_populates='Werk1')
t_Text_Genre = Table(
'Text_Genre', Base.metadata,
Column('Text', ForeignKey('Text.ID'), primary_key=True),
Column('Genre', ForeignKey('Genre.ID'), primary_key=True)
)
class Veroeffentlichung(Base):
__tablename__ = 'Veroeffentlichung'
Text1: Mapped[int] = mapped_column('Text', ForeignKey('Text.ID'))
Werk_: Mapped[int] = mapped_column('Werk', ForeignKey('Werk.ID'))
Pseudonym_: Mapped[int] = mapped_column('Pseudonym', ForeignKey('Pseudonym.ID'))
ID: Mapped[Optional[int]] = mapped_column(Integer, primary_key=True)
AltTitel: Mapped[Optional[str]] = mapped_column(Text)
AltUntertitel: Mapped[Optional[str]] = mapped_column(Text)
Pseudonym1: Mapped['Pseudonym'] = relationship('Pseudonym', back_populates='Veroeffentlichung')
Text2: Mapped['Text_'] = relationship('Text_', back_populates='Veroeffentlichung')
Werk1: Mapped['Werk'] = relationship('Werk', back_populates='Veroeffentlichung')
t_Werk_Genre = Table(
'Werk_Genre', Base.metadata,
Column('Werk', ForeignKey('Werk.ID'), primary_key=True),
Column('Genre', ForeignKey('Genre.ID'), primary_key=True)
)
t_Werk_Herausgeber = Table(
'Werk_Herausgeber', Base.metadata,
Column('Herausgeber', ForeignKey('Herausgeber.ID'), primary_key=True),
Column('Werk', ForeignKey('Werk.ID'), primary_key=True)
)

BIN
works.oldschema.sqlite Normal file

Binary file not shown.