Синтаксис MySQL с InnoDB - PullRequest
       5

Синтаксис MySQL с InnoDB

1 голос
/ 09 июня 2011

Итак, я взял на себя базу данных, и у меня возникли проблемы с пониманием, что именно означают эти четыре строки. Я понимаю, что эти строки усиливают реляционный аспект БД, но я надеялся точно определить, что делает этот синтаксис.

  1. Key x (y):
    Что это такое? / Каково отношение location_sh к dep_name, cat_name и loc_name?
  2. Constraint
    Похоже, это связывает владельца с именем пользователя столбца в таблице пользователей, но зачем нужна часть ограничения (то есть, что делает ограничение location_sh)?
  3. ON DELETE SET NULL, ON UPDATE CASCADE
    Просто проверяя, что при удалении или изменении имени пользователя это удаление или изменение отражается.
  4. Должен ли я внести какие-либо изменения в этот фрагмент?

    KEY `location_sh` (`dep_name`,`cat_name`,`loc_name`),
    KEY `owner_sh` (`owner`),
    CONSTRAINT `location_sh` FOREIGN KEY (`dep_name`, `cat_name`, `loc_name`) 
    REFERENCES `locations` (`dep_name`, `cat_name`, `loc_name`) 
      ON DELETE CASCADE ON UPDATE CASCADE,
    CONSTRAINT `owner_sh` FOREIGN KEY (`owner`) REFERENCES `users` (`username`) 
      ON DELETE SET NULL ON UPDATE CASCADE
    

Ответы [ 2 ]

3 голосов
/ 09 июня 2011

This:

KEY `location_sh` (`dep_name`,`cat_name`,`loc_name`)

.. определяет индекс покрытия, называемый "location_sh".Я указал «охватывающий индекс», потому что объявление индекса включает в себя более одного столбца.

KEY `owner_sh` (`owner`)

... не использует более одного столбца, поэтому это просто index .KEY - это специфический для MySQL синтаксис для индексов - хотя в настоящее время он не охватывается ANSI, каждая база данных реализует индексы и использует аналогичную терминологию (по моде).

Остальные объявления CONSTRAINT:

CONSTRAINT `location_sh` FOREIGN KEY (`dep_name`, `cat_name`, `loc_name`) 
REFERENCES `locations` (`dep_name`, `cat_name`, `loc_name`) 
  ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `owner_sh` FOREIGN KEY (`owner`) REFERENCES `users` (`username`) 
  ON DELETE SET NULL ON UPDATE CASCADE

... ограничения внешнего ключа .Они используются для обеспечения ссылочной целостности - определенные столбцы могут иметь только те значения, которые уже существуют в столбцах таблицы, указанных в части REFERENCES оператора.

Относительно ON DELETE ... -Документация гласит:

Действие InnoDB, выполняемое для любой операции UPDATE или DELETE, которая пытается обновить или удалить значение ключа-кандидата в родительской таблице, имеющей несколько совпадающих строк в дочерней таблице, зависит от ссылочнойдействие, указанное с использованием подпунктов ON UPDATE и ON DELETE предложения FOREIGN KEY.Когда пользователь пытается удалить или обновить строку из родительской таблицы, и в дочерней таблице есть одна или несколько совпадающих строк, InnoDB поддерживает пять опций, касающихся действия, которое необходимо предпринять.Если ON DELETE или ON UPDATE не указаны, по умолчанию используется действие RESTRICT.

Какие изменения вы должны внести?

Для нас нет контекста, чтобы сказать, что правильно или неправильно, за исключением синтаксиса (который кажется правильным).Все зависит от ваших данных и бизнес-правил для этих данных.

2 голосов
/ 09 июня 2011

Страница Mysql на этих самых элементах: http://dev.mysql.com/doc/refman/5.1/en/innodb-foreign-key-constraints.html

1) Ключ определяет ключ для поиска в таблице.Ключи индексируются механизмом БД, чтобы обеспечить более быстрые результаты для запросов.

2) Ограничения применяют «правила» для внешних ключей.Это говорит о том, что все эти ключи dep_name, cat_name, loc_name указывают на одноименные столбцы в таблице locations

3) Действия ON DELETE очень хорошо описаны в предоставленной ссылке.

4)Это выглядит хорошо ... хотя трудно сказать, не зная контекста ситуации

...