Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Связи таблиц
Форумы портала PHP.SU » PHP » SQL и Архитектура БД » Связи таблиц

Страниц (1): [1]
 

1. Mister - 31 Марта, 2007 - 00:32:44 - перейти к сообщению
Подскажите пожалуйста, как происходит связь полей в базе данных mysql? Например в ms access всё понятно, зацепил мышкой одно поле прицепил его к другой (в схеме данных), а как подобное сделать в mysql? какие типы таблиц можно подобным образом связывать? как можно посмотреть какие таблицы и поля связаны?
2. evgenijj - 31 Марта, 2007 - 00:47:00 - перейти к сообщению
Это называется внешние ключи FOREIGN KEY
Пусть есть две таблицы - customers (покупатели) и orders (заказы)

CREATE TABLE `customers` (
`cust_id` int(11) NOT NULL auto_increment,
`cust_name` char(50) NOT NULL,
`cust_address` char(255) default NULL,
`cust_email` char(50) default NULL,
PRIMARY KEY (`cust_id`)
) ENGINE=InnoDB DEFAULT CHARSET=cp1251;

CREATE TABLE `orders` (
`order_num` int(11) NOT NULL auto_increment,
`order_date` datetime NOT NULL default CURRENT_TIMESTAMP,
`cust_id` int(11) NOT NULL,
PRIMARY KEY (`order_num`)
) ENGINE=InnoDB DEFAULT CHARSET=cp1251;

Каждый заказ в таблице orders имеет ссылку на уникальный идентификатор покупателя cust_id в таблице customers

Есть смысл добавить внешний ключ для таблицы orders

ALTER TABLE `orders`
ADD CONSTRAINT `FK_Orders_Customers` FOREIGN KEY (`cust_id`) REFERENCES `customers` (`cust_id`);
3. Mister - 31 Марта, 2007 - 12:52:05 - перейти к сообщению
Спасибо за ответ. Я читал в книге про внешние ключи, а что означает то, что только таблицы InnoDB поддерживают внешние ключи? Другие таблицы внешние ключи не поддерживают, тогда как с ними работать? А можно ли сначала создать сами таблицы, а потом их связи?
4. evgenijj - 31 Марта, 2007 - 14:07:52 - перейти к сообщению
Mister пишет:
Другие таблицы внешние ключи не поддерживают, тогда как с ними работать?

Ждем выхода новых версий MySQL или работаем с другой БД.
Mister пишет:
А можно ли сначала создать сами таблицы, а потом их связи?

Можно задавать ключи как при создании таблиц, так и позднее с помощью ALTER TABLE

5. -SCHATTEN- - 31 Марта, 2007 - 15:17:31 - перейти к сообщению
Сомневаюсь что начнут переходить на другие БД. MySQL всетаки быстрее и удобнее нежели остальные, + бесплатная.
6. Mister - 01 Апреля, 2007 - 06:57:36 - перейти к сообщению
Т.е. например при создании БД с использованием таблиц MySAM, можно использовать только одну таблицу, а связывать их нельзя?
А можно ли в одной БД использовать несколько разных таблиц, т.е. не содержащих связную информацию, например таблица содержащая сведения о к.-л. посетителях, таблица с гостевой книгой и закзами интернет-магазина?
7. evgenijj - 01 Апреля, 2007 - 09:31:33 - перейти к сообщению
Mister пишет:
Т.е. например при создании БД с использованием таблиц MyISAM ... связывать их нельзя?

Нельзя
Mister пишет:
А можно ли в одной БД использовать несколько разных типов таблиц?

Можно
8. Mister - 01 Апреля, 2007 - 19:46:08 - перейти к сообщению
В общем для построение полноценной базы данных как ms access можно использовать только InnoDB (со всеми связями)? А остальные таблицы можно использовать для построения не очень больших баз данных?

 

Powered by ExBB FM 1.0 RC1