我想知道某人是否有时间规范我的数据库?
我不知道它是否需要正常化,但我想完美地完成所有事情,而且我不知道它是否已经好了。
我使用phpMyAdmin创建我的数据库......
背景: 我正在制作一个分类广告网站。一类广告是“汽车”。到目前为止,我只创建了汽车数据库,我认为从汽车开始简直就是好的...
这是表:(只有一个表)
每次你需要更多输入时我会更新这篇文章,如果是这样的话...... 我已经阅读了几篇关于规范化的文章,我得到了这个概念,但是我真的不知道如何将它付诸实践。
非常感谢!
更新 好吧,所以拆分是这里的交易...所以说我把海报分成了一个单独的表。如何将'poster_table'链接到第一个表格? 也就是说,如果用户点击广告,然后必须显示广告,旁边的海报名称,日期,区域等等......所以必须有一种方法来链接它们,我是对的吗?
答案 0 :(得分:0)
有点模糊,但至少你应该有以下表格:
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 :(得分:0)
一些意见:
将区域和海报拆分为单独的表格。
我会使用日期类型而不是insert_date的时间戳。 (但这取决于你如何使用它。)
你也可以拆分变速箱和燃油,因为它们几乎肯定会重复很多。
您的姓名和电子邮件地址的宽度也太小了。
答案 2 :(得分:0)
我建议您找出所需的所有功能,然后开始规划数据库。否则现在桌子很好 - 只要它适用于汽车。如果您需要其他类型的项目,那么这将是不够的,您将不得不制作更多的表格(每种类型的项目一个)或做更多的规范化。
已添加:乍一看,您需要将海报移到单独的表格中,因为它们就像是有密码和内容的用户。除非您希望某人为每条记录创建新的登录名,否则您应该将其放在单独的表中。否则当一个人更改密码时会发生什么 - 你必须在表中的所有行中更改它!这非常尴尬和低效。基本思想是 - 每个数据应该只存储在一个地方。如果为了更改单个数据,您必须更新此数据的多个副本,那么您应该将其移出到另一个表并创建外键。
已添加2:另一方面 - 也许您不希望用户单独登录?也许他们只是发布他们的广告并为每一个设置密码(然后使用密码编辑特定项目)?在这种情况下,您不应将这两个表分开。如果你有两个表,其中记录是1:1(如第一个表中的每一行,第二个表中没有更多且不少于1行),那么表应该合并。
答案 3 :(得分:0)
如果查看当前表,则至少捆绑了四个概念。我会针对以下概念制作单独的表格:
我会将广告与具有多对多关系的类别相关联,广告与卖家进行多对一关联,并将广告区域与多对多关联,或者与卖家和区域相同,取决于您追求的设计类型。图片将使用一对多关系链接到广告。
祝你好运!答案 4 :(得分:0)
好:
字段10到15(与海报有关)进入单独的表格。将名为PosterID的主键添加到该表,并将字段10到15替换为字段PosterID作为外键返回到海报表。
对字段2& 3,假设area_community是area_id的描述。另外,请考虑区域是否属于海报或个别广告的属性。
字段5到8存在问题,因为它们将此表格用于汽车,而不仅仅是广告。我要么:A)将其拆分为两个表(Ad和Ad_Cars)或(更好)B)创建表Categories,CategoryProperties和AdProperties。类别列出汽车,家具等等。类别属性列出了每个类别可以或必须具有的属性({car,miles},{car,gearing},{car,make})。最后,通过从CategoryProperties中获取正确的属性集,将它们链接到Ad(通过ID)并让用户填写值({1,miles,10000},{1,gearing,manual})来填充AdProperties。
不确定您是如何处理图片的,但我可能会在包含AdID和PictureFileName的AdPictures广告中添加。我将摆脱nr_of_pictures,而是从AdPictures上的GROUP BY视图获取该信息,除非这会导致性能问题
答案 5 :(得分:-1)
最简单 - 将海报字段放到另一个表中,然后保存其ID。我猜同一个人可能会发布多个广告。
除此之外 - 重复是什么?变速箱和燃料也是正常化的候选者。