我有一个案例,一个实体(职业)可能与其他实体有关系,也可能没有关系。
我可能有一个用户的职业是管家,而另一个用户的职业是烹饪,但我们必须指定他在哪些国际厨房做饭,所以我们有X是西班牙和亚洲厨房的厨师,Y是管家。
与其他实体的条件关系取决于职业的业务类型。
我有以下表格:
--用户: Id,名称,...
-- Profession: Id,title,linked_entity_name
-- User_Profession: user_id,profession_id,entity_id
如果该职业未链接到实体,则表User_Profession中的实体id将为零。
这种方法在表格规范化、性能和网站中的数据搜索方面是否有效?
实体可能有关系也可能没有关系的最佳实践是什么?
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`fullName` varchar(100) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `profession` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(100) NOT NULL,
`linked_entity_name` varchar(100) NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `user_profession` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL ,
`profession_id` int(11) NOT NULL ,
`entity_id` int(11) NOT NULL DEFAULT 0,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `kitchen` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`kitchen_name` varchar(100) NOT NULL,
`kitchen_origin` varchar(100) NOT NULL,
`kitchen_desc` varchar(100) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;SQLFiddle:http://sqlfiddle.com/#!9/ece75
发布于 2016-09-23 07:34:10
几分钟前,我用与这里提供的相同的answer回答了一个问题。
简而言之,根据需要创建一个或多个表来包含每个职业的详细信息。创建一种交叉表,将每个用户与他们的职业联系起来。当然,对于不同的专业,专业数据将包含在不同的表中,因此交叉表的专业侧不能直接引用专业数据表。
So...place专业表中的FK,使用专业指示符引用交叉表的专业侧,以维护数据完整性。详细信息请参见上面的链接。
https://stackoverflow.com/questions/39630504
复制相似问题