-1

Ich bin ein PHP-Entwickler und habe Grundkenntnisse in MySQL, aber ich arbeite an einem persönlichen Projekt und muss mich darum kümmern.Drei Tabellen - Kaskadenbeziehungen verwenden oder Extras hinzufügen?

Rechnungsdetails werden gespeichert, die Stripe-Objekte nachahmen. Ich frage mich jedoch, ob ich Indizes in Kaskade verwenden oder sie für jede Tabelle verwenden soll.

Lassen Sie mich durch (ein vereinfachtes) Beispiel erklären. Ein Benutzer hat ein Abonnement. Jedes Abonnement erhebt monatlich eine Rechnung. Jede Rechnung stellt eine Ladung (oder mehr, wenn einige fehlgeschlagen.)

table_user 
- user_id 
- username 
- password 

table_subscription 
- sub_id 
- start_date 
- end_date 
- amount 
- user_id 

table_invoice 
- invoice_id 
- period_start 
- period_end 
- amount 
- paid 
- subscription_id 

table_charge 
- charge_id 
- amount 
- status 
- failure_code 
- failure_reason 
- invoice_id 

Mein Punkt ist, dass ich von jedem Benutzer Gebühren und Rechnungen schnell auflisten möge. Eine Gebühr/Rechnung gehört einem Benutzer. Sollte ich den Schlüssel "uder_id" nur für das Abonnement verwenden (da Gebühren und Rechnungen verknüpft sind) oder sollte ich noch "user_id" zu Rechnungs- und Gebührentabellen hinzufügen?

Es ist einfacher zu wählen, aber auch, wenn ich in Zukunft Gebühren, die nicht mit einer Rechnung verbunden sind (Kauf eines einmaligen Extra), aber mit diesem Benutzer verknüpft sind.

Wir freuen uns auf einige Anregungen.

+0

Dies ist eine Designentscheidung, die wir nicht wirklich beantworten können, da wir nicht alle Details oder Pläne kennen. – Shadow

Antwort

1

Die einfache Antwort ist die Verwendung von 'user_id' als Schlüssel für jede Tabelle. Wenn Sie MySQL Workbench haben, können Sie diese auch über Schlüssel verknüpfen. Wenn "user_id" eine eindeutige ID für einen Benutzer ist, muss sie in jeder Tabelle enthalten sein, in der sie verwendet wird. Auf diese Weise haben Sie keine verlorene Tabelle und benötigen Code oder Trigger, um den Benutzer zu finden. Es ist nur eine zusätzliche Spalte pro Tabelle und die Mühe wert. PHP wird es als absoluten Bezugspunkt für den Benutzer verwenden, ebenso wie Ihre Hintergrundroutinen.
Ich würde auch die Benutzer-ID und IP-Adresse für ein paar Jahre archivieren, nur für den Fall, dass es ein Zahlungsproblem gibt und sie ihr Konto schließen.