Files
poker-texas-holdem/SQL-Server-Tabellen.md
T
2026-04-21 14:17:24 +02:00

5.8 KiB

SQL Server Tabellen fuer die Poker-Plattform

Uebersicht

Das folgende Diagramm zeigt die wichtigsten Tabellen fuer:

  • Benutzer
  • Sessions
  • Freundschaften
  • private Lobbys
  • Pokerhaende
  • Notifications
  • Wallet
  • Logging

ER-Diagramm

erDiagram
    USERS ||--o{ USER_SESSIONS : "hat"
    USERS ||--o{ FRIEND_REQUESTS : "sendet"
    USERS ||--o{ FRIEND_REQUESTS : "empfaengt"
    USERS ||--o{ FRIENDSHIPS : "ist beteiligt"
    USERS ||--o{ LOBBIES : "hostet"
    USERS ||--o{ LOBBY_MEMBERS : "tritt bei"
    USERS ||--o{ LOBBY_INVITES : "sendet"
    USERS ||--o{ LOBBY_INVITES : "empfaengt"
    USERS ||--o{ HAND_PLAYERS : "spielt"
    USERS ||--o{ HAND_ACTIONS : "fuehrt aus"
    USERS ||--|| WALLETS : "hat"
    USERS ||--o{ NOTIFICATIONS : "erhaelt"
    USERS ||--o{ APP_LOGS : "verursacht"

    LOBBIES ||--o{ LOBBY_MEMBERS : "enthaelt"
    LOBBIES ||--o{ LOBBY_INVITES : "hat"
    LOBBIES ||--o| TABLES : "startet Tisch"

    TABLES ||--o{ HANDS : "enthaelt"
    HANDS ||--o{ HAND_PLAYERS : "enthaelt"
    HANDS ||--o{ HAND_ACTIONS : "enthaelt"

    USERS {
        bigint Id PK
        nvarchar Username
        nvarchar Email
        nvarchar PasswordHash
        datetime2 CreatedAt
        nvarchar Status
    }

    USER_SESSIONS {
        bigint Id PK
        bigint UserId FK
        nvarchar SessionToken
        datetime2 CreatedAt
        datetime2 ExpiresAt
        datetime2 LastSeenAt
        bit IsRevoked
    }

    FRIEND_REQUESTS {
        bigint Id PK
        bigint FromUserId FK
        bigint ToUserId FK
        nvarchar Status
        datetime2 CreatedAt
        datetime2 RespondedAt
    }

    FRIENDSHIPS {
        bigint Id PK
        bigint UserAId FK
        bigint UserBId FK
        datetime2 CreatedAt
        nvarchar Status
    }

    LOBBIES {
        bigint Id PK
        bigint HostUserId FK
        nvarchar LobbyCode
        nvarchar Name
        nvarchar Status
        datetime2 CreatedAt
        datetime2 StartedAt
    }

    LOBBY_MEMBERS {
        bigint Id PK
        bigint LobbyId FK
        bigint UserId FK
        nvarchar Role
        nvarchar Status
        datetime2 JoinedAt
    }

    LOBBY_INVITES {
        bigint Id PK
        bigint LobbyId FK
        bigint FromUserId FK
        bigint ToUserId FK
        nvarchar Status
        datetime2 CreatedAt
        datetime2 RespondedAt
    }

    TABLES {
        bigint Id PK
        bigint LobbyId FK
        nvarchar Name
        int SmallBlind
        int BigBlind
        int MaxSeats
        nvarchar Status
    }

    HANDS {
        bigint Id PK
        bigint TableId FK
        int DealerSeat
        int ActiveSeat
        nvarchar CurrentRound
        int PotAmount
        int CurrentBetToCall
        nvarchar Status
        datetime2 StartedAt
        datetime2 CompletedAt
    }

    HAND_PLAYERS {
        bigint Id PK
        bigint HandId FK
        bigint UserId FK
        int SeatIndex
        int Stack
        int CurrentBet
        bit Folded
        bit AllIn
        bit HasActed
    }

    HAND_ACTIONS {
        bigint Id PK
        bigint HandId FK
        bigint UserId FK
        int SequenceNumber
        nvarchar Round
        nvarchar ActionType
        int Amount
        datetime2 CreatedAt
    }

    WALLETS {
        bigint UserId PK
        int SoftCurrencyBalance
        datetime2 UpdatedAt
    }

    NOTIFICATIONS {
        bigint Id PK
        bigint UserId FK
        nvarchar Type
        nvarchar PayloadJson
        bit IsRead
        datetime2 CreatedAt
    }

    APP_LOGS {
        bigint Id PK
        bigint UserId FK
        nvarchar EventType
        nvarchar ReferenceType
        bigint ReferenceId
        nvarchar PayloadJson
        datetime2 CreatedAt
    }

Tabellen kurz erklaert

Users

Speichert Benutzerkonto, Login-Informationen und Basisstatus.

UserSessions

Speichert aktive oder historische Sessions nach Login.

FriendRequests

Speichert offene, angenommene oder abgelehnte Freundschaftsanfragen.

Friendships

Speichert bestaetigte Freundschaften zwischen zwei Benutzern.

Lobbies

Private Lobby, die von einem Host erstellt wird.

LobbyMembers

Liste aller Benutzer, die aktuell oder historisch Teil einer Lobby sind.

LobbyInvites

Einladungen zu privaten Lobbys.

Tables

Definition des eigentlichen Pokertisches, der aus einer Lobby hervorgehen kann.

Hands

Globaler Zustand einer einzelnen Pokerhand.

HandPlayers

Status eines Spielers innerhalb einer Hand.

HandActions

Historie aller Aktionen innerhalb einer Hand.

Wallets

Soft-Currency oder Chips pro Benutzer.

Notifications

Persistente Benutzerbenachrichtigungen.

AppLogs

Technische und fachliche Logs zur Nachvollziehbarkeit.

Wichtige Beziehungen

  • Ein Benutzer kann viele Sessions haben.
  • Ein Benutzer kann viele Freundschaftsanfragen senden und empfangen.
  • Eine Lobby hat genau einen Host, aber viele Mitglieder.
  • Eine Lobby kann viele Einladungen haben.
  • Eine Lobby kann genau einen aktiven Pokertisch erzeugen.
  • Ein Tisch hat viele Haende.
  • Eine Hand hat viele Spieler und viele Aktionen.
  • Ein Benutzer hat genau ein Wallet.
  • Ein Benutzer kann viele Notifications und Logs haben.

Empfohlene Indizes

  • Users(Username) eindeutig
  • Users(Email) eindeutig
  • UserSessions(SessionToken) eindeutig
  • FriendRequests(ToUserId, Status)
  • Friendships(UserAId, UserBId)
  • Lobbies(LobbyCode) eindeutig
  • LobbyMembers(LobbyId, UserId)
  • Hands(TableId, Status)
  • HandPlayers(HandId, UserId)
  • HandActions(HandId, SequenceNumber)
  • Notifications(UserId, IsRead, CreatedAt)

Hinweis zur Umsetzung

Fuer dein Projekt ist dieses Modell die fachliche Grundlage.
Als naechster Schritt kann ich dir daraus direkt eines von drei Dingen bauen:

  1. das echte CREATE TABLE SQL-Skript fuer SQL Server
  2. die passenden C# Model-Klassen
  3. die ADO.NET Repository-Klassen