单个或拆分表将此记录保存在数据库中?

时间:2012-02-28 17:53:34

标签: mysql database database-design rdbms

我一直在努力设计决定如何将这些信息存储在表格中。

我有一张名为property的表,其中包含房地产的记录。

CREATE TABLE `property` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `addDate` datetime NOT NULL,
  `serial` varchar(30) NOT NULL,
  `title` varchar(100) NOT NULL,
  `description` text,
  `user_id` int(11) NOT NULL,
  `area_id` int(11) NOT NULL,
  `category_id` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE  KEY `serial` (`serial`),
  FOREIGN KEY (`user_id`) REFERENCES `user`(`id`),
  FOREIGN KEY (`area_id`) REFERENCES `area`(`id`),
  FOREIGN KEY (`category_id`) REFERENCES `category`(`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8;

我必须在公司索引页面中显示网站所有者提供的5个特色属性和5个hotDeal属性。我无法决定将记录保存在一张桌子还是两张不同的桌子上。

例如。

CREATE TABLE `property_featured` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `addDate` datetime NOT NULL,
  `description` text DEFAULT NULL,
  `position` tinyint(1) DEFAULT '0',
  `property_id` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `position` (`position`,`property_id`),
  FOREIGN KEY (`property_id`) REFERENCES `property`(`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `property_hotdeal` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `addDate` datetime NOT NULL,
  `description` text DEFAULT NULL,
  `position` tinyint(1) DEFAULT '0',
  `property_id` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `position` (`position`,`property_id`),
  FOREIGN KEY (`property_id`) REFERENCES `property`(`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

我应该采用哪种方法,单身还是分开?

1 个答案:

答案 0 :(得分:2)

所有信息都完全相同,因此您应该使用带有附加列的单个表,根据需要调用它,如果只有两个可能值,则将其设为TINYINT(0或1) ,或者如果将来可能有更多的值,可能会VARCHAR