2016-04-24 32 views
-2

我正在嘗試創建幾個表格,但無法使鑰匙正常工作。看不出爲什麼它不起作用

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) 
); 

我只是想在這兩張表之間做簡單的關係。

+0

在ID,名稱和值上構建PK有點奇怪 – Strawberry

回答

1

您的問題的直接答案是,一個外鍵需要引用所有列的唯一鍵。這也需要在兩列的唯一索引,所以它應該是這樣的:

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) 
); 

然而,最好是使用主鍵(自動增加ID)。然後你使用join查找名稱和值:

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) 
); 
相關問題