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

Как да структурираме схема на база данни, за да позволим случай 1 на милион?

Изглежда, че се интересувате от:

-- a and b are related by the association of interest
Foo(a, b)

-- foo(a, b) but not foo(a2, b) for some a2 <> a
Boring(a, b)
unique(b)
FK (a, b) references Foo

-- foo(a, b) and foo(a2, b) for some a2 <> a
Rare(a, b)
FK (a, b) references foo

Ако искате заявки за да бъдете необременени, просто дефинирайте Foo. Можете да го потърсите за редки.

Rare = select * from Foo f join Foo f2
    where f.a <> f2.a and f.b = f2.b

Всеки друг дизайн страда от сложност на актуализирането при поддържане на базата данни последователна.

Имате някаква неясна загриженост, че Rare е много по-малък от Foo. Но какво е вашето изискване дали само n от един милион Foo записи са много:много, според които бихте избрали друг дизайн?

Следващото ниво на сложност е да имате Foo и Rare. Актуализациите трябва да поддържат горното уравнение вярно.

Изглежда изключително малко вероятно да има полза от намаляването на излишъка от 2 или 3 на милион на Foo + Rare, като имате само Boring + Rare и реконструирате Foo от тях. Но може да е от полза да се дефинира уникален индекс (b) за Boring, който ще поддържа, че b в него има само едно a. Когато имате нужда от Foo:

Foo = select * from Boring union select * from Rare

Но вашите актуализации трябва да поддържат това

not exists (select * from Boring b join Rare r where b.b = r.b)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Разделете низ на ред

  2. Изберете потребители от една таблица само ако не и от друга

  3. Форматирайте резултата от mysql заявката в желания формат

  4. GROUP BY след ORDER BY

  5. Мистериозна MySQL грешка близо до '' на ред 1