Sql 需要帮助规范化我的数据库吗

Sql 需要帮助规范化我的数据库吗,sql,mysql,Sql,Mysql,我想知道是否有人有时间规范我的数据库 我不知道它是否需要正常化,但我想把每件事都做到完美,我不知道它是否已经好了 我已经使用phpMyAdmin创建了我的数据库 背景: 我正在制作一个分类广告网站。其中一类广告是“汽车”。到目前为止,我只为汽车创建了一个数据库,我认为从汽车开始可能会很好 这是桌子:只有一张桌子 id AI INT7 区域id VARCHAR30 瓦查尔社区30区 国际价格 第四年 英里国际6 变速箱VARCHAR12 燃料瓦查尔12 插入日期时间戳 海报名称:VARCHAR30

我想知道是否有人有时间规范我的数据库

我不知道它是否需要正常化,但我想把每件事都做到完美,我不知道它是否已经好了

我已经使用phpMyAdmin创建了我的数据库

背景: 我正在制作一个分类广告网站。其中一类广告是“汽车”。到目前为止,我只为汽车创建了一个数据库,我认为从汽车开始可能会很好

这是桌子:只有一张桌子

id AI INT7 区域id VARCHAR30 瓦查尔社区30区 国际价格 第四年 英里国际6 变速箱VARCHAR12 燃料瓦查尔12 插入日期时间戳 海报名称:VARCHAR30 海报(电邮)VARCHAR30 海报电话:VARCHAR20 海报15 海报5 私人或国际公司2 标题VARCHAR60 描述文本 出售或购买INT2 图2的编号 我会在每次你需要更多信息的时候更新这篇文章,如果是这样的话。。。 我读了几篇关于规范化的文章,我明白了这个概念,但不知道如何将其付诸实践

非常感谢

更新 好的,所以分开是这里的交易。。。比如说,我把海报分到了一张单独的桌子上。如何将“poster_表”链接到第一个表?
也就是说,如果用户点击了一个广告,那么广告将不得不显示,以及旁边的海报名称、日期、区域等。。。因此,必须有一种方法将它们链接起来,对吗?

最简单的方法是将海报字段放到另一个表中,并保存其id。我想同一个人可能会发布多个广告


除此之外,还有哪些重复?变速箱和燃油也是标准化的候选对象。

有点模糊,但至少您应该有以下表格:

items - corresponding to any item in the classified
users - person either buying or selling
addresses - any address
images - holds an item image
item_features - hold item specific info like engine, model, etc for a car
一些评论:

分割区域,并将海报贴到单独的桌子上

我会使用日期类型,而不是插入日期的时间戳。但这取决于你如何使用它

你也可以将变速箱和燃油分开,因为它们几乎肯定会被大量复制


您的姓名和电子邮件地址宽度也太小。

我建议您找出所有需要的功能,然后开始规划数据库。否则,现在的桌子是好的,只要它只是为汽车。如果您想要其他类型的项目,那么这是不够的,您必须为每种类型的项目创建更多的表,或者进行更多的规范化

补充:再看一眼,你确实需要把海报移到一个单独的表格中,因为他们就像是有密码的用户。除非您希望一个人为每个记录进行新的登录,否则您应该将其放在单独的表中。否则,当一个人更改密码时会发生什么情况?您必须在表中的所有行中更改密码!这是相当尴尬和低效的。其基本思想是——每一条数据只应存储在一个地方。如果要更改单个数据段,必须更新此数据的多个副本,则应将其移出另一个表并生成外键


另一方面,你可能不想让你的用户单独登录?也许他们只是发布广告,为每个广告设置密码,然后使用密码编辑特定的项目?在这种情况下,你不应该把这两张桌子分开。如果您有两个表,其中记录的比例为1:1,如中所示,第一个表中的每一行在第二个表中不多于或不少于一行,则应合并这些表。

如果您查看当前表,则其中至少捆绑了四个概念。我将为以下概念制作单独的表格:

类别 公元 卖家你称之为“海报” 地区 图像 我会用多对多的关系将广告与类别联系起来,用多对一的关系将广告与卖家联系起来,或者用多对多的关系将区域与广告联系起来,或者根据你所追求的设计类型对卖家和区域做同样的事。图像将使用一对多关系链接到广告

祝你好运

好的:

与海报相关的字段10到15放入单独的表中。将名为PosterID的主键添加到该表中,并将字段10到15替换为字段PosterID作为外键返回到poster表中

同样地,对于字段2和3,假设AeaaLe共同体是对AeaaIID的描述。此外,考虑区域是否是海报或单个广告的属性。< /P> 字段5到8是有问题的,因为它们使这个表成为一个汽车表,而不仅仅是广告表。我可以这样做:A将其拆分为两个表Ad和Ad_Cars,或者更好地B创建表Categories、categoryproperty和adproperty。类别列出汽车、家具等。类别属性列出每个类别可以或必须具有的属性{car,miles}、{car,gear}、{car,make}。最后,通过获取正确的属性集来填充ADProperty 来自CategoryProperty的,通过ID将它们链接到广告,并让用户填写值{1,miles,10000},{1,gearing,manual}

我不知道你是如何处理图片的,但我可能会在一张包含AdID和PictureFileName的AdPictures表格上做广告。我会去掉nr_of_图片,而是从AdPictures上的一组视图中获取这些信息,除非这会导致性能问题


如果您选择这样做,那么我还将添加表项类型、项类型特征、项类型特征有效值,以防某些特征是下拉列表。而item_type_特性在长度、最小值/最大值、下拉列表、整数/双精度/日期/文本/布尔值、regexp验证、一些自定义机制等方面有很多不同的限制。只需添加外键即可。海报表将有一个名为id的整数自动递增列,您将其设置为主键。这将使海报表中的每一行在此单元格中具有唯一的值。然后在cars表中,您将有一个字段poster_id。在该字段中,您将为您要链接到的posters表中的行写入id单元格的值。当您从cars表中选择一行时,您可以查看poster_id字段,并从posters表中选择相应的行。这可以通过使用JOIN.SELECT语句在单个SELECT语句中完成,您是说在查询数据库时使用php?我现在开始明白了,请再解释一下。。。我得到了PK和FK,但不知道如何从一个表字段指向另一个表字段值……是的,我是说在查询时使用PHP。在PHP中,您将通过SQL语句(如SELECT、UPDATE、INSERT和DELETE)执行所有操作。事实上,差不多就是这样。不要改变PHP中的DB结构——你只做了一次表,然后只操作其中的数据。至于指针的东西——没有什么神奇之处。只需从您需要的posters表中获取行,当然,在PHP中检查其id值,然后在插入cars表时将其写入poster_id字段。