我正在为旅游网站设计一个数据模型。我有一张地点表(国家、度假村、酒店)和一张旅游表。这些表的字段差异很大,因此无法合并为一个。它们都有通常的 auto_increment 作为 id。地点和游览都有照片,因此还有第三个照片表。该表有“父级”字段,我计划在其中存储父级(地点或游览)ID。
设计这些表格的最佳方法是什么?一张 table 用于存放所有照片,两张 table 作为照片的“ parent ”。现在,我已将“parent_type”列添加到照片表中,因此当我的脚本显示游览时,它会通过照片表中的(父)id 和类型(parent_type)“游览”来调用照片。 .
更新: 有更优雅的解决方案吗?只有 3 个表并且没有“parent_type”列?
(无法发布图表...这是链接 http://share.xmind.net/yentsun/tourism-site-data-model/ )
最佳答案
国家、酒店和度假村是地点的子类型。地点表包含地点共有的所有字段,而国家、酒店和度假村表则包含每个地点特有的字段。一次旅行包含许多地方,一个地方可以是许多旅行的一部分。
这里是地点和国家/地区的示例代码 - 它是 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
;
关于MySQL:几位家长从一张表中识别出他们的 child ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1775240/