Sollte ich eine primäre Schlüssel-ID verwenden, wenn die Tabelle nichts bedeutet?

Ich habe einen Tisch namens 'Date Restriction' und es hat grundsätzlich folgende properties:

DayId : int DateFrom : datetime DateTo : datetime EventId : int // this is a foreign key 

Nun, so würde ich auf diese Weise zugreifen, um die Veranstaltung zu bekommen, die ich will und dann die zugehörigen datesbeschränkungen anschaue.

Ist es eine gute Praxis oder empfiehlt, eine Primärschlüsselspalte zu dieser Tabelle hinzuzufügen, wenn ich niemals die datesbeschränkung allein verweisen muss?

Sie sollten immer einen Primärschlüssel haben. Mit einem Primärschlüssel wird es SQL server ermöglichen, die data physisch physisch zu speichern. Ein Primärschlüssel erlaubt auch Entity Framework, eine Zeile einfach eindeutig zu identifizieren.

searchn Sie nach einem natürlichen Schlüssel über Ihre Spalten. Wenn ein einziges EventId nur eine Zeile in dieser Tabelle hat, erstellen Sie einen Primärschlüssel auf EventId.

Wenn es keinen natürlichen Schlüssel gibt, füge eine Surrogat-Schlüsselspalte zu deinem Tisch hinzu und mache es zu einer Identität.

Als database-Design-Praxis wird immer empfohlen, Primärschlüssel zu haben. Auch wenn Ihre Anwendung nicht direkt auf die DateRestriction-Tabelle verweist, wird eine eindeutige Identifizierung für eine Zeile Ihnen Vorteile nicht nur auf der SQL-Seite, sondern es wird auch erlauben Entity-Framework, um einfach die Tabelle (ohne durch alle zusätzlichen Reifen).

Sie müssen EF sagen, wie man eine Zeile in Ihrer database eindeutig identifiziert. Wenn jedes Ereignis nur einmal in der Tabelle erscheint, können Sie die EventId sowohl den Primärschlüssel als auch einen Fremdschlüssel erstellen. Sie können auch alle drei Spalten einen zusammengesetzten Primärschlüssel machen. Beispielsweise:

 class DateRestriction { [Key, Column(Order=0)] public DateTime DateFrom {get;set;} [Key, Column(Order=1)] public DateTime DateTo {get;set;} [Key, Column(Order=2)] public int EventId {get;set;} } 

Ich empfehle, einen Surrogatschlüssel zu haben und einen einzigartigen Index mit dem natürlichen Schlüssel zu erstellen.

Wenn diese Tabelle in Ihrer database direkt von einer anderen Tabelle referenziert wird, dann nein. Ohne den Rest deiner Struktur bin ich nicht ganz sicher. Also stelle ich mir eine allgemeine Faustregel vor:

Kundentabelle:

  • Ich würde
  • Name
  • Letzte

Aber du würdest keine individuelle Adresse abfragen, ohne sie mit einer Person zu verknüpfen. Also hast du diesen zweiten Tisch namens Adresse .

  • Kundennummer
  • Straße
  • Stadt
  • Reißverschluss
  • Bundesland

So wird dieser Kunde immer eine gebundene Adresse haben, also ist die Definition eines Foreign Key akzeptabel. Nun, wenn ein Kunde erlaubt wäre mehr als eine Adresse dann ja, bräuchten Sie einen Primary Key so dass die Struktur auf sich steht.

Wenn diese data immer an eine andere Tabelle gebunden sind, können Sie einfach einen Foreign Key definieren. Offensichtlich können Ihre Implementierung und der Zugriff auf Ihre database einen Einfluss haben. Also musst du vorsichtig sein Wenn Sie verschiedene Technologien wie verwenden:

  • Entity Framework
  • Ado
  • etc

So bewusst sein, der Umsetzung und Design von Ihrer database und Anwendung.

Doch ohne einen Primary Key Sie Indexes definieren, damit Sie Ihre database optimieren können. Da der Primary Key immer Indexed .

Der Surrogatschlüssel mit einem Index genügt.

Tut mir leid, wenn ich deine Frage falsch verstanden habe, aber hoffentlich ist das an der richtigen Stelle.