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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Связи таблиц

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Описание: Связи таблиц в базе данных MySQL
Mister
Отправлено: 31 Марта, 2007 - 00:32:44
Post Id



Посетитель


Покинул форум
Сообщений всего: 282
Дата рег-ции: Янв. 2007  
Откуда: Сухиничи Калуж.обл.


Помог: 0 раз(а)

[+]


Подскажите пожалуйста, как происходит связь полей в базе данных mysql? Например в ms access всё понятно, зацепил мышкой одно поле прицепил его к другой (в схеме данных), а как подобное сделать в mysql? какие типы таблиц можно подобным образом связывать? как можно посмотреть какие таблицы и поля связаны?


-----
..я не специалист, а только учусь
 
 Top
evgenijj
Отправлено: 31 Марта, 2007 - 00:47:00
Post Id



Участник


Покинул форум
Сообщений всего: 1212
Дата рег-ции: Авг. 2006  
Откуда: Москва


Помог: 10 раз(а)




Это называется внешние ключи 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`);
 
 Top
Mister
Отправлено: 31 Марта, 2007 - 12:52:05
Post Id



Посетитель


Покинул форум
Сообщений всего: 282
Дата рег-ции: Янв. 2007  
Откуда: Сухиничи Калуж.обл.


Помог: 0 раз(а)

[+]


Спасибо за ответ. Я читал в книге про внешние ключи, а что означает то, что только таблицы InnoDB поддерживают внешние ключи? Другие таблицы внешние ключи не поддерживают, тогда как с ними работать? А можно ли сначала создать сами таблицы, а потом их связи?


-----
..я не специалист, а только учусь
 
 Top
evgenijj
Отправлено: 31 Марта, 2007 - 14:07:52
Post Id



Участник


Покинул форум
Сообщений всего: 1212
Дата рег-ции: Авг. 2006  
Откуда: Москва


Помог: 10 раз(а)




Mister пишет:
Другие таблицы внешние ключи не поддерживают, тогда как с ними работать?

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

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

 
 Top
-SCHATTEN-
Отправлено: 31 Марта, 2007 - 15:17:31
Post Id



Пользователь


Покинул форум
Сообщений всего: 615
Дата рег-ции: Июль 2006  
Откуда: Оттуда !


Помог: 0 раз(а)




Сомневаюсь что начнут переходить на другие БД. MySQL всетаки быстрее и удобнее нежели остальные, + бесплатная.
 
 Top
Mister
Отправлено: 01 Апреля, 2007 - 06:57:36
Post Id



Посетитель


Покинул форум
Сообщений всего: 282
Дата рег-ции: Янв. 2007  
Откуда: Сухиничи Калуж.обл.


Помог: 0 раз(а)

[+]


Т.е. например при создании БД с использованием таблиц MySAM, можно использовать только одну таблицу, а связывать их нельзя?
А можно ли в одной БД использовать несколько разных таблиц, т.е. не содержащих связную информацию, например таблица содержащая сведения о к.-л. посетителях, таблица с гостевой книгой и закзами интернет-магазина?


-----
..я не специалист, а только учусь
 
 Top
evgenijj
Отправлено: 01 Апреля, 2007 - 09:31:33
Post Id



Участник


Покинул форум
Сообщений всего: 1212
Дата рег-ции: Авг. 2006  
Откуда: Москва


Помог: 10 раз(а)




Mister пишет:
Т.е. например при создании БД с использованием таблиц MyISAM ... связывать их нельзя?

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

Можно
 
 Top
Mister
Отправлено: 01 Апреля, 2007 - 19:46:08
Post Id



Посетитель


Покинул форум
Сообщений всего: 282
Дата рег-ции: Янв. 2007  
Откуда: Сухиничи Калуж.обл.


Помог: 0 раз(а)

[+]


В общем для построение полноценной базы данных как ms access можно использовать только InnoDB (со всеми связями)? А остальные таблицы можно использовать для построения не очень больших баз данных?


-----
..я не специалист, а только учусь
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB