我是数据库规划和编程的新手。
我需要为房地产经纪人开发桌面应用程序。 它需要至少有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)。
预先计划。从长远来看,同一地址将有多个条目(相同的地址,相同的邮政编码)。
只是与这么多新信息混淆并试图提前计划。 非常感谢您的参与。
答案 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_table
。image_id
,它是您image_table
表的FK,引用列image_table
。id
。
如果您在FK上正确设置了约束,则可以防止自己意外地在id
表中输入不存在的images_table
图像。如果您对引用的(images_table
)表中的数据执行某些操作,您还可以使用约束来自动管理引用。例如,如果从images_table
删除图像,则可以在property_table
内自动将对该图像的所有引用设置为NULL(空值)。
答案 2 :(得分:0)
外键是约束,JOIN是查询方法。虽然JOIN经常(但并不总是)在外键的“顶部”完成,但它们并不是一回事。
image_table
和property_table
之间那样),请使用外键。始终在数据库级别强制执行数据完整性,即使您也在UI 1 1 这会在出现错误的情况下保护您的数据,尤其是代码中几乎肯定存在的细微并发错误,除非您非常谨慎地使用锁定。此外,如果您必须创建另一个访问同一数据库的应用程序,它将受益于已存在的完整性约束。如果你曾经通过DBMS提供的通用UI来临时修改数据,那么“破坏”数据会更加困难。