加入,外键和其他关系数据库规划

时间:2013-09-06 18:04:15

标签: mysql database database-design data-binding

我是数据库规划和编程的新手。

我需要为房地产经纪人开发桌面应用程序。 它需要至少有2个表:

property_table - 身份证,执照号码,地址,城市,卧室,浴室,洗衣房等等。

image_table - id,picture_name,路径,尺寸(与图像相关的数据库)

(它可能需要一个agent_table,但是让事情变得简单)。

Property_table 每个ID只有一个地址。具有相同地址的新条目必须生成新ID(转售同一房屋的人)。

但是 image_table 可能有10个条目用于相同的属性地址。 我使用PHP Session在表之间带来地址,城市,邮政编码以避免用户出错(因此 image_table 实际上是id,picture_name,路径,大小,地址,城市,邮政编码,用户名)。

问题:我应该使用外键吗?或者只是加入我的搜索?关于此问题的许多问题,例如here,关于加入的tutorials好,etc.etc。看来我必须使用连接查询。外键怎么样?

为什么:我需要显示来自不同BD的列表。地址(表-1)有几张图片(表-2)。

预先计划。从长远来看,同一地址将有多个条目(相同的地址,相同的邮政编码)。

只是与这么多新信息混淆并试图提前计划。 非常感谢您的参与。

3 个答案:

答案 0 :(得分:0)

property_table - Property_table_id(PK),许可证#,地址,城市,卧室,浴室,洗衣房等等。

image_table - image_table_id(PK),Property_table_id(FK),picture_name,路径,大小(图像相关数据库)

从property_table PropTable中选择* 在PropTable.Property_table_id = imgTable.Property_table_id

上内部加入Image_Table imgTable

答案 1 :(得分:0)

一般来说,我会说'是'使用外键(FK)。我只是假设你使用PHP,你可能正在使用许多流行的免费或开源数据库之一,如MySQL用于你的关系数据库后端。拥有FK将允许您设置数据约束,以防止您犯错可能导致程序错误。

例如,在您的方案中,您拥有property_table表,该表将具有多个地址,其中一些地址可能使用相同的图像。在这种情况下,您需要property_table中的一列,可能是property_tableimage_id,它是您image_table表的FK,引用列image_tableid

如果您在FK上正确设置了约束,则可以防止自己意外地在id表中输入不存在的images_table图像。如果您对引用的(images_table)表中的数据执行某些操作,您还可以使用约束来自动管理引用。例如,如果从images_table删除图像,则可以在property_table内自动将对该图像的所有引用设置为NULL(空值)。

答案 2 :(得分:0)

外键是约束,JOIN是查询方法。虽然JOIN经常(但并不总是)在外键的“顶部”完成,但它们并不是一回事。

  • 因此,如果您需要确保没有“悬空指针”(就像在image_tableproperty_table之间那样),请使用外键。始终在数据库级别强制执行数据完整性,即使您也在UI 1
  • 中强制实施数据完整性
  • 如果您需要使用单个查询从两个(或更多)表中获取相关数据,请使用JOIN。

1 这会在出现错误的情况下保护您的数据,尤其是代码中几乎肯定存在的细微并发错误,除非您非常谨慎地使用锁定。此外,如果您必须创建另一个访问同一数据库的应用程序,它将受益于已存在的完整性约束。如果你曾经通过DBMS提供的通用UI来临时修改数据,那么“破坏”数据会更加困难。

相关问题