Dateien nach "/" hochladen
This commit is contained in:
@@ -0,0 +1,270 @@
|
||||
# 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
|
||||
|
||||
```mermaid
|
||||
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
|
||||
Reference in New Issue
Block a user