Насколько я понял вопрос, ответ на ваше первое предложение - «да, может». Неважно, как вы называете столбцы (я полагаю, что это «атрибуты» в вашем тексте); они должны совпадать в типе данных и - если составные - число столбцов (атрибутов).
Например (это Oracle; какую базу данных вы используете?): t_student
является родительским таблица, для него установлен первичный ключ в столбце student_id
:
SQL> create table t_student
2 (student_id number constraint pk_stu primary key,
3 name varchar2(30),
4 birthdate date
5 );
Table created.
t_course
- это таблица child . Его sid
ссылка на столбец t_student.student_id
столбец; они не совпадают по имени (это то, что вы просили), но - они также не совпадают по типу данных:
SQL> create table t_course
2 (course_id number constraint pk_cou primary key,
3 sid varchar2(10) constraint fk_coustu references t_student(student_id),
4 name varchar2(20)
5 );
sid varchar2(10) constraint fk_coustu references t_student(student_id),
*
ERROR at line 3:
ORA-02267: column type incompatible with referenced column type
Как видите, это не удалось. Но если тип данных изменяется в соответствии с типом данных столбца первичного ключа родительской таблицы, все в порядке:
SQL> create table t_course
2 (course_id number constraint pk_cou primary key,
3 sid number constraint fk_coustu references t_student(student_id),
4 name varchar2(20)
5 );
Table created.
SQL>