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

Въпрос за най-добра практика за MySQL:подреждане по идентификатор или дата?

Ако има има шанс да добавите две на една и съща дата, вероятно ще ви трябва:

SELECT balance FROM my_table ORDER BY date_added DESC,id DESC LIMIT 1;

(обърнете внимание на клаузата „низходящ“ и в двете полета).

Въпреки това ще трябва да вземете предвид какво искате да се случи, когато някой добави коригиращ запис от 2 февруари, на който е дадена дата 31 януари, за да се гарантира, че месец януари е завършен. Той ще има по-голям идентификационен номер от тези, направени на 1 февруари.

По принцип счетоводните системи работят само на датата. Може би, ако ни кажете защо редът е важен, можем да направим други предложения.

В отговор на вашия коментар:

Бих дал няколко съвета - това е всичко, за което се сетих веднага, обикновено бълвам много повече "съвети" с още по-малко насърчение :-) Първите два, повече свързани с база данни, отколкото със счетоводство, са:

Първо, направете всичко в трета нормална форма и се върнете само ако и когато имате проблеми с производителността. Това ще ви спести много безпокойство с дублиращи се данни, които може да не се справят. Дори и да се върнете, използвайте тригери и други възможности на СУБД, за да сте сигурни, че данните няма да излязат от строя.

Например, ако искате да ускорите вашите търсения в колона за фамилно име, можете да създадете колона upper_last_name (индексирана), след което да я използвате, за да намерите записи, съответстващи на вашата дума за търсене с главни букви. Това почти винаги ще бъде по-бързо от функцията за ред upper(last_name) . Можете да използвате задействане за вмъкване/актуализация, за да гарантирате, че upper_last_name винаги е зададено правилно и това води до разходи само при промяна на името, а не всеки път, когато търсите.

Второ, не дублирайте данни дори в таблици (като текущата ви схема), освен ако не можете да използвате същите тригери от типа на тригера, за да гарантирате, че данните няма да излязат извън стъпката. Какво ще направи вашият клиент, когато му изпратите фактура, където крайният баланс не съвпада с началния баланс плюс покупките? Това няма да накара компанията ви да изглежда много професионално :-)

На трето място (и това е по-свързано със счетоводството), като цяло не е нужно да се притеснявате за броя на транзакциите, когато изчислявате салда в движение. Това е така, защото счетоводните системи обикновено имат функция за преобръщане в края на годината, която нулира началните салда.

Така че обикновено никога не се налага да обработвате данни на стойност повече от една година наведнъж, което, освен ако не сте правителството на САЩ или Microsoft, не е толкова обременително.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Сравняване на решения за репликация от Oracle и MySQL

  2. Как да актуализирам самостоятелно PHP+MySQL CMS?

  3. Ляво присъединяване, използвайки критерии за хибернация

  4. Добра идея ли е да използвате MySQL и Neo4j заедно?

  5. Как да инсталирам MySQL и пакета MySQL на Python на OS X Leopard? Или как да науча как да бъда уеб разработчик с OS X?