2011-12-08 19 views
7

tworzę proste wyszukiwanie produktów webapp gdzie użytkownik może filtrować produkty zakupy on zakładkami na podstawie ceny, bezpłatna dostawa, nazwisko, sklep itpjak stworzyć schemat bazy danych do przechowywania produktów filtry wyszukiwania

Szukam zastosowania funkcji filtrów wyszukiwania niestandardowego, w których użytkownik może utworzyć filtr wyszukiwania, a następnie zapisać go do późniejszego wykorzystania. Filtry wyszukiwania są czymś tak:

  • cena jest poniżej 1000 $
  • cena wynosi $ 1000 do 2000 $
  • bez opłat dostępny/niedostępny
  • sklep jest amazon/Walmart/...
  • nazwa zawiera "Boże Narodzenie"

Może ktoś mi pomysł schematu bazy danych do przechowywania takich filtrów wyszukiwania w bazie danych. Należy przechowywać klauzul mysql w bazie "gdzie cena < 1000", "gdzie free_delivery = 1" ... albo może tworzyć pola tak ..

  • pole (cena, nazwa, free_delivery)
  • wartość (1000)
  • wyrażenie (poniżej, powyżej)
  • między (1000)
  • oraz (2000)
  • zawiera

Odpowiedz

1

Nie należy przechowywać klauzul SQL w bazie danych. Polecam zrobić coś takiego:

CREATE TABLE store (
id INT NOT NULL PRIMARY KEY, 
name VARCHAR(100) 
); 

Przykładowe wiersze: (1 "Amazon"), (2 "Walmart"), ...

CREATE TABLE search_filter (
id INT NOT NULL PRIMARY KEY, 
user_id INT NOT NULL, 
name VARCHAR(100), 
price_min INT, 
price_max INT, 
store_id INT, 
has_free_delivery BOOLEAN, 
keyword VARCHAR(50), 
FOREIGN KEY (user_id) REFERENCES user(id), 
FOREIGN KEY (store_id) REFERENCES store(id) 
); 

Przykład rząd: (1 43, "amazon christmas", 1000, 1999, 1, True, "christmas")

Powyższy przykład zapisałby filtr o nazwie "amazon christmas" powiązany z użytkownikiem 43. Określa, że ​​użytkownik chce szukać produkty o cenie od 1000 USD do 1999 USD w Walmart, z bezpłatną dostawą i zawierające słowo kluczowe "Boże Narodzenie".

+0

Wystarczy napisać o tej odpowiedzi, aby to zadziałało, dlatego musisz podać tabele jako INNODB zamiast domyślnej wartości MyISAM. Jak widać na stronie http://dev.mysql.com/doc/refman/5.6/en/ansi-diff-foreign-keys.html, stwierdzają oni: "Na późniejszym etapie ograniczenia dotyczące klucza obcego zostaną zaimplementowane dla tabel MyISAM jako dobrze." ten sam tekst był obecny dla wszystkich wersji przez ostatnie 8 lat. Również w przypadku korzystania z INNODB nie można zagwarantować, że klucz obcy będzie również przestrzegany. MySQL jest znany z tego, że czasami ignoruje klucze obce. – Peter

+0

Dzięki Peter, nie byłem świadom tego ograniczenia. – andebauchery

Powiązane problemy