首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >票务系统数据库结构

票务系统数据库结构
EN

Stack Overflow用户
提问于 2018-01-21 08:12:29
回答 1查看 2K关注 0票数 1

我想创建一个票务PHP应用程序,但我在数据库结构的规划方面犹豫不决。

我将拥有完全不同类型的票证模板(用户/共享文件夹/终端设备进程等)需要不同的输入。

问题是,我应该将它们存储在一个表中,还是应该为每个票务组创建一个单独的表?

如果我将它们存储在一个表中,表中将有许多空字段,因为不同的票证使用不同的字段。

我认为常见的字段只有unique IDstatusresponsible person,其他字段则不同。

我的首选解决方案是,如果我将它们存储在单独的表中,只包含所需的字段。

但是,当我想列出每一张票时,这会在一个简单的SELECT查询中导致麻烦。如果我在查询期间将它们连接在一起,它将创建一个包含许多空字段的结果表,因为表的结构之间存在差异,这不是最优的。为了避免这种情况,我应该对每个表运行单独的查询,这并不简单。

你会选择哪种方式?你能给我提个建议吗?提前谢谢你!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-21 12:25:43

不要将不同的实体放在同一个表中。是的,它们有一些公共字段,但是一堆空列是一个明确的信号,表明应该避免这种设计,好的迹象是您已经意识到了这一点:)如果我们现在从数据库世界跳到具有OO模式和类的应用程序世界,这通常会通过继承( is -一种关系)来解决。如何在SQL (特别是MySQL)中强制执行此操作?

用一个公共表将数据划分到单独的表中,我们称之为ticket_template,它将包含公共字段(您提到了template_idstatusresponsible person)。其他表(如user_template )将创建如下所示:

代码语言:javascript
复制
CREATE TABLE user_template(
    user_template_id int PRIMARY KEY REFERENCES ticket_template(template_id)
    ...
);

他们应该保留特定于特定实体的字段。如果您想要一个通用报表,请编写多个SQL选择并逐一显示其结果。如果您想将它们全部放在一起,只需列出共同的字段。

注意-此设计并不能防止混淆的用户插入与任何具体模板(如user_template)无关的或与其中许多模板(超过1)相关的user_template。如果数据库支持延迟约束(不幸的是,MySQL不支持),也可以强制执行,请读取更多的here

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

https://stackoverflow.com/questions/48364892

复制
相关文章

相似问题

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