Mysql
 sql >> база данни >  >> RDS >> Mysql

Съхранение на излишни външни ключове, за да се избегнат присъединявания

Съединенията са начинът, по който работят релационните СУБД. Научете за и използвайте нормализирането.

Ако това е вярно за всяка услуга, вашата база данни е обект на ограничение. Това е, че (select service from Service_has_transaction join Transaction_has_wallet) е подмножество от (select service from Service_has_transaction join Transaction_has_wallet join Wallet_has_bonus) .

Повечето SQL СУБД не ви позволяват да изразите това ограничение декларативно и не знаят как да оптимизирате прилагането му. Въпреки това има SQL идиом, който можем да използваме, за да го изразим и наложим декларативно. (Познавайки дефинициите на вашата таблица:) Първо добавете bonus колона към Transaction_has_wallet и външен ключ от Transaction_has_wallet (wallet, bonus) до Wallet_has_bonus . След това добавете колони портфейл и бонус към Service_has_transaction и външен ключ от Service_has_transaction (transaction, wallet, bonus) към Transaction . Това добавя излишни колони, но въпреки това ограничава базата данни до валидни състояния, тъй като ограниченията на външния ключ не позволяват на излишните стойности да бъдат грешни. (Надяваме се, че това е мотивиращ пример за изучаване на изразяване на произволни ограничения чрез тригери.)




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. UTF-8 MySQL и Charset

  2. Как да извлека данни от база данни, за да ги покажа в csv формат на уеб страница?

  3. MySql cursors.execute() само с един параметър:Защо низът е нарязан в списък?

  4. Неправилна стойност на низа при опит за вмъкване на UTF-8 в MySQL чрез JDBC?

  5. Плъгини за интеграция на Eclipse/MySQL?