Forum Webscript.Ru
Общие => Базы данных => Тема начата: 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)
);
-
если СУБД MySQL, то там references для MyISAM только парсится, но ничего не делает.
-
Да, MySQL. А как это понять "парсится"?
-
Nicki:
Да, MySQL. А как это понять "парсится"?
Это значит, что ошибок не выдает.
-
Т.е. может принять значение, которого нет в "главной" таблице? Или не принимает не верного значения, но не выдает сообщение об ошибке?
-
> Т.е. может принять значение, которого нет в "главной" таблице?
угу. именно.
Если тебе нужны внешние ключи, то они поддерживаются только для таблиц InnoDB:
http://www.mysql.com/doc/en/InnoDB.html
http://www.mysql.com/doc/en/InnoDB_foreign_key_constraints.html
-
Тогда как используется references в myisam?
Какую функцию он выполняет?
И так что, можно или нет делать связь через varchar?
-
> Какую функцию он выполняет?
пока никакую, в будущем планируют поддерживать для MyISAM таблиц тоже.
-
Так, что вы мне посоветуете, ребят?
InnoDB наверное не каждый хостинг поддерживает, а в myisam пока нет поддержки целостности данных, т.е. для операций удаления и обновления данных в "главной" таблице.
А в SELECT\'ах используется references в myisam?
Может хоть в запросах будет от этой фишки толк? У меня примерно 5-7 таблиц и все должны быть связаны.
Пока приходится следить за целостностью данных средствами php.
Что скажете?
-
Так, что вы мне посоветуете, ребят?
PostgreSQL ;)
Так, что вы мне посоветуете, ребят?
Ничего страшного и предосудительного в этом нет. Если СУБД не поддерживает целостность данных в том объеме в котором она (целостность) необходима для решения задачи - целостность поддерживается программными средствами. Это нормальный подход ибо третий вариант - вообще не отслеживать целостность
-
Nicki, или отслеживаешь все ручками, или переходишь на InnoDB или выбираешь другую СУБД.