I want to build up a database where there will be about 400 strings. I want to make the database searchable.
The structure of the database will be like:
Brand | model |additional products | price | search words | (this is 1 string, there will about 400 strings)
There will be between 2 and 50 search words on each string. The search are done by clicking a checkbox and the marked checkboxes words will be searched for in the database.
My question is how is the best way to index all the search words? I’m thinking of 2 ways:
In the field search words
, all searchable words will be displayed like: 1GB RAM, 512GB RAM, ATA, SATA…
and so on for each string. This means that ALL words will be in the same raw on a specific string separated by “,”.
Each search word will have its own row like: | search words 1| search words 2| search words 3 | search 4 words 5|…
.. and so on. In |search words 1|
the word 1GB RAM
will be. In | search words 2|
the word 512GB RAM
will be and so on… This means in a string maybe half the search words row will be filled with a search word.
In option 2 there will be more than 50 rows in the database and all search words in different column (1 in each column for each product). In option 1 there will be 1 row with all words in the same column for each product.
Or is there a better way to do this?
Storing your search terms in never-ending additional columns is counter-intuitive to database "normalization". Storing everything in one column is usually the last option since it is much easier to break down search terms if you use multiple columns.
Make a separate table and join your original table to this table. Your structure would look something like this:
Original table
New table
I added a primary key column to your original table. This will make the JOIN easier. Use the following statement to join the two tables:
SELECT original_table.*
FROM original_table AS ABB2
JOIN new_table AS ABB1 ON ABB1.product_id = ABB2.id
WHERE search_word = "your search term"
The "search_word" column in the new table are the terms associated with each of your entries in your original table.
You can add "%" wildcards to your WHERE statement if you'd want fuzzy (return all results that contain your search term) search enabled.