首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >与其他实体具有随机关系的实体

与其他实体具有随机关系的实体
EN

Stack Overflow用户
提问于 2016-09-22 12:51:27
回答 1查看 118关注 0票数 4

我有一个案例,一个实体(职业)可能与其他实体有关系,也可能没有关系。

我可能有一个用户的职业是管家,而另一个用户的职业是烹饪,但我们必须指定他在哪些国际厨房做饭,所以我们有X是西班牙和亚洲厨房的厨师,Y是管家。

与其他实体的条件关系取决于职业的业务类型。

我有以下表格:

--用户: Id,名称,...

-- Profession: Id,title,linked_entity_name

-- User_Profession: user_id,profession_id,entity_id

如果该职业未链接到实体,则表User_Profession中的实体id将为零。

这种方法在表格规范化、性能和网站中的数据搜索方面是否有效?

实体可能有关系也可能没有关系的最佳实践是什么?

代码语言:javascript
运行
复制
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

EN

回答 1

Stack Overflow用户

发布于 2016-09-23 07:34:10

几分钟前,我用与这里提供的相同的answer回答了一个问题。

简而言之,根据需要创建一个或多个表来包含每个职业的详细信息。创建一种交叉表,将每个用户与他们的职业联系起来。当然,对于不同的专业,专业数据将包含在不同的表中,因此交叉表的专业侧不能直接引用专业数据表。

So...place专业表中的FK,使用专业指示符引用交叉表的专业侧,以维护数据完整性。详细信息请参见上面的链接。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39630504

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档