【问题标题】:Database design for same items with various properties [closed]具有各种属性的相同项目的数据库设计[关闭]
【发布时间】:2020-07-18 23:56:18
【问题描述】:

我刚刚进入数据库设计和结构。我现在面临一个问题。假设我想有一个票证数据库,票证分为三种:

票#1

 ---------------------------
| id     creation_time  .... |
 ---------------------------


票#2
 ------------------------------------------------
| id     creation_time    auto_closure_time .... |
 ------------------------------------------------


票#3
 -------------------------
| id       permanent .... |
 -------------------------


数据类型:

creation_time, auto_closure_time - datetime

永久 - 布尔值


Ticket #3 由于特定原因没有creation_time

四个点 (....) 表示其他包含所有票的列

我的问题是:我应该将这些表分开还是将它们合并到一个看起来像这样的表中?

 -----------------------------------------------------------
| id        creation_time   auto_closure_time     permanent | 
| 1              xyz               NULL               0     |
| 2              xyz               xyz                0     |
| 3              NULL              NULL               1     |
 -----------------------------------------------------------

ID 1 代表 Ticket #1 以此类推..

分离表和合并表有什么好处?

感谢所有回答,感谢您的宝贵时间。

【问题讨论】:

  • 询问利弊不是一个有效的问题。这种情况的选项也是常见问题解答。 Re DB/SQL subtyping/inheritancemore 等。在考虑发布之前,请阅读手册和谷歌任何错误消息或您的问题/问题/目标的许多清晰、简洁和精确的措辞,有或没有您的特定字符串/名称和站点:stackoverflow .com 和标签;阅读许多答案。如果您发布问题,请使用一个短语作为标题。反映你的研究。请参阅How to Ask 和投票箭头鼠标悬停文本。
  • 从第二个开始,当需要时,您可以从那里构建其他表

标签: mysql database postgresql database-design


【解决方案1】:

我将有一张只有creation_timeauto_closure_time 的表,并使用“不可能”值来表示永久性。这可能是创建时间的开始,也可能是关闭时间的结束(无论如何定义)。如您所描述的,类型 1 票证只需获取 NULL auto_closure_time

“有多少表”的答案取决于所表示的实体的属性的共性。在您的情况下,这三种票的唯一区别特征是它是否过期。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-14
    • 2011-05-17
    • 1970-01-01
    • 2011-02-12
    • 1970-01-01
    • 1970-01-01
    • 2011-05-04
    • 1970-01-01
    相关资源
    最近更新 更多