Обычно после перечисления столбцов в определении таблицы указывают дополнительные ограничения, например, ключи. Естественно, таблица, на которую ссылается внешний ключ должна существовать, а тип внешнего ключа должен совпадать с типом столбца на который ссылается. Например, для MySQL, если столбец внешнего ключа был определен как fk_key1 INTEGER, а первичный ключ таблицы tb как id INTEGER UNSIGNED, то таблица просто не будет создана. В некоторых базах ограничения можно задавать как свойство столбца, но на мой взгляд слишком длинно получается.
-- правильно для большинства реализаций SQLCREATE TABLE tblname ( id integer, fstr char(45), str varchar(45), -- в MySQL precision можно опустить num double precision, birth date, fk_key1 integer, -- столбец id используем в качестве первичного ключаCONSTRAINT pk_tblname PRIMARY KEY (id), -- уникальный ключ, т.е. значения в столбце fstr-- будут уникальныCONSTRAINT uk_tblname1 UNIQUE (fstr), -- ограничение на значениеCONSTRAINT tblname_numcheck CHECK (num<100.34), -- внешний ключ, в скобка столбец нашей таблицы-- tb таблица, id столбец на которые ссылается-- внешний ключCONSTRAINT fk_tblname FOREIGN KEY (fk_key1) REFERENCES tb(id) ); -- именовать ограничения не обязательно-- в этом случае СУБД сгенерирует имена самаCREATE TABLE tblname ( id integer, fstr char(45), str varchar(45), num double, birth date, fk_key1 integer, PRIMARY KEY (id), UNIQUE (fstr), CHECK (num<100.34), FOREIGN KEY (fk_key1) REFERENCES tb(id) );