Rzadko nie zgadzam się z użytkownikami posiadającymi wiedzę, ale w tym przypadku nie mogę nic na to poradzić. Moim zdaniem nazywanie korzystania z nie-podstawowych tabel bazy danych złą praktyką per se jest po prostu błędne.
Wybór, czy przejść z tabelami podstawowymi, czy dodać własne, zależy od kilku czynników.
Czas wykonania zapytania zależy od wielkości tabeli. Dlatego jeśli planujesz przechowywanie znacznych ilości danych, oddzielne tabele odpowiadające tylko temu rodzajowi określonego zestawu danych będą nieuchronnie bardziej wydajnym rozwiązaniem.
Jeśli przechowujesz wiele zwykłych postów lub CPT obok tych konkretnych zestawów danych, wp_posts
a także wp_postmeta
możesz szybko rosnąć.
Dla mnie ten wybór ostatecznie zależy od tego, jak „posty” to dane. Czy powinien wspierać autora, komentarze, poprawki, fragmenty itp.? Jeśli tak, skorzystam z CPT i / lub podstawowych funkcji. Jeśli nie, wybiorę osobne tabele ze względu na zużycie zasobów i wydajność.
Gdyby pojęcie Eugene'a było prawidłowe, żadna z dobrze napisanych wtyczek nie dodałaby własnych tabel, co na szczęście nie ma miejsca.
Korzystanie z podstawowych tabel DB DB jest najlepszą praktyką
$wpdb
klasy .wp_options
, i zmuszanie dewelopera wtyczek do uważnego rozważenia rodzaju tworzonych / przechowywanych danych - czy jest to CPT? czy to taksonomia? czy to jest post meta?WordPress umożliwia wtyczkom dodawanie tabel do bazy danych
Jednak w przypadkach, w których potrzebna jest osobna tabela DB, należy użyć metody przewidzianej przez WordPress w celu dodania niestandardowej tabeli do bazy danych WordPress , szczególnie abyś mógł skorzystać z potężnej
$wpdb
klasy. Zwróć uwagę na informacje / zastrzeżenia zawarte w tej liście Kodeksu:Możemy zatem wyciągnąć następujące wnioski:
źródło
$wpdb
(korzystanie z niego w przypadku tabel nie-rdzeniowych zostało zasugerowane w mojej odpowiedzi, nie chciałbym przegapić tej klasy)Nie-podstawowe tabele bazy danych są koniecznością, jeśli Twoje dane są bardziej złożone niż model pocztowy WordPress, będzie ogromny i będzie zawierał wiele meta szczegółów, które będą przeszukiwane.
Format EAV, którego WordPress używa do tworzenia post meta, nie nadaje się dobrze do wyszukiwania według wielu kryteriów.
Jeśli podzielisz swoją metę na wiele wpisów, będziesz mieć wiele wpisów na post w tabeli meta postów, a wyszukiwanie dowolnego postu przez meta będzie znacznie wolniejsze.
Jeśli przechowujesz wszystkie meta zserializowane w tablicy i masz je tylko jako jeden wpis w meta post, tym razem będziesz zmuszony do wyszukiwania tylko tekstu wewnątrz tej meta i nie będziesz mógł używać operatorów porównania bezpośrednio w zapytaniu sql.
Nie jest to duży problem, jeśli Twoja wtyczka nie będzie miała tysięcy wpisów i powiązanych meta.
Ale poważny problem, jeśli Twoja wtyczka zrobi coś dużego.
Twoja sytuacja, nazwa pliku jako niezależny wpis i 3 wpisy metadanych dołączone do tego wpisu nie wydają się tak duże. Możesz do tego użyć tabeli postów i meta-tabel Wordpress.
ALE, jeśli ludzie będą często wyszukiwać te 3 meta, zwłaszcza w połączeniu, zalecam utworzenie osobnych tabel.
W tym formacie tylko jedna tabela z jednym wpisem, która zawiera również wszystkie metas, byłaby odpowiednia i szybko sprawdzałaby błyskawicę.
Nawiasem mówiąc, jeśli korzystasz z tabel WordPress, a także korzystasz z buforowania zapytań, użytkownik wyszukujący twoje dane zostanie z czasem zbuforowany i spowoduje mniejsze obciążenie. Ale nie byłoby to tak rozsądne, jak robienie oddzielnych tabel.
źródło
Możesz przesłać swoje pliki do biblioteki multimediów. Każdy element w bibliotece multimediów jest przechowywany w
wp_posts
tabeli. Oznacza to, że każdy plik może zawierać metadane. Zawp_postmeta
pomocą interfejsu API metadanych możesz zapisać tyle informacji, ile potrzebujesz dla każdego pliku w tabeli .Tak, złą praktyką jest tworzenie własnych tabel, jeśli zamiast tego można użyć podstawowych funkcji.
źródło
źródło