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)eindeutigUsers(Email)eindeutigUserSessions(SessionToken)eindeutigFriendRequests(ToUserId, Status)Friendships(UserAId, UserBId)Lobbies(LobbyCode)eindeutigLobbyMembers(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:
- das echte
CREATE TABLESQL-Skript fuer SQL Server - die passenden C# Model-Klassen
- die ADO.NET Repository-Klassen