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

Django Postgres ArrayField срещу връзка "един към много".

Ако използвате поле за масив

  • Размерът на всеки ред във вашата DB ще бъде малко по-голям, така че Postgres ще използва много повече toast таблици (http://www.postgresql.org/docs/9.5/static/storage-toast.html )
  • Всеки път, когато получите реда, освен ако изрично не използвате defer (https://docs.djangoproject.com/en/1.9 /ref/models/querysets/#defer ) полето или по друг начин го изключете от заявката чрез only , или values или нещо подобно, вие плащате разходите за зареждане на всички тези стойности всеки път, когато итерирате през този ред. Ако това е, от което се нуждаете, тогава така да бъде.
  • Филтрирането въз основа на стойности в този масив, макар и възможно, няма да е толкова хубаво и Django ORM не го прави толкова очевидно, колкото при M2M таблиците.

Ако използвате M2M

  • Можете да филтрирате по-лесно тези свързани стойности
  • Тези полета са отложени по подразбиране, можете да използвате prefetch_related ако имате нужда от тях и след това се поинтересувайте, ако искате да се зареди само подмножество от тези стойности
  • Общото място за съхранение в DB ще бъде малко по-високо с M2M поради ключове и допълнителни полета за идентификатор
  • Цената на присъединяванията в този случай е напълно незначителна поради ключовете.

Лично аз бих казал да изберете M2M таблиците, но не знам конкретното ви приложение. Ако ще работите с огромно количество данни, вероятно си струва да вземете представителен набор от данни и да тествате двата метода с него.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Агрегатна функция на Postgres за изчисляване на векторна средна скорост на вятъра (векторна величина) и посока на вятъра (векторна посока)

  2. Групиране по определена колона в PostgreSQL

  3. актуализиране на таблицата след определено време в postgreSql

  4. Използване на npgsql 12 и ef 6 заедно - някой успял ли е с него?

  5. Sequelize как да използвам асоциативна таблица?