PHP в деталях

       

Народная самодеятельность . связи таблиц в MySQL


DL
6.12.2000

Первоначально я предполагал сделать выпуск "Народной самодеятельности" со сборником ошибок, допущеных в основном мною :). Кое-что я собирал из статей о традиционных ошибках и т.п. Но жизнь оказывается куда интересней! Пишу про очередную самодеятельность прямо по горячим следам.

Итак, некоторый человек, назовем его Вася, спрашивает Общественность форума про MySQL.

В.: Не совсем понятно как создать связь между таблицами, чтобы в поле первой автоматически вставлялись данные второй (есно выборочно и есно по ИД).

Варивант типа SELECT db.user, db.delete_priv, user.user, user.delete_priv FROM db,user WHERE db.user = user.user не совсем подходит, так как связью это можно назвать с большой натяжкой...

O.: Честно говоря, не понимаю, почему эта связь тебе не подходит? Чем эта связь натянута?

В.: Ну не нравится мне связь, основанная на синтаксисе запросов... хотелось бы чего-нибудь более существенного, иначе я вообще не вижу смысла в ключах и индексах.

O.: Более существенное - ты имеешь в виду графический интерфейс как в MS Access?

К сожалению, сам Access работает точно так же? достаточно нажать кнопочку "SQL", и вы увидите эти связи "с большой натяжкой".

В.: Просто мне проще программно все это делать, благо таблицы небольшие... Раз в самом MySQL это не работает.

O.: Через вложенные циклы, рекурсии? Скажи зачем тогда тебе вообще база данных и таблицы?

В.: Никаких вложенных циклов и рекурсий ? читаю н-ое колмчество массивов и с ними уже работаю.... А делать связь на основе селекта ? не совсем то что мне нужно...

O.: Правильно... храни все в файликах, тогда вообще вопросов не будет.



Он не знал велосипеда,

Слепо верил в чудеса,

Потому что не изведал

Всех достоинств колеса.

В общем, считаю своим долгом разложить по полочкам связи таблиц.

Кстати, насчёт связей - вот мнение признанного авторитета - Voodoo ;)

> хотелось бы чего-нибудь более существенного...

более существенное - это поддержка reference

[]

create table.....

reference_definition: REFERENCES tbl_name [(index_col_name,...)]

[MATCH FULL | MATCH PARTIAL]

[ON DELETE reference_option]

[ON UPDATE reference_option]

Только надо учесть что это нихрена в МуСКЛе не работает :)

The FOREIGN KEY, CHECK, and REFERENCES clauses don't actually do anything. The syntax for them is provided only for compatibility, to make it easier to port code from other SQL servers and to run applications that create tables with references. See section 5.4 Functionality Missing from MySQL.



Содержание раздела