2016-04-24 11 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) 
); 

この2つのテーブルの間に単純な関係を作りたいだけです。

+0

ID、名前、および値にPKを作成するのはちょっと変です – Strawberry

答えて

1

あなたの質問に対する即時の答えは、外部キーがすべて列を一意のキーと参照する必要があるということです。これは、2つの列に一意索引を必要とし、それは次のようになります。しかし、主キー(自動インクリメントid)を使用することをお勧めし

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

。次に、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) 
); 
関連する問題