0

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

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

property_table - id、许可证编号、地址、城市、卧室、浴室、洗衣房等。

image_table - id、picture_name、路径、大小(图像相关数据库)

(它可能需要一个 agent_table,但让我们保持简单)。

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

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

问题:我应该使用外键吗?或者只是加入我的搜索?很多关于这个的问题,比如这里,关于连接的好教程等等等等。看来我必须使用连接查询。外键呢?

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

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

只是对这么多新信息感到困惑,并试图提前计划。非常感谢您的参与。

4

3 回答 3

0

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

例如,在您的场景中,您有property_table一张表格,该表格将有多个地址,其中一些地址可能使用相同的图像。在这种情况下,您可能希望在您的property_table, 也许property_table. image_id那是您的表的一个 FK image_table,引用该列image_tableid.

如果您在 FK 上正确设置约束,您将防止自己意外输入表中不存在id的图像。images_table您还可以使用约束自动为您管理引用,以防您对引用 ( images_table) 表中的数据进行处理。例如,如果您从中删除图像,images_table您可以在property_table.

于 2013-09-06T18:17:03.207 回答
0

Foreign key is a constraint, JOIN is a query method. While it is true that JOINs are often (but not always) done "on top" of foreign keys, they are not the same thing.

  • So, if you need to ensure there are no "dangling pointers" (as you do between image_table and property_table), use foreign key. Always enforce the data integrity at the database level, even if you also enforce it in the UI1
  • If you need to get the related data from two (or more) tables using a single query, use JOIN.

1 Which will protect your data in case of bugs, especially subtle concurrency bugs that almost certainly exist in your code unless you employed locking very carefully. Furthermore, if you ever have to create another application that accesses the same database, it will benefit from integrity constraints that are already there. And if you ever modify the data ad-hoc through the generic UI provided by your DBMS, it will be more difficult to "break" the data.

于 2013-09-07T11:39:53.327 回答
0

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

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

Select * from property_table PropTable Inner Join Image_Table imgTable on PropTable.Property_table_id = imgTable.Property_table_id

于 2013-09-06T18:09:20.917 回答