MySQL:几位家长从一张表中识别出他们的 child

标签 mysql database-design

我正在为旅游网站设计一个数据模型。我有一张地点表(国家、度假村、酒店)和一张旅游表。这些表的字段差异很大,因此无法合并为一个。它们都有通常的 auto_increment 作为 id。地点和游览都有照片,因此还有第三个照片表。该表有“父级”字段,我计划在其中存储父级(地点或游览)ID。

设计这些表格的最佳方法是什么?一张 table 用于存放所有照片,两张 table 作为照片的“ parent ”。现在,我已将“parent_type”列添加到照片表中,因此当我的脚本显示游览时,它会通过照片表中的(父)id 和类型(parent_type)“游览”来调用照片。 .

更新: 有更优雅的解决方案吗?只有 3 个表并且没有“parent_type”列?

(无法发布图表...这是链接 http://share.xmind.net/yentsun/tourism-site-data-model/ )

最佳答案

国家、酒店和度假村是地点的子类型。地点表包含地点共有的所有字段,而国家、酒店和度假村表则包含每个地点特有的字段。一次旅行包含许多地方,一个地方可以是许多旅行的一部分。

placehotel_model_01

这里是地点和国家/地区的示例代码 - 它是 T-SQL,但您会明白的。

CREATE TABLE Place
( 
    PlaceID        int  NOT NULL ,
    Type                varchar(2) 
);

ALTER TABLE Place
ADD CONSTRAINT PK_Place PRIMARY KEY  CLUSTERED (PlaceID ASC)
;
ALTER TABLE Place
ADD CONSTRAINT FK1_Place FOREIGN KEY (ParentID) REFERENCES Place(PlaceID)
;

CREATE TABLE Country
( 
    PlaceID        int  NOT NULL 
);

ALTER TABLE Country
ADD CONSTRAINT PK_Country PRIMARY KEY  CLUSTERED (PlaceID ASC)
;
ALTER TABLE Country
ADD  CONSTRAINT FK1_Country FOREIGN KEY (PlaceID) REFERENCES Place(PlaceID)
        ON DELETE CASCADE
        ON UPDATE CASCADE
;

评论后更新
抱歉,四张 table 是我最适合的一张。

placehotel_model_02

关于MySQL:几位家长从一张表中识别出他们的 child ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1775240/

相关文章:

php - 如何使这个查询发生

mysql - 将单个文本列拆分为所有可能组合的两列

mysql - 对于这种情况,如何使 MYSQL 选择一对多查询?

php - 将 require 语句与 if/else if 语句一起使用

oracle - 在数据库中实现 "Both, Either-or, but Not Null"要求

mysql - 推荐的 MySQL 数据库架构,以支持使用客户端拥有的数据的应用程序

python - 在 Django 1.4 中交叉引用外键

android - 打开sqlite数据库失败android

javascript - 存储文件夹层次结构 laravel

mysql - 创建带有时间戳的 mysql 输出文件