Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >具有类型和子类型的数据库设计

具有类型和子类型的数据库设计
EN

Stack Overflow用户
提问于 2015-08-10 16:21:08
回答 1查看 1.2K关注 0票数 2

我正在尝试设计一个具有超级类型/子类型的数据库。我有以下用户:

  • 基本用户
  • 业务用户
  • 管理员(超级用户)

所有三个用户都共享一个公共表(用户),其中存储姓名、电子邮件、密码等字段。但是,业务用户有一个单独的表(业务),其中存储业务字段(如business_name、business_license、business_email等)。我的问题是,我的业务用户自己被分成了5个或更多个类别。

我的业务用户是这样分裂的:

  1. 画家
  2. 车辆详细说明
  3. 抽签员
  4. 服务技术人员:
    1. 发动机技师
    2. 传动技术人员
    3. 计算机技术人员
    4. 电气技师

  1. 销售代表
    1. 实体位置销售代表
    2. 互联网销售代表
    3. 销售经理

有一点要提到的是,我希望将所有这些业务用户存储在某个表中,这样就可以轻松地添加和删除位置,而不会在应用程序级别上造成很大的混乱。

我目前设计了这个数据库,但我对它并不满意。有没有更好的方法?

EN

回答 1

Stack Overflow用户

发布于 2015-08-10 19:35:18

你的设计很不错。我喜欢它。将一些数据放入其中并编写一些查询。如果你如此渴望的话,你可以让它正常化一点。下面是您可以使用的SQLFiddle,http://sqlfiddle.com/#!9/b0711/3和下面的语句。

用户和类型

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
create table usertypes (id int, typename varchar(100));
insert into usertypes values (1,'Basic'), (2, 'Business'), (3, 'Super');

create table users (
  id int, 
  email varchar(100), usertype int, fullname varchar(100)
);
insert into users values 
(1, 'a@b.com', 1, 'Tom Basic'),
(2, 'b@c.com', 2, 'Bill Business'),
(3, 'c@d.com', 3, 'Charlie Super');

-- USERS will have SUBTYPES in this many to many table. This will allow
-- a user to be a part of multiple subtypes if you please. You can control
-- that. If userid is primary key, one user can be of only one subtype
-- If userid and usertype make up a composite primary key, a user can be
-- of multiple types
create table userstypes (userid int, usertype int);
insert into userstypes values (1, 1), (2, 2), (3, 3);

业务和用户

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
create table businesses (
  id int,
  doing_business_as varchar(100), phone varchar(30)
);
insert into businesses values (1, 'Microsoft', '111-222-3333');
insert into businesses values (2, 'Toms Hardware', '111-222-3333');

-- Same as user types
-- DANGER: if you mark a user to be of type 'Basic', nothing stops that
-- user to have a business. You can use a trigger to allow only business
-- user to have an entry here
create table usersbusinesses (userid int, businessid int);
insert into usersbusinesses values (1,2), (2, 1);  

业务子类型

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
create table businesstypes (id int, businesstypename varchar(100));
insert into businesstypes values (1, 'Software'), (2, 'Hardware');

create table businessestypes (businessid int, businesstypes int);
insert into businessestypes values (1, 1), (2, 2);

-- DANGER: This design allows only 1 level of subtype. If a business
-- has a subtype, and that subtype has a sub-subtype and so on, this
-- design will not scale. Hierarchical design will scale but may also 
-- need performance tuning
create table businesssubtypes (id int, businesssubtypename varchar(100));
insert into businesssubtypes values (1, 'Garden Tools'), (2, 'Heavy Machine');

create table businesstypes_subtypes (businessid int, businesssubtypeid int);
insert into businesstypes_subtypes values (2,2);

根据您的应用程序需求,我建议您进行适当的去规范化。对于非常小的、非常低工作量的项目,我会在一个表中创建一个平面结构。

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

https://stackoverflow.com/questions/31931222

