2017-05-09 7 views
0

SQLite構文のドキュメントは、外部キーを宣言するときに "型名"を指定できることを示しています。SQLite FOREIGN KEY型名

https://www.sqlite.org/syntax/column-def.html

私はそれが参照されたキーの「タイプ」を持っているどのような役割、どこでも見つけることができませんでした。外部キー "type-name"が参照する値の "type-name"と一致しない場合はどうなりますか?それはまったく役割を果たしますか?

ありがとうございます。

答えて

1

外部キー制約定義には型名が含まれていません。型の名前を持つことができ、列の定義に取り付けることができますが、そのタイプ名が列自体に属し:

CREATE TABLE Parent (
    ID INTEGER PRIMARY KEY, 
    Name TEXT, 
    [...] 
); 
CREATE TABLE Child (
    [...], 
    ParentID INTEGER REFERENCES Parent(ID) 
    -- column def. -- ---- foreign key ---- 
); 

上に示したすべての3つの列が型を持っていますが、外部キー制約がで始まりますREFERENCESとタイプを含んでいません。

外部キー制約は、テーブル制約として書くことができる。

CREATE TABLE Child (
    ParentID INTEGER, 
    [...], 
    FOREIGN KEY ParentID REFERENCES Parent(ID) 
); 

このフォームは、それが明らか制約のために別個のタイプが存在しないこととなります。


とにかく、SQLiteはdynamic typingを使用し、ほとんどの状況で型名を無視するので、あなたがすべてのタイプを使用している場合は、そこに書き込み、またはどのような問題ではありません。

+0

ありがとうございます。それは私に、より良い見通しで私の問題を調べさせました。 あなたは「それは型の名前を持つことができ、列の定義に取り付けることができますが、そのタイプ名が列自体に属し、」あなたが使用 、言及: のParentID INTEGERのREFERENCES親(ID)を 私はありませんINTEGERがこの中で果たす役割を理解していない。 ParentID関連情報親(ID) 動作の変更はありません。 ロールがない場合に誰かが型を宣言したいと思うような微妙な理由はありますか?私には検出できない目的がありますか? –

+1

SQliteは実際に[affninity](http://www.sqlite.org/datatype3.html#affinity)の型を使用しますが、ほとんどの場合、型は単なるドキュメントです。 –

+0

ありがとう...素晴らしい情報 –

関連する問題