2013-12-04 4 views
0

Хорошо, это, вероятно, вопрос новичков, но я не могу понять, как лучше всего это записать в поисках, поэтому я просто спрашиваю. Какой вариант ниже эффективнее и почему. Столбец, который изменяется, является столбцом, который будет использоваться в качестве параметра поиска, и я буду индексировать его.Поиск/индексирование по строкам или целым числом

Вариант А, использовать CategoryName в таблице Transactions:

Table Name: Categories 
+--------------+ 
| categoryName | 
+--------------+ 
| Gas   | 
+--------------+ 
| Coffee  | 
+--------------+ 
| Restaurants | 
+--------------+ 

Table Name: Transactions 
+--------+--------------+-------------+---------+----------+--------+ 
| userID | categoryName | description | date | budgeted | actual | 
+--------+--------------+-------------+---------+----------+--------+ 
| 0  | Gas   | blurb  | 12-1-13 | 5.00  | 5.00 | 
+--------+--------------+-------------+---------+----------+--------+ 
| 0  | Coffee  | blurb  | 12-1-13 | 5.00  | 5.00 | 
+--------+--------------+-------------+---------+----------+--------+ 
| 0  | Restaurant | blurb  | 12-1-13 | 5.00  | 5.00 | 
+--------+--------------+-------------+---------+----------+--------+ 
| 0  | Restaurant | blurb  | 12-1-13 | 5.00  | 5.00 | 
+--------+--------------+-------------+---------+----------+--------+ 
| 0  | Restaurant | blurb  | 12-1-13 | 5.00  | 5.00 | 
+--------+--------------+-------------+---------+----------+--------+ 
| 1  | Gas   | blurb  | 12-1-13 | 5.00  | 5.00 | 
+--------+--------------+-------------+---------+----------+--------+ 
| 1  | Coffee  | blurb  | 12-1-13 | 5.00  | 5.00 | 
+--------+--------------+-------------+---------+----------+--------+ 
| 1  | Restaurant | blurb  | 12-1-13 | 5.00  | 5.00 | 
+--------+--------------+-------------+---------+----------+--------+ 
| 2  | Coffee  | blurb  | 12-1-13 | 5.00  | 5.00 | 
+--------+--------------+-------------+---------+----------+--------+ 
| 2  | Coffee  | blurb  | 12-1-13 | 5.00  | 5.00 | 
+--------+--------------+-------------+---------+----------+--------+ 

Вариант B, назначить CategoryId каждому CategoryName и использовать CategoryId в таблице Transactions

Table Name: Categories 
+-----------+--------------+ 
|categoryID | categoryName | 
+-----------+--------------+ 
| 1   | Gas   | 
+-----------+--------------+ 
| 2   | Coffee  | 
+-----------+--------------+ 
| 3   | Restaurants | 
+-----------+--------------+ 

Table Name: Transactions 
+--------+------------+-------------+---------+----------+--------+ 
| userID | categoryID | description | date | budgeted | actual | 
+--------+------------+-------------+---------+----------+--------+ 
| 0  | 1   | blurb  | 12-1-13 | 5.00  | 5.00 | 
+--------+------------+-------------+---------+----------+--------+ 
| 0  | 2   | blurb  | 12-1-13 | 5.00  | 5.00 | 
+--------+------------+-------------+---------+----------+--------+ 
| 0  | 3   | blurb  | 12-1-13 | 5.00  | 5.00 | 
+--------+------------+-------------+---------+----------+--------+ 
| 0  | 3   | blurb  | 12-1-13 | 5.00  | 5.00 | 
+--------+------------+-------------+---------+----------+--------+ 
| 0  | 3   | blurb  | 12-1-13 | 5.00  | 5.00 | 
+--------+------------+-------------+---------+----------+--------+ 
| 1  | 1   | blurb  | 12-1-13 | 5.00  | 5.00 | 
+--------+------------+-------------+---------+----------+--------+ 
| 1  | 2   | blurb  | 12-1-13 | 5.00  | 5.00 | 
+--------+------------+-------------+---------+----------+--------+ 
| 1  | 3   | blurb  | 12-1-13 | 5.00  | 5.00 | 
+--------+------------+-------------+---------+----------+--------+ 
| 2  | 2   | blurb  | 12-1-13 | 5.00  | 5.00 | 
+--------+------------+-------------+---------+----------+--------+ 
| 2  | 2   | blurb  | 12-1-13 | 5.00  | 5.00 | 
+--------+------------+-------------+---------+----------+--------+ 

ответ

1

Вариант B является ответ. Представьте, что произойдет, если вам придется изменить одно из значений. Gas будет Fuel. В варианте А другая таблица будет иметь кучу столбцов с Gas, что было бы бессмысленно.

Кроме того, более эффективно иметь ключ на целых числах, чем varchar.

Смежные вопросы