这是维护数据库的更好代码,为什么?

时间:2010-12-31 15:22:41

标签: mysql database-design

多个表......

  CREATE TABLE IF NOT EXISTS `pictures` (
    `id` bigint(20) NOT NULL auto_increment,
    `title` varchar(255) NOT NULL,
    `url` varchar(255) NOT NULL,
    PRIMARY KEY  (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

    CREATE TABLE IF NOT EXISTS `propPictures` (
    `id` bigint(20) NOT NULL auto_increment,
    `picture_id` varchar(255) NOT NULL,
    `property_id` varchar(255) NOT NULL,
    PRIMARY KEY  (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

OR

CREATE TABLE IF NOT EXISTS `pictures` (
`id` bigint(20) NOT NULL auto_increment,
`title` varchar(255) NOT NULL,
`url` varchar(255) NOT NULL,
`property_id` varchar(255) NOT NULL,
PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

????

谢谢

4 个答案:

答案 0 :(得分:3)

这取决于。每张图片都只有一个property_id吗?如果是这样,那么单个表就可以了。

答案 1 :(得分:2)

一个属性可以并且可能会有多个图片,所以你想要的是一个属性表,然后是一个包含属性id的图片表,并且有一个外键表。

顺便说一句,ID是id字段的一个糟糕选择。它会导致报告问题,并可能导致意外的连接问题。对于那些意味着不同的字段,两个表几乎不应该使用相同的名称。改为使用tablenameID。

答案 2 :(得分:0)

看起来你建议用于图片的table1,以及它可能具有的任何属性的table2。这通常比单个表设计更好,因为它可以轻松处理任何具有0,1或更多属性的给定图片。

答案 3 :(得分:0)

在pictures.id和property_id之间建立一对一的关系,单个表就足够了。如果此关系更改为一对多,则需要使用第二个表将一个pictures.id与多个属性ID相关联。