我如何在数据库中建模?

bra*_*ter 5 mysql erd database-design

我使用 mysql 作为我的后端数据库。这是用例;

AHolidayPackage配置了一些默认值offerings。这些默认产品可以根据提供的选项升级/降级。每个产品属于不同类型的variants

  • 酒店
  • 起源城市

首先,我想设计 Origin city 的用例:

有一个 GOA 包。它可以根据起源城市提供 3 种变体;

  • 从新德里到果阿
  • 从孟买到果阿
  • 果阿本身(土地包)

粗体表示默认选择)

一种。b. 用户可以从新德里或孟买飞往 GOA。
C。Goa是Land套餐,用户可以自己到达Goa,是一个独立的度假套餐。

此外,我们需要进一步支持以下具有变体类别(Origin City)的用例:

  • 变体中的一个选项可以被管理员标记为默认,这将是提供的包含的一部分(例如孟买到果阿)

在数据库中,我需要对这些关系进行建模。这是我的想法。

HolidayPackageMANYMANY有关系Destination(读起点城市)。这将处理以下选项:

  • 从新德里到果阿
  • 从孟买到果阿

我的顾虑:

  • 我如何处理仅“果阿本身”的土地包裹,而我们没有旅行路线?
  • 如何default在数据库级别标记包的选项?

小智 0

我发现使用整数标志最适合关系数据库以及当您必须满足您所解释的条件时。通过将默认来源设置为您想要默认的城市的ID,我相信您可以实现您所追求的目标。此外,如果在假期套餐中,“出发地”一栏为 0,则您可以假设没有旅行行程,并将其视为已到达目的地。

一个想法是做这样的事情:

CREATE TABLE `cities` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
`city_name` VARCHAR(255) NOT NULL,
`flag` TINYINT(3) NOT NULL DEFAULT 0);

CREATE TABLE `hotels` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
`hotel_name` VARCHAR(255) NOT NULL,
`city_id` INT UNSIGNED NOT NULL);

CREATE TABLE `HoldayPackage` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
`origin` INT UNSIGNED NOT NULL default 0, //when origin=0, there is no travel leg, otherwise it's relative to the cities.id table
`destination` INT UNSIGNED NOT NULL DEFAULT 1, //foreign key to cities table again, using 1 as the default assuming the first entry you make is 'GOA'
`hotel` INT UNSIGNED NOT NULL, //foreign key to a hotels table
`flag` TINYINT(3) NOT NULL DEFAULT 0);
Run Code Online (Sandbox Code Playgroud)

作为单独的命令列表,我们可以将表类型更改为 innoDB(真正的关系数据库所需)及其外键:

alter table `cities` type=innodb;
alter table `hotels` type=innodb;
alter table `HoldayPackage` type=innodb;

alter table `HoldayPackage` add constraint destination_fk foreign key (destination) references cities(id) on update cascade on delete cascade;
alter table `hotels` add constraint city_fk foreign key (city_id) references cities(id) on update cascade on delete cascade;
Run Code Online (Sandbox Code Playgroud)

我希望这就是您正在寻找的!