В geo хранятся поля "Страна" и "город".
Пришлось вынести эти поля из таблицы users в geo, т.к. она содержат повторяющиеся данные, а это противоречит нормализции.
В общем, суть, имеем users и geo. geo ссылается по полю id_users на таблицу users.
$table = "users";Код правильный? Или есть какое то средство в php для обспечения каскадной целостности данных (каскадное удаление, каскадное обновление). ? Я правильно сделал?
$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());
Спустя 21 минута, 22 секунды (10.11.2010 - 01:56) SlavaFr написал(а):
чето id юзера обсалютно не вписывается в таблицу geo.
Если 100000 юзеров с одного города соберутся, то country и city будут редундантными.
Если 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:
foreign key это 2 слова, убери "_"
синтакс в mysql:
CONSTRAINT `название_ключа`
FOREIGN KEY (`имя_референцированного_поля_в_актуальной_таблице`)
REFERENCES `имй_референцированной_таблицы`(`имй_поля_в_референцированной_таблице`)