2016-04-24 18 views
-2

Ich versuche, ein paar Tabellen zu erstellen, und ich kann nicht meine Schlüssel ordnungsgemäß funktionieren.Kann nicht sehen, warum es nicht funktioniert

Create table FAQ (
id int(10) PRIMARY KEY AUTO_INCREMENT, 
question text, 
answer text 
); 
Create table templates (
id int(10) AUTO_INCREMENT, 
name varchar(80), 
value varchar(30), 
sql_db text, 
sql_table text, 
Primary Key(id,name,value) 
); 
Create table clientes(
id int(10) AUTO_INCREMENT, 
nome varchar(80), 
email varchar(30), 
website varchar(80), 
template_name varchar(80), 
template_value varchar(30), 
modo varchar(10), 
data datetime, 
Primary Key (id), 
FOREIGN KEY (template_name) REFERENCES templates(name), 
FOREIGN KEY (template_value) REFERENCES templates(value) 
); 

Ich möchte nur einfache Beziehungen zwischen diesen beiden Tabellen machen.

+0

Es ist irgendwie komisch eine PK auf ID, Name und Wert zu bauen – Strawberry

Antwort

1

Die unmittelbare Antwort auf Ihre Frage ist, dass ein Fremdschlüssel alle Spalten einen eindeutigen Schlüssel zu referenzieren. Das erfordert auch einen eindeutigen Index für die beiden Spalten, so sollte es wie folgt aussehen:

Create table FAQ (
    id int(10) PRIMARY KEY AUTO_INCREMENT, 
    question text, 
    answer text 
); 

Create table templates (
    id int(10) AUTO_INCREMENT, 
    name varchar(80), 
    value varchar(30), 
    sql_db text, 
    sql_table text, 
    Primary Key(id), 
    Unique (name, value) 
); 

Create table clientes (
    id int(10) AUTO_INCREMENT, 
    nome varchar(80), 
    email varchar(30), 
    website varchar(80), 
    template_name varchar(80), 
    template_value varchar(30), 
    modo varchar(10), 
    data datetime, 
    Primary Key (id), 
    FOREIGN KEY (template_name, template_value) REFERENCES templates(name, value) 
); 

Es ist jedoch besser, den Primärschlüssel zu verwenden (die Auto erhöht id). Dann schauen Sie den Namen und den Wert mit join up:

Create table clientes (
    id int(10) AUTO_INCREMENT, 
    nome varchar(80), 
    email varchar(30), 
    website varchar(80), 
    template_id int, 
    modo varchar(10), 
    data datetime, 
    Primary Key (id), 
    FOREIGN KEY (template_id) REFERENCES templates(id) 
); 
Verwandte Themen