有没有工具/软件来帮助我建立一个好的数据库?

时间:2010-01-19 11:49:07

标签: php sql mysql database indexing

我是数据库新手。我有一个带有MySQL db的分类广告网站,我很快就要使用SOLR来索引它们了。然后,每当查询完成时,SOLR将返回ID:s并且我将这些ID:s匹配到MySQL数据库并获取要显示的广告。

无论如何,我在制作数据库时遇到了麻烦。

用户可以从下拉列表中选择要搜索的类别。让我们说他们选择CARS。然后显示一个div,其中包含“YEAR,FUEL,GEARBOX,PRICE”的下拉列表。然后他们也可以选择LOCATION。如果他们愿意,他们也可以键入一个查询字符串。所有都是可选的。

我该如何设置?

例如,我现在有以下的CARS,我必须为摩托车,卡车,踏板车制作字段/表格......但到目前为止,我只有CARS。 你会如何进行结构和设计? 我正在考虑为每个类别(TRUCKS,MC,HOUSES等)做其中一个。

抱歉,但我无法让标签在这里工作,任何人都可以编辑它,所以它看起来“更具可读性”!

Fält            Typ         Null    Standard <br>

id          int(7)          Nej 
ad_id           varchar(62) Nej 
area            varchar(40) Nej 
area_community  varchar(50) Nej 
price           int(9)          Nej 
year            int(4)          Nej 
mileage         int(6)          Nej 
gearbox         varchar(12) Nej 
fuel            varchar(12) Nej 
insert_date timestamp   Nej CURRENT_TIMESTAMP
poster_name varchar(40) Nej 
poster_email    varchar(50) Nej 
poster_tel  varchar(20) Nej 
poster_password varchar(15) Nej     
headline    varchar(40) Nej 
description text            Nej 
salebuy         varchar(7)  Nej 
total_pics  int(2)          Nej 
changeable  int(1)          Nej 
hide_tel    int(1)          Nej 
ad_category varchar(60) Nej 

谢谢,如果您需要更多输入,请告诉我,我会更新此问题。

2 个答案:

答案 0 :(得分:0)

我建议您创建以下内容:

1. Category table
CategoryID -> Primary key
CatName    -> truck, location, small ad etc

2. CategoryPropertyPermitted Table
CategoryID -)
PropertyID -) Primary key
PropName   -> year, mileage, colour etc

3. Persons Table
PersonID  -> Primary key
PersonSurname
DateAdded
Etc

4. Ad Table
AdID  -> Primary key
PersonID
CategoryID
Notes
DateAdded
Etc

5. PersonCategoryProperty
ProperytyID -)
CategoryID  -)
AdID        -) Primary key
PropertyDetails -> 1967, red, ford
Etc

答案 1 :(得分:0)

为了帮助您创建和可视化,我会使用mysql workbench

接下来,从Remou的评论开始。他将海报,广告和产品全部分开了。然后考虑人们想要为每个人发布的可能的细节(变速箱等,如你所提到的)。

现在是棘手的部分 - &gt;你想给海报多少控制权?您希望结果集有多好?

如果需要精确的结果集,请为每个元素创建另一个表,并为cars表中的相应项创建每个元素的外键。然后每个项目都有一个允许的条目列表,如果您信任您的用户,他们可以添加新的条目。这意味着每个人都会从相同的选项中进行选择,这将导致更一致的结果(例如,有人可能会说4.5升,有些人可能会说4.5L,因此从下拉列表中选择它会消除术语中的欺骗行为)。这也会使你的发布变得更复杂,但实际上对最终用户来说更容易,因为它主要是下降。

否则,您可以只允许cars表中每个项目的文本,但您的查询结果更有可能缺少结果。

最后,对database normalization进行一些研究,并尝试将所有内容分解成块,正如Remou指出的那样。