Php Sphinx搜索的数据库定义 背景
我正在创建一个MySQL数据库来存储课程等项目,其中单个课程可能有许多属性。例如: 单个课程可能具有以下任何或所有属性:Php Sphinx搜索的数据库定义 背景,php,mysql,sql,search,sphinx,Php,Mysql,Sql,Search,Sphinx,我正在创建一个MySQL数据库来存储课程等项目,其中单个课程可能有许多属性。例如: 单个课程可能具有以下任何或所有属性: 标题(varchar) 次要标题(varchar) 说明(文本) 日期 时间 具体位置(varchar;如白厅7号房间) 一般位置(瓦尔查尔;如内华达州拉斯维加斯) 位置坐标(浮动;如横向、纵向) 等等 数据库设置如下: 存储特定课程信息的表: 课程表: 课程ID(每个课程的主键唯一ID) 创建者ID(创建者的唯一ID) 创建日期(课程创建的日期时间) 修改日期(其中这
- 标题(varchar)
- 次要标题(varchar)
- 说明(文本)
- 日期
- 时间
- 具体位置(varchar;如白厅7号房间)
- 一般位置(瓦尔查尔;如内华达州拉斯维加斯)
- 位置坐标(浮动;如横向、纵向)
- 等等
- 课程ID(每个课程的主键唯一ID)
- 创建者ID(创建者的唯一ID)
- 创建日期(课程创建的日期时间)
- 修改日期(其中这是课程修改的最新时间戳)
- 属性\u ID(每个属性的唯一ID)
- 课程ID(对特定课程属性的引用用于)
- 属性(定义属性的varchar;例如“title”)
- 值(包含指定属性值的文本;例如“我的课程标题”)
- 头衔
- 日期
- 位置(字符串)
- 位置(地理位置-纬度/长)
$cl->setFieldWeights( array('title'=>1000, 'description'=>500) );
这会导致标题
列的权重高于说明
列(如果结构为@X-Zero建议的)。我的问题更直接地指向如何将上述逻辑应用于当前的表定义
数据库结构、视图和效率
利用我对视图的入门知识
,我想我可以创建一些东西,为每个课程显示一行,其中每个属性都是自己的列。我不知道如何做到这一点,或者这是否可能
我对数据库结构不是最有信心的,但我之所以按上述方式设置表,是因为在很多情况下,并非每门课程都能完成所有字段,而且我一直在努力提高效率[是的,似乎我失败了]
我认为使用我当前的结构,每个属性都将包含一个值,因此不会在表中浪费空间。或者,如果我有一个具有大量潜在属性的表,我会认为这会浪费空间。如果我错了,我很高兴知道为什么我的理解是错误的。让我先说一句,我从来没有听说过斯芬克斯,也没有(显然)使用过它。然而,从数据库的角度来看 像这样做多域专栏是一个非常糟糕的想法(我会找到你并杀了你)。首先,不可能有意义地索引或排序,周期。你还必须祈祷你不会得到一个带有文本数据的
latitude
属性(因为这只能通过编程来强化,所以我要告诉你这会发生)-这样做会导致所有基于距离的公式崩溃。说到位置,如果某人存储的是纬度
,而没有经度
(请注意,这是可能的,无论您存储的是单个地理位置
属性还是一对)
您的最佳选择是执行以下操作:
属性。这些属于课程
表(…大部分)
location
(虽然这可能是必需的…),它将包含纬度/经度、城市、州、地址、房间等。允许列为null
(在集合中-添加约束,以便用户不能只添加经度
,而不添加纬度
)