MySQL数据库与特定属性的关系

时间:2012-05-17 19:33:20

标签: mysql database-design relationships

我正在创建一个度假村数据库和后端。

此后端允许管理员创建新的度假村,然后指定度假村中包含的设施。

设施可以是:网球场,游泳池等。

听起来很容易吗?我遇到的问题是每个设施需要一个属性:[附近]或[现场]。

我想这样做的方式是:

CREATE TABLE IF NOT EXISTS `amenity_resort_assn` (
  `amenities_id` int(10) unsigned NOT NULL,
  `resorts_id` int(10) unsigned NOT NULL,
  PRIMARY KEY (`amenities_id`,`resorts_id`),
  KEY `IDX_amenityresortassn_1` (`amenities_id`),
  KEY `IDX_amenityresortassn_2` (`resorts_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

CREATE TABLE IF NOT EXISTS `resorts` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(100) NOT NULL,
   PRIMARY KEY (`id`),
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT ;


CREATE TABLE IF NOT EXISTS `amenities` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(100) NOT NULL,
  `amenities_onsite_id` int(10) unsigned NOT NULL,
  PRIMARY KEY (`id`),
  KEY `IDX_amenities_1` (`amenities_onsite_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT ;


CREATE TABLE IF NOT EXISTS `onsite_type` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(100) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `IDX_amenitiesonsitetype_1` (`name`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT;

1 个答案:

答案 0 :(得分:1)

除了“on location”和“near by”之外,你还有可能拥有一些不同的现场属性。也许您稍后会在“20英里内”或“在您的房间内”添加。

所以我建议这样做表:

RESORTS: id, name
AMENITIES: id, name
ONSITE_TYPE: id, name
AMENITY_RESORT_ASSN: id, resorts_id, amenities_id, onsite_type_id

这似乎是这些事物在现实生活中的关系如何 - 这些特征中的每一个都独立于其他特征。这样就有可能度假村内有餐厅和附近的餐馆。