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

Какво е вашето мнение относно използването на текстови идентификатори в колоните на таблицата, когато подхождате към базата данни с нормализиране и мащабируемост?

Първият е по-нормализиран, макар и леко непълен. Има няколко подхода, които можете да предприемете, като най-простият (и строго погледнато, най-„правилният“) ще се нуждае от две таблици, с очевидното FK ограничение.

commentid ---- subjectid ----- idType
--------------------------------------
1                22            post
2                26            photo
3                84            reply
4                36            post
5                22            status

idType
------
post
photo
reply
status

Ако желаете, можете да използвате char(1) или подобен, за да намалите влиянието на varchar върху дължината на ключа/индекса или да улесните използването с ORM, ако планирате да използвате такъв. NULL винаги са проблем и ако започнете да ги виждате във вашия дизайн, ще бъдете по-добре, ако можете да измислите удобен начин да ги премахнете.

Вторият подход е този, който предпочитам, когато се занимавам с повече от 100 милиона реда:

commentid ---- subjectid
------------------------
1                22    
2                26     
3                84     
4                36     
5                22     

postIds ---- subjectid
----------------------
1                22   
4                36   

photoIds ---- subjectid
-----------------------
2                26    

replyIds ---- subjectid
-----------------------
3                84    

statusIds ---- subjectid
------------------------
5                22     

Разбира се, има и (леко денормализиран) хибриден подход, който използвам широко с големи набори от данни, тъй като те са склонни да бъдат мръсни. Просто предоставете таблиците за специализация за предварително дефинираните idTypes, но запазете колона adhoc idType в таблицата commentId.

Обърнете внимание, че дори хибридният подход изисква само 2 пъти пространството на денормализираната таблица; и осигурява тривиално ограничение на заявката чрез idType. Ограничението за интегритет обаче не е директно, тъй като е FK ограничение за производно UNION на типовите таблици. Моят общ подход е да използвам тригер или върху хибридната таблица, или еквивалентен изглед с възможност за актуализиране, за да разпространявам актуализации към правилната таблица с подтипове.

Работят както простият подход, така и по-сложният подтипов таблицен подход; все пак, за повечето цели се прилага KISS, така че просто подозирам, че вероятно трябва просто да въведете таблица ID_TYPES, съответния FK, и да приключите с това.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да генерирате динамично MYSQL UPDATE оператор въз основа на дефинирани променливи от HTML FORM

  2. Как да сортирам и добавя моя запис в базата данни?

  3. PHP Javascript? Направете нещо, когато потребителят затвори страница или браузър

  4. Надстройте MySQL до MariaDB 10 (Част 2 – Надстройте MariaDB/MySQL 5.5 до версия 10.0)

  5. Името на индекса на MySQL и името на външния ключ трябва да са различни за различните таблици?