Hallo!
Ich möchte gerne ein kleines Haushaltsbuch mit Tabellen erstellen.
Ich hab da auch schon was hingeschustert..jedoch habe ich noch einige Fragen bezüglich Redundanz und Beziehungen.
In der Tabelle 'Positionen' habe ich vier Spalten die sich auf Werte einer jeweils anderen Tabelle beziehen..ist das redundant?
Außerdem denke ich das mit dieser Konfiguration das Modifizieren der einen Tabelle nicht automatisch die Werte der anderen Bezugstabelle geändert werden.
Was denkt Ihr, wie sieht das bisher aus?
Spoiler anzeigen
Ich möchte gerne ein kleines Haushaltsbuch mit Tabellen erstellen.
Ich hab da auch schon was hingeschustert..jedoch habe ich noch einige Fragen bezüglich Redundanz und Beziehungen.
In der Tabelle 'Positionen' habe ich vier Spalten die sich auf Werte einer jeweils anderen Tabelle beziehen..ist das redundant?
Außerdem denke ich das mit dieser Konfiguration das Modifizieren der einen Tabelle nicht automatisch die Werte der anderen Bezugstabelle geändert werden.
Was denkt Ihr, wie sieht das bisher aus?
SQL-Abfrage
- DROP TABLE IF EXISTS [dbo].[Beziehungen]
- DROP TABLE IF EXISTS [dbo].[Positionen]
- DROP TABLE IF EXISTS [dbo].[EinAus]
- DROP TABLE IF EXISTS [dbo].[Kategorien]
- CREATE TABLE [dbo].[Kategorien] (
- [IDKat] INT PRIMARY KEY IDENTITY(1,1),
- [NameKategorie] NVARCHAR(20) UNIQUE NOT NULL
- )
- CREATE TABLE [dbo].[EinAus] (
- [IDEinAus] INT PRIMARY KEY IDENTITY(1,1),
- [NameEinAus] NVARCHAR(10) UNIQUE NOT NULL
- )
- CREATE TABLE [dbo].[Positionen] (
- [IDPos] INT PRIMARY KEY IDENTITY(1,1),
- [Kategorie_ID] INT NOT NULL,
- [Kategorie_Name] NVARCHAR(20) NULL,
- [EinAus_ID] INT NOT NULL,
- [EinAus_Name] NVARCHAR(10) NULL,
- [Datum] Date NULL,
- [Betrag] Money NOT NULL,
- CONSTRAINT [FK_Positionen_Kategorien_ID] FOREIGN KEY ([Kategorie_ID]) REFERENCES [dbo].[Kategorien] ([IDKat]),
- CONSTRAINT [FK_Positionen_EinAus_ID] FOREIGN KEY ([EinAus_ID]) REFERENCES [dbo].[EinAus] ([IDEinAus]),
- CONSTRAINT [FK_Positionen_Kategorien_Name] FOREIGN KEY ([Kategorie_Name]) REFERENCES [dbo].[Kategorien] ([NameKategorie]),
- CONSTRAINT [FK_Positionen_EinAus_Name] FOREIGN KEY ([EinAus_Name]) REFERENCES [dbo].[EinAus] ([NameEinAus])
- )
- CREATE TABLE [dbo].[Beziehungen] (
- [KategorieID] INT NOT NULL,
- [EinAusID] INT NOT NULL,
- [PosID] INT NOT NULL,
- CONSTRAINT [PK_Beziehungen] PRIMARY KEY CLUSTERED ([KategorieID] ASC, [EinAusID] ASC, [PosID] ASC),
- CONSTRAINT [FK_BeziehungenKategorie] FOREIGN KEY ([KategorieID]) REFERENCES [dbo].[Kategorien] ([IDKat]),
- CONSTRAINT [FK_BeziehungenEinAus] FOREIGN KEY ([EinAusID]) REFERENCES [dbo].[EinAus] ([IDEinAus]),
- CONSTRAINT [FK_BeziehungenPosID] FOREIGN KEY ([PosID]) REFERENCES [dbo].[Positionen] ([IDPos])
- )
- INSERT INTO [dbo].[Kategorien]
- ([NameKategorie])
- VALUES
- ('Gehalt'),
- ('Miete'),
- ('Verkäufe'),
- ('Versicherung'),
- ('Lebensmittel'),
- ('Haushaltsartikel'),
- ('Sonstige')
- INSERT INTO [dbo].[EinAus]
- ([NameEinAus])
- VALUES
- ('Eingang'),
- ('Ausgang')
- INSERT INTO [dbo].[Positionen]
- ([Kategorie_ID], [EinAus_ID], [Datum], [Betrag])
- VALUES
- (1, 1, '2022-02-02', 2000),
- (2, 2, '2022-02-10', 500),
- (4, 2, '2022-02-10', 450),
- (3, 1, '2022-02-20', 300),
- (2, 1, '2022-02-25', 800),
- (5, 2, '2022-02-05', 150),
- (5, 2, '2022-02-25', 150),
- (7, 2, '2022-02-28', 300)
- INSERT INTO [dbo].[Beziehungen]
- ([KategorieID], [EinAusID], [PosID])
- VALUES
- (1, 1, 1),
- (2, 2, 2),
- (4, 2, 3),
- (3, 1, 4),
- (2, 1, 5),
- (5, 2, 6),
- (5, 2, 7),
- (7, 2, 8)
- SELECT
- STR([IDPos], 5) 'POSITION',
- STR([Kategorie_ID], 5) 'KATEGORIE ID',
- LEFT(NameKategorie, 15) 'KATEGORIE',
- STR([EinAus_ID], 5) 'EINGANG/AUSGANG ID',
- LEFT(NameEinAus, 15) 'EINGANG/AUSGANG',
- CONVERT(CHAR(10), [Datum], 104) 'DATUM',
- STR([Betrag], 15) 'BETRAG'
- FROM
- [dbo].[Positionen] JOIN [dbo].[Kategorien]
- ON Positionen.Kategorie_ID = Kategorien.IDKat
- JOIN [dbo].[EinAus]
- ON Positionen.EinAus_ID = EinAus.IDEinAus
- ORDER BY DATUM ASC