Forum Webscript.Ru

Общие => Базы данных => Тема начата: Nicki от 27 Ноября 2003, 16:17:59

Название: REFERENCES с использованием varchar
Отправлено: Nicki от 27 Ноября 2003, 16:17:59
Господа.
Скажите пожалуйста, можно сделать связь между таблицами, через поля varchar?
Или можно только через числовые типы полей делать связи?

Т.е. примерно такая конструкция прокатит?

CREATE TABLE person (
    id varchar(10) NOT NULL,
    name char(60) NOT NULL,
    PRIMARY KEY (id)
);

CREATE TABLE shirt (
    id int NOT NULL AUTO_INCREMENT,
    style enum(\'t-shirt\', \'polo\', \'dress\') NOT NULL,
    color enum(\'red\', \'blue\', \'orange\', \'white\', \'black\') NOT NULL,
    owner varchar(10) NOT NULL REFERENCES person(id),
    PRIMARY KEY (id)
);
Название: REFERENCES с использованием varchar
Отправлено: fidget от 27 Ноября 2003, 17:29:42
если СУБД MySQL, то там references для MyISAM только парсится, но ничего не делает.
Название: REFERENCES с использованием varchar
Отправлено: Nicki от 27 Ноября 2003, 17:35:10
Да, MySQL. А как это понять "парсится"?
Название: REFERENCES с использованием varchar
Отправлено: FreeSpace от 27 Ноября 2003, 19:16:43
Цитировать
Nicki:
Да, MySQL. А как это понять "парсится"?

Это значит, что ошибок не выдает.
Название: REFERENCES с использованием varchar
Отправлено: Nicki от 27 Ноября 2003, 19:44:37
Т.е. может принять значение, которого нет в "главной" таблице? Или не принимает не верного значения, но не выдает сообщение об ошибке?
Название: REFERENCES с использованием varchar
Отправлено: fidget от 27 Ноября 2003, 19:49:38
> Т.е. может принять значение, которого нет в "главной" таблице?

угу. именно.

Если тебе нужны внешние ключи, то они поддерживаются только для таблиц InnoDB:
http://www.mysql.com/doc/en/InnoDB.html
http://www.mysql.com/doc/en/InnoDB_foreign_key_constraints.html
Название: REFERENCES с использованием varchar
Отправлено: Nicki от 28 Ноября 2003, 11:57:58
Тогда как используется references в myisam?
Какую функцию он выполняет?

И так что, можно или нет делать связь через varchar?
Название: REFERENCES с использованием varchar
Отправлено: fidget от 28 Ноября 2003, 14:15:25
> Какую функцию он выполняет?

пока никакую, в будущем планируют поддерживать для MyISAM таблиц тоже.
Название: REFERENCES с использованием varchar
Отправлено: Nicki от 28 Ноября 2003, 16:37:26
Так, что вы мне посоветуете, ребят?
InnoDB наверное не каждый хостинг поддерживает, а в myisam пока нет поддержки целостности данных, т.е. для операций удаления и обновления данных в "главной" таблице.

А в SELECT\'ах используется references в myisam?
Может хоть в запросах будет от этой фишки толк? У меня примерно 5-7 таблиц и все должны быть связаны.

Пока приходится следить за целостностью данных средствами php.

Что скажете?
Название: REFERENCES с использованием varchar
Отправлено: ThE0ReTiC от 28 Ноября 2003, 17:20:25
Цитировать
Так, что вы мне посоветуете, ребят?
PostgreSQL ;)
Цитировать
Так, что вы мне посоветуете, ребят?
Ничего страшного и предосудительного в этом нет. Если СУБД не поддерживает целостность данных в том объеме в котором она (целостность) необходима для решения задачи - целостность поддерживается программными средствами. Это нормальный подход ибо третий вариант - вообще не отслеживать целостность
Название: REFERENCES с использованием varchar
Отправлено: fidget от 28 Ноября 2003, 17:57:15
Nicki, или отслеживаешь все ручками, или переходишь на InnoDB или выбираешь другую СУБД.