2017-07-26 9 views
0

Ich habe eine Datenbank mit drei Tabellen. Die Tabelle Authentication enthält folgende Komponenten:Korrekte Erstellung einer relationalen Datenbank

+----------+-----------------+------+-----+---------+----------------+ 
| Field | Type   | Null | Key | Default | Extra   | 
+----------+-----------------+------+-----+---------+----------------+ 
| id  | int(6) unsigned | NO | PRI | NULL | auto_increment | 
| userid | varchar(30)  | NO |  | NULL |    | 
| password | varchar(30)  | NO |  | NULL |    | 
| role  | varchar(20)  | NO |  | NULL |    | 
| email | varchar(50)  | YES |  | NULL |    | 
+----------+-----------------+------+-----+---------+----------------+ 

Anmeldung enthält folgende Komponenten:

+--------------+-----------------+------+-----+---------+----------------+ 
| Field  | Type   | Null | Key | Default | Extra   | 
+--------------+-----------------+------+-----+---------+----------------+ 
| id   | int(6) unsigned | NO | PRI | NULL | auto_increment | 
| TimeLoggedIn | text   | NO |  | NULL |    | 
| sessionid | varchar(255) | NO |  | NULL |    | 
+--------------+-----------------+------+-----+---------+----------------+ 

Und Aktivität:

+----------+-----------------+------+-----+---------+-------+ 
| Field | Type   | Null | Key | Default | Extra | 
+----------+-----------------+------+-----+---------+-------+ 
| id  | int(6) unsigned | NO | PRI | NULL |  | 
| Torrents | mediumtext  | NO |  | NULL |  | 
+----------+-----------------+------+-----+---------+-------+ 

Es gibt eine Beziehung zwischen den ID Bereichen Authentifizierung ID in die anderen Tabellen.

Ich muss mehrere Zeilen in Activity hinzufügen, mit mehreren Werten für Torrents für jede ID. Leider, wenn ich versuche, eine neue Zeile mit duplizierten id Wertschöpfung mit:

INSERT INTO `Activity` (`id`, `Torrents`) VALUES ('1', 'dssfsdffdsffs'); 

es mir den Fehler gibt: #1062 - Duplicate entry '1' for key 'PRIMARY'

Wie kann ich es lösen? Wie habe ich die Tabelle falsch erstellt?

Ich habe folgendes offenbar doppelte Fragen lauten:

  1. #1062 - Duplicate entry for key 'PRIMARY'

Aber obwohl es es als meine primäre Schlüssel zu entfernen, sagt mysql nur knapp sein Ziel erlauben Sie mir eine Beziehung zu erstellen, es sei denn ich gemacht es ist ein Primärschlüssel.

+0

Ist das nicht, was passieren soll? – Strawberry

+0

@Strawberry Meinst du, ich kann keine Zeilen mit doppeltem ID-Wert haben? – Droidzone

+1

Nicht, wenn es ein PRIMÄRSCHLÜSSEL ist. Entweder ID und Torrents zusammen bilden eine natürliche PK, oder Sie haben eine Ersatzaktivität activity_id Spalte. Wenn Sie sich für einen Ersatzschlüssel entscheiden, wird normalerweise ein UNIQUE KEY für die verbleibenden Spalten gebildet. – Strawberry

Antwort

1

Sie können keine Eins-zu-viele-Beziehung initiieren, indem Sie den Primärschlüssel auf den Primärschlüssel verweisen. Das wird eine Eins-zu-Eins-Beziehung sein.

In Ihren Login- und Activity-Tabellen benötigen Sie einen Fremdschlüssel, um auf die Authentifizierungs-ID zurückzugreifen. Beispiel:

CONSTRAINT `FK_Login` FOREIGN KEY (`AuthenticationID`) REFERENCES `Authentication` (`ID`) ON DELETE CASCADE ON UPDATE CASCADE 
+0

Was also sollten die Eigenschaften dieses neuen Felds AuthenticationID sein? – Droidzone

+1

Es sollte dasselbe wie der Schlüssel sein, den Sie beziehen möchten. Wenn Ihre Authentication.ID also int (6) unsigned NOT NULL ist, müssen die Fremdschlüssel in Login und Activity ebenfalls int (6) unsigned NOT NULL sein. –

+0

@Droidzone Beachten Sie jedoch, dass die Zahl innerhalb der Klammern (fast) keine Bedeutung in MySQL hat, so dass dieses Argument normalerweise weggelassen werden kann. – Strawberry

Verwandte Themen