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