[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как связывать таблицы в mysql?
phpsc
Имеем две таблицы "users" и "geo".
В geo хранятся поля "Страна" и "город".
Пришлось вынести эти поля из таблицы users в geo, т.к. она содержат повторяющиеся данные, а это противоречит нормализции.

В общем, суть, имеем users и geo. geo ссылается по полю id_users на таблицу users.
$table = "users";
$query = "DROP TABLE IF EXISTS $table";
$result = mysql_query($query)
or die ("<p>Ошибка - Невозможно удалить таблицу в БД: ".mysql_error());
$query = "create table ".$table."
(id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY(id),
name VARCHAR(10),
address VARCHAR(50),
date DATE,
mail VARCHAR(20)
)"
;
$result = mysql_query($query)
or die ("<p>Нельзя создать таблицу ".$table." : ".mysql_error());

$table = "geo";
$query = "DROP TABLE IF EXISTS $table";
$result = mysql_query($query)
or die ("<p>Ошибка - Невозможно удалить таблицу в БД: ".mysql_error());
$query = "create table ".$table."
(id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY(id),
id_users INT NOT NULL,
country VARCHAR(50),
city VARCHAR(50),
)"
;
$result = mysql_query($query)
or die ("<p>Нельзя создать таблицу ".$table." : ".mysql_error());
Код правильный? Или есть какое то средство в php для обспечения каскадной целостности данных (каскадное удаление, каскадное обновление). ? Я правильно сделал?



Спустя 21 минута, 22 секунды (10.11.2010 - 01:56) SlavaFr написал(а):
чето id юзера обсалютно не вписывается в таблицу geo.
Если 100000 юзеров с одного города соберутся, то country и city будут редундантными.

create table users
(
id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY(id),
name VARCHAR(10),
geo_id int,# foreign key na geo
address VARCHAR(50),
date DATE,
mail VARCHAR(20)
);


create table geo
(
id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY(id),
country VARCHAR(50),
city VARCHAR(50),
);




Спустя 4 минуты, 8 секунд (10.11.2010 - 02:01) SlavaFr написал(а):
имеет смысл даже country вынести в отдельную таблицу

Спустя 55 минут, 58 секунд (10.11.2010 - 02:56) phpsc написал(а):
Цитата (SlavaFr @ 9.11.2010 - 23:01)
имеет смысл даже country вынести в отдельную таблицу

country отдельно да))))

что здесь не так:
$query = "create table ".$table_affiliated."
(id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY(id),
id_users INT NOT NULL,
country VARCHAR(50),
city VARCHAR(50),
FOREIGN_KEY (id_users)
REFERENCES users(id)
) ENGINE = InnoDB"
;
$result = mysql_query($query)
or die ("<p>Нельзя создать таблицу ".$table_affiliated." : ".mysql_error());
выдает :
Нельзя создать таблицу geo : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(id_users) REFERENCES users(id) ) ENGINE = InnoDB' at line 7

Спустя 16 часов, 13 минут, 15 секунд (10.11.2010 - 19:10) SlavaFr написал(а):
я повторяюсь, юзеру нечево делать в таблице geo

foreign key это 2 слова, убери "_"

синтакс в mysql:
CONSTRAINT `название_ключа`
FOREIGN KEY (`имя_референцированного_поля_в_актуальной_таблице`)
REFERENCES `имй_референцированной_таблицы`(`имй_поля_в_референцированной_таблице`)




Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.