复制
相关文章
int类型和byte类型的强制类型转换
今天在读《Java网络编程》这本书的第二章 流 时,看到书中有一个地方关于int强制转换为byte类型时应注意的地方。这个地方有点细节,不过就应该把这种细节把握住。 情况是这样的,讲到InputStr
用户1148394
2018/01/09
2.7K0
int类型和byte类型的强制类型转换
TypeScript 中的基础类型:原始类型、对象类型、数组类型、元组类型、枚举类型和联合类型
TypeScript 是一种由微软开发的静态类型编程语言,它是 JavaScript 的超集,并且可以在编译时进行类型检查。TypeScript 强大的类型系统使得开发者能够更轻松地编写可维护、可扩展的代码。本文将详细介绍 TypeScript 中的基础类型,包括原始类型、对象类型、数组类型、元组类型、枚举类型和联合类型。
网络技术联盟站
2023/07/06
8040
媒体类型和响应式设计
二、媒体类型引用方法:link标签,xml方式,@import和css3新增的@media四种
IT人一直在路上
2019/09/18
1.5K0
媒体类型和响应式设计
Mysql数据库学习(二):数据类型(数值类型 日期和时间类型 字符串类型)
s1mba
2017/12/28
2.4K0
Mysql数据库学习(二):数据类型(数值类型 日期和时间类型 字符串类型)
Go语言程序设计(一)基础类型和复合类型
最近在读《Go 语言程序设计》这本书想通过看书巩固一下自己的基础知识,把已经积累的点通过看书学习再编织成一个网,这样看别人写的优秀代码时才能更好理解。当初工作中需要使用 Go开发项目时看了网上不少教程,比如 uknown 翻译的《the way to go》看完基本上每次使用遇到不会的时候还会再去翻阅,这次把书中的重点还有一些平时容易忽视的Go语言中各种内部结构(类型、函数、方法)的一些行为整理成读书笔记。
KevinYan
2022/02/10
3550
[Objective-C] id类型和instancetype类型
id数据类型可以存储任何类型的对象。可以说,它是一般对象类型。 例如可以声明一个为id类型的变量:
wOw
2018/09/18
1.9K0
MySQL的字段类型_mysql数据库字段类型
要了解一个数据库,我们必须了解其支持的数据类型。MySQL 支持大量的字段类型,其中常用的也有很多。前面文章我们也讲过 int 及 varchar 类型的用法,但一直没有全面讲过字段类型,本篇文章我们将把字段类型一网打尽,讲一讲常用字段类型的用法。
全栈程序员站长
2022/10/04
19.5K0
MySQL的字段类型_mysql数据库字段类型
分表的类型和分库的类型
水平分表分的是行记录,而垂直分表,分的是列字段,它就像用一把刀,垂直的将一个表切成多张表一样。
用户1503405
2021/09/27
6250
django 字段类型_access的数据库类型是
自增的整型字段,必填参数primary_key=True,则成为数据库的主键,无该字段时,django会自动创建主键id字段。
全栈程序员站长
2022/10/04
3.9K0
《类型和程序设计语言》
类型理论在程序设计语言的发展中起着举足轻重的作用,成熟的类型系统可以帮助完善程序设计本身,帮助运行系统检查程序中的语义错误。
用户3157710
2018/10/10
1.1K0
《类型和程序设计语言》
C#中值类型和引用类型及类型的转换
版权声明:本文为吴孔云博客原创文章,转载请注明出处并带上链接,谢谢。 https://blog.csdn.net/wkyseo/article/details/52911145
空空云
2018/09/27
2.6K0
JavaScript 的基本类型和引用类型
JavaScript 数据类型目前是有 8 种,在大的方向可以分为两种,一种是基本类型,另外一种是引用类型。
青年码农
2021/06/29
2.3K0
Golang值类型和引用类型的区别
值类型:值类型包括基本数据类型(例如int、float64、bool等)和结构体。当一个值类型的变量被声明时,会在内存中分配一块空间来存储它的值。如果把一个值类型的变量赋值给另一个变量或作为函数参数传递时,会将这个值复制一份,两份值在内存中互不影响。
运维开发王义杰
2023/08/21
4960
Golang值类型和引用类型的区别
[财务][数据化分析][帆软]报表设计-模板设计类型
模板设计是 FineReport 学习过程中的主要难题所在,FineReport 模板设计主要包括普通模板设计、决策报表设计和聚合报表设计三种模板设计类型。
landv
2020/05/25
1.1K0
[财务][数据化分析][帆软]报表设计-模板设计类型
堆和栈的含义,值类型和引用类型
☞ 堆是无序的,是一片不连续的内存域,由用户自己来控制和释放,如果用户自己不释放的话,当内存达到一定的特定值时或程序运行结束时,通过垃圾回收器(GC)来回收。
zls365
2020/08/19
1.5K0
堆和栈的含义,值类型和引用类型
Swift 值类型和引用类型
Swift中的类型分为两类:一,值类型(value types),每个值类型的实例都拥有各自唯一的数据,通常它们是结构体,枚举或元组;二,引用类型(reference types),引用类型的实例共享它们的数据,通常是一个类。在这篇文章中我们将会探索值类型和引用类型的价值,以及如何在它们二者间抉择。
全栈程序员站长
2022/07/15
7350
ts基础类型和类型断言
// (function (Roles){ Roles[Roles['SUPER_ADMIN']=0]="SUPER_ADMIN"
刘嘿哈
2022/10/25
2790
TypeScript 类型注解和类型推断
当不添加类型注解时,TypesScript 也能知道变量 a 是一个数字,这就是 TypeScript 的类型推断:
Leophen
2020/07/23
1.1K0
论编程界的日经问题:到底如何区分静态类型和动态类型、强类型和弱类型?
博主在本文中探讨了编程界常见的问题,即如何区分静态类型和动态类型,强类型和弱类型。他指出,由于这些概念本身没有明确的定义,导致人们很难就此达成一致共识。然而,如果按照已有的共识来界定这些概念,就能得出一些明确的答案。文章提到了强类型语言和弱类型语言的区别,以及静态类型语言和动态类型语言的区别。在强类型和弱类型的定义中,强类型语言常常会直接出错或编译失败,而弱类型语言会进行隐式转换或产生意料之外的结果。根据这个定义,Python被归类为强类型语言。静态类型语言在编译期确定变量类型,而动态类型语言在运行时确定。根据这个区别,C, C++, C#, Java等被视为静态类型语言,而Python, JavaScript, TypeScript, PHP等被视为动态类型语言。最后,博主表示这种讨论对工程开发的实际意义并不大。
HikariLan贺兰星辰
2023/10/18
4400
点击加载更多

相似问题

具有子类型交叉链接的超类型/子类型数据库设计

10

具有状态和类型数据库的关系数据库设计

20

超类型子类型数据库设计

10

具有不同数据类型的SQL数据库设计

13

使数据类型具有类型*->*->* a函子

30
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文