【发布时间】:2009-11-11 12:21:34
【问题描述】:
我不知道是否有人有时间标准化我的数据库?
不知道是不是需要归一化,但是我想把每件事都做到完美,不知道是不是已经做好了。
我已经使用 phpMyAdmin 来创建我的数据库...
背景: 我正在制作分类广告网站。一类广告是“汽车”。到目前为止,我只为汽车创建了数据库,我认为从汽车开始可能会很好......
这是一张桌子:(只有一张)
- id (AI) (INT(7))
- area_id (VARCHAR(30))
- area_community (VARCHAR(30))
- 价格(INT(9))
- 年(INT(4))
- 英里 (INT(6))
- 齿轮箱(VARCHAR(12))
- 燃料(VARCHAR(12))
- 插入日期(时间戳)
- 海报名称 (VARCHAR(30))
- poster_email (VARCHAR(30))
- poster_tel (VARCHAR(20))
- poster_password (VARCHAR(15))
- poster_zip (INT(5))
- private_or_company (INT(2))
- 标题 (VARCHAR(60))
- 说明(文本)
- sell_or_buy (INT(2))
- nr_of_pics (INT(2))
如果是这样的话,我会在您每次需要更多输入时更新这篇文章...... 我已经阅读了几篇关于规范化的文章,我了解了这个概念,但真的不知道如何将其付诸实践。
非常感谢!
更新 好的,所以拆分是这里的交易......所以说我已经将海报拆分到一个单独的桌子上。如何将“poster_table”链接到第一个表? 也就是说,如果用户点击一个广告,那么广告就必须显示出来,旁边还有海报名称、日期、区域等……所以必须有一种方法来链接它们,对吗?
【问题讨论】:
-
是的。您只需添加所谓的“外键”。 “posters”表将有一个名为“id”的“integer auto_increment”列,您将其设置为主键。这将使“海报”表中的每一行在此单元格中都有一个唯一值。然后在“汽车”表中,您将有一个字段“poster_id”。在该字段中,您将为要链接到的“海报”表中的行写入“id”单元格的值。
-
当您从“cars”表中选择一行时,您可以查看“poster_id”字段并从“posters”表中选择相应的行。这可以通过使用 JOIN 在单个 SELECT 语句中完成。
-
SELECT 语句,当我查询我的数据库时,你的意思是 php?我现在开始明白了,请解释一下...我得到了 PK 和 FK,但不知道如何从一个表字段指向另一个表字段值...
-
是的,我是指查询时的 PHP。在 PHP 中,您将通过 SELECT、UPDATE、INSERT 和 DELETE 等 SQL 语句完成所有操作。其实,差不多就是这样。不要改变 PHP 的数据库结构 - 你只创建一次表,然后只操作其中的数据。
-
至于指向的东西——那里没有魔法。只需从“posters”表中取出您需要的行,检查其“id”值(当然是在 PHP 中),然后在对“cars”表执行 INSERT 时将其写入“poster_id”字段。