map_coordinates:
item | item_id | latitude | longitude
这个想法是这个表包含不同项目的坐标列表,它们可能是一个注释,一个分类帖子,一个事件等。我希望能够设置它,所以我有一个结果集如下:
item | name of item | latitude | longitude
考虑所有事件,分类和注释都在单独的表中。我怎么能设置它,因为我需要显示谷歌地图上的所有坐标以及元素的名称,即如果它是分类广告 - 广告的标题,事件的标题等等而不必做了很多sql查询。
我有代码在地图上显示 - 我只需要抓住细节。或者我必须在这里重做我的数据库设计吗?
========================
修改
实际上我的数据库中有很多表,例如注释,分类和事件等。关键是maps_coordinates表中的一个项指的是元素的类型,即它是一个音符或事件,而teh item_id是该事件的实际ID。我不想在这里使用连接,因为这会涉及很多表。此外,我只需要获取标题中的基本信息,以帮助填充地图,因此当我将鼠标悬停在单个标记上时,我不必进行ajax调用,只是为了在标记处显示元素的基本信息。 / p>
其他表有自己的定义,但是它们都有一个类似的标题字段,我想在与坐标相同的元组中显示这个标题字段。或者我应该在这里对我的表进行非规范化,并为map_coordinates提供一个重复的标题条目?
答案 0 :(得分:1)
您可以通过创建一个组合来自单独表格中的每个公共元素的视图来完成此操作。在您的示例说明中,分类广告发布,事件等
CREATE VIEW viewCommonElements
AS
SELECT
100 as DataType,
NoteId as ElementId,
NoteName as ElementName
FROM Notes
UNION
SELECT
200 as DataType,
Classified_Post_Id as ElementId,
Post_Description as ElementName
FROM Classified_Posts
UNION
SELECT
300 as DataType,
EventId as ElementId,
EventName as ElementName
FROM Events
只需为您希望包含在公共元素中的每个表添加一个新的DataType。您现在可以设置一个连接到viewCommonElements视图的查询。
如果稍后创建新元素,只需修改视图并添加联合选择块,为其提供唯一数据类型。您可以使用DataType来区分不同的公共元素。
我已经多次使用这种方法来协调不相似但常见的数据。
答案 1 :(得分:0)
是的,基本上你的数据库设计不好。试试这样:
map_coordinates:
item | item_id | item_type | item_name | latitude | longitude
并使用item_types的查找表。
答案 2 :(得分:0)
你说“这个想法是这个表包含不同项目的坐标列表,它们可以是注释,分类帖子,事件等”。这是否意味着不同的项目有不同的表格?如果是这样,具有所有查找信息的非规范化表可能是您最好的选择。如果没有,这只是加入两个表的问题。