具有特定属性的 MySQL 数据库关系

标签 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;

最佳答案

除了“就地”和“附近”之外,您可以保留一些不同的现场属性的可能性是正确的。也许您稍后会添加“20 英里以内”或“在您的房间内”。

所以我建议以这种方式制作表格:

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

这似乎是这些事物在现实生活中的关系——这些特征中的每一个都独立于其他特征。这使得度假村有可能同时拥有餐厅和附近的餐厅。

关于具有特定属性的 MySQL 数据库关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10642343/

相关文章:

mysql - 使用 txt 文件加载数据 INFILE

c# - 如何从另一个表中获取与另一个表中的名称或ID匹配的相同名称或ID

mysql - 设计一个关系数据库,以便实体可以保存一组可选的数据

database-design - 我应该如何在数据库中存储列表

database - 许多 fk 表的一个表列?

c# - Entity Framework 、批量插入和维护关系

MYSQL表存在异常

mysql - RDS Aurora有没有MySQL Events

many-to-many - "establishing a many-to-many relationship"的较短动词是什么?

python - 重写 sqlalchemy 中的关系行为