仅具有 1 或 2 个可选字段的数据库表...拆分为多个表?

2024-01-12

在我正在设计的数据库中,有一个相当中心的表代表已售出或待售的物品。它区分个人销售(如 eBay)和正规公司的销售。这意味着实际上有 1 个或两个字段并不同样适用于两种情况......例如,一个字段仅在一种情况下使用,另一个字段在一种情况下是可选的,但在另一种情况下是强制性的。 如果有更多专业知识,那么明智的做法是拥有一个核心表,然后使用两个包含与特定案例相关的字段的表。但在这里,创建两个表只是为了包含一个字段加上对核心表的引用,这看起来既不美观,又让查询设计者和数据库软件感到痛苦。

你怎么认为?是否可以通过使用弱化约束的单个表来稍微改变规则 - 这意味着数据库不能 100% 防止添加不一致的数据(以非常有限的方式) - 或者我应该接受它并创建看起来愚蠢的 1 字段桌子?


您使用一张用于公共列的表和用于特定于子类型的列的从属表来描述的内容称为类表继承 http://martinfowler.com/eaaCatalog/classTableInheritance.html。这是一件非常好的事情。

@Scott Ferguson 似乎描述的内容(两种不同的销售类型的两个不同的表)被称为具体表继承 http://martinfowler.com/eaaCatalog/concreteTableInheritance.html。根据您的需求,它也可能是一个很好的解决方案,但更常见的是,它只会使跨两种子类型编写查询变得更加困难。

如果您需要的只是仅适用于给定子类型的一两列,我同意创建依赖表似乎有点矫枉过正。请记住,大多数品牌的 SQL 数据库都支持CHECK约束或触发器,因此您可以将数据完整性规则设计到元数据中。

CREATE TABLE Sales (
 sale_id SERIAL,
 is_business INT NOT NULL, -- 1 for corporate, 0 for personal
 sku VARCHAR(20),          -- only for corporate
 paypal_id VARCHAR(20),    -- mandatory but only for personal
 CONSTRAINT CHECK (is_business = 0 AND paypal_id IS NOT NULL)
);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

仅具有 1 或 2 个可选字段的数据库表...拆分为多个表? 的相关文章

  • Postgresql:SERIAL 在约束 INSERT 失败时递增

    有一个像这样的简单表结构 CREATE TABLE test id INT PRIMARY KEY sid SERIAL 我注意到如果我尝试插入一行但它未通过约束测试 即主键约束 SERIAL计数器无论如何都会增加 所以下一次成功插入 si
  • 结果集未打开。验证自动提交已关闭。阿帕奇·德布里

    我的数据库使用 apache derby 我能够对数据库执行插入操作 以下是尝试显示我唯一的表 MAINTAB 的内容的代码摘录 java sql Connection 的实例是 dbconn ResultSet word Statemen
  • “$$ 处或附近的未终止的美元引号字符串

    我试图使用 DBeaver 声明一些变量并不断遇到此错误 Unterminated dollar quoted string at or near DO DECLARE A integer B integer BEGIN END 有任何想法
  • 如何通过Object Id和Column Id查询表数据?

    有桌子Clients PK LastName Name Address 1 Vidal Arturo St 2 Lavezzi Ezequiel St 3 Cuadrado Guillermo St 我想得到 通过以下查询 我可以得到前四列
  • 数据库设计:类别在自己的表中?

    我正在将几个数据库重新设计成一个综合数据库 并且我注意到旧数据库的先前设计者喜欢将类别存储在自己的表中 例如 假设有一个表boats bid integer bname string color integer 并且在应用程序中有一个下拉框
  • 仅从数据库获取我想要的数据但保留结构

    我正在尝试在 powerbi 上执行此操作 但我想这只是基本的 SQL 我想将我的数据导入到 powerBi 中 但使用一些 id 对其进行过滤 我们以这个例子为例 我与一些公司有数据库 表1 每个公司都有建筑物 表2 每个建筑物有员工 表
  • Mysql为简单频繁查询创建排序索引性能

    我正在处理一个包含大约 400 万条消息条目的 mysql 表 并尝试根据时间戳选择最新的 50 条消息 另一个要求是返回的消息不以固定前缀开头 问题是单个查询大约占用 25 的 cpu 并且最多需要 1 5 秒 该查询经常由多个客户端执行
  • 使用另一个表中的数据查找并替换 MySQL 中的字符串

    我有两个 MySQL 表 我想使用另一个表中的数据查找和替换一个表中的文本字符串 Table texts messages thx guys i think u r great thx again u rock Table dictiona
  • MySQL:你能指定一个随机限制吗?

    有没有办法在 SQL MySQL 中随机化限制数字 我希望能够做的是在查询中获取随机数量的结果以在插入子查询中使用 而无需任何服务器端脚本 我希望能够作为假设说明运行的查询是 SELECT id FROM users ORDER BY RA
  • 返回行位置 - Postgres

    我返回一个带有位置的表 select from select row number over as position from organization result where data1 Hello 返回这个 这是正确的 data1 H
  • 如何在SQL Server数据库表列中存储图像[重复]

    这个问题在这里已经有答案了 我有一张名为FEMALE在我的数据库中 它有ID as Primary Key 它有一个Image column 我的问题是如何使用 SQL 查询存储图像 尝试一下 insert into tableName I
  • 仅当变量不为空时 SQL 添加过滤器

    您好 我有疑问如下 SELECT route id ROUTE ID FROM route master NOLOCK WHERE route ou 2 AND route query l s query AND lang id 1 这里
  • 显示过去 7 天 PHP 的结果

    我想做的是显示过去 30 天的文章 但我现有的代码不断给我一个 mysql fetch assoc 错误 然后追溯到我的查询 这是代码 sql mysql query SELECT FROM table WHERE DATE datetim
  • 获取查询的行号

    我有一个查询将返回一行 当表排序时 有什么方法可以找到我正在查询的行的行索引吗 我试过了rowid但当我期待第 7 行时却得到了 582 Eg CategoryID Name I9GDS720K4 CatA LPQTOR25XR CatB
  • 使用MySQL计算单个表中借方和贷方的余额

    下面的 MySQL 表包含带有关联金额的借方或贷方 操作 如何选择具有非零 余额 的所有 CLIENT ID 我尝试将表连接到自身以计算所有借方和贷方总额 但有些东西无法正常工作 CLIENT ID ACTION TYPE ACTION A
  • 如果执行没有事务的删除语句,是否会删除部分内容?

    如果表myTable包含100000000条记录 我执行DELETE FROM myTable 没有开始交易并且出现问题 例如服务器电源故障 会删除一些记录吗 否 如果数据库引擎符合ACID http en wikipedia org wi
  • SQL Group BY,每个组的前 N ​​个项目

    我有一个 SQL 查询 可以获取给定商店中销量最高的 5 件商品 SELECT TOP 5 S UPCCode SUM TotalDollarSales FROM Sales S WHERE S StoreId 1 GROUP BY S U
  • Yii 查询时对相关模型的限制

    我遇到了极限问题 我正在使用的代码如下 model PostCategory model record model gt with array posts gt array order gt posts createTime DESC li
  • Oracle:如果表存在

    我正在为 Oracle 数据库编写一些迁移脚本 并希望 Oracle 有类似于 MySQL 的东西IF EXISTS构造 具体来说 每当我想删除 MySQL 中的表时 我都会执行类似的操作 DROP TABLE IF EXISTS tabl
  • 如何在动态查询中将行值连接到列名

    我正在开发一个允许配置问题和答案的应用程序 目前最多可以有 20 个答案 但也可能更少 我的结构如下 问题 ID FormId QuestionText AnswerField 1 1 Name Answer01 2 1 Address A

随机推荐

  • C# 如何将整数视为数组? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 假设我有 5 个整数这不是数组 我想
  • Arduino F()宏的实现

    我试图了解 Arduino 中的 F 宏实际上对 PGMEM 和 RAM 做了什么以及运行时的影响是什么 有人可以指出定义这个宏的文件吗 这可能是旧版本 但定义它的一个地方是Wstring h as in here http andybro
  • 即使 ssh 有效,Gitlab 也无法克隆存储库

    正如标题所述 即使 ssh 似乎可以工作 我也无法从 Gitlab 6 服务器克隆存储库 当尝试克隆时 它看起来像这样 git clone ssh email protected cdn cgi l email protection 133
  • 如何正确删除使用sonata-media-bundle上传的所有图像

    我已经按照建议使用 sonata media bundle 上传了一些图像here http sonata project org bundles media 2 2 doc reference usage html media new M
  • 切换按钮和开关的区别

    切换按钮和开关有什么区别 由于它们提供相同的功能 使用切换按钮或开关的具体用例是什么 切换按钮 Switch 这更多的是一个用户体验问题 而不仅仅是编码问题 这是我的回答 该控件的描述是这样说的 Toggle是一个按钮 sap m Togg
  • 为什么 go.mod 中的所有依赖都是间接的?

    我通过运行以下命令来初始化一个 go 项目 go mod init firstgo app 我确认模块已创建 cat go mod module firstgo app go 1 18 然后我通过执行安装了对 github com gin
  • 如何使用curses在终端中编写三行不断更新的行?

    我有一个程序需要输出三个不断变化的消息 连接数 已用时间和拒绝的连接 我尝试用以下方式写它们 r 在字符串末尾并在其他开始自己的输出循环之前打印换行符 认为回车符会返回一行 但它们最终都在第一行互相覆盖 我见过类似的问题 人们推荐使用cur
  • twitter bootstrap 调整手机屏幕上的文本大小

    我是 Twitter 引导程序的新手 我隐藏了一些 tr 在手机屏幕上的帮助下class hidden phone 但我想调整显示文本的大小以适合屏幕 如何在手机屏幕上调整文本大小 如下所示 span test test test test
  • Collections.unmodifierXXX 方法是否违反 LSP? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 里氏替换原则 http en wikipedia org wiki Liskov substitution principle是原则之一SOLI
  • 将 javascript WebSocket 与 Java ServerSocket 连接

    我正在尝试将 javascript 与 Java 连接起来 但出现一些错误 javascript 端错误 WebSocket connection to wss 127 0 0 1 1234 failed WebSocket opening
  • 通过index.js从文件夹导入

    在我的 React 项目 带有 Webpack 中 我的文件夹结构如下 myfile js Report index js 根据我的research https stackoverflow com a 44092481 1493867 我应
  • Flexbox 可以检测 Flex 项目何时换行吗?

    我希望摆脱媒体查询并仅使用 Flexbox 来解决我的问题 但我不确定这是否可能 随着窗口变小 我希望列缩小 直到达到最小宽度 一旦他们击中了那个 中间的柱子就会跳下来进行换行 我想我的问题可以归结为 flexbox 可以检测到它何时换行吗
  • inotifywait 不执行 bash 脚本中的 while 循环

    我想在 Docker 容器中的目录上放置一个文件观察器 我在用着entrypoint sh脚本来设置放置文件观察器的脚本 设置如下 bin sh Trigger the script with the file watcher in the
  • 如何在phonegap/jquery移动应用程序中使用外部图像

    我正在为 android 开发一个phonegap jquery mobile 测试应用程序 我是这项技术的新手 我想在我的应用程序中显示存储在互联网站点上的图像 在 avd 中的应用程序启动期间 当将此元素放入我的 index html
  • 加载网页时:“# 的未定义方法‘request_uri’”

    我正在尝试使用 Ruby 通过 HTTP 加载网页并检查其状态代码是什么 我的代码如下所示 require net http r Net HTTP get response URI parse myURL return r code 然而
  • 检查输入是否为 int、float 或 bool 的 Python 程序

    所以我试图在这里编写一个程序 要求输入 然后检查输入是否有整数 布尔值或浮点数 如果有这些字符中的任何一个 那么它将再次要求输入 我想做的不仅仅是写作str input 就像用户输入一个int or bool等等它将打印错误并停止程序 这是
  • Rails 4:使用代理模型来组合多个模型

    我正在尝试在轨道上 4 我之前做过一些西纳特拉的作品 我有一个注册表单 用户可以在其中填写他的组织名称 地址和他自己的姓名 密码等 我有两个表 用户和组织 这些表中填充了注册数据 所以 我有两个活动记录模型users and organiz
  • Android 上的蓝牙:StartDiscovery 不起作用。无法扫描设备

    我是android新手 我正在制作一个具有蓝牙功能的应用程序 我可以设置蓝牙适配器 并获取我自己的设备信息 但我无法使用 startdiscovery 来发现蓝牙设备 当我开始扫描时它什么也不做 我正在使用 onclicklistener
  • Paypal结帐返回数据

    我有一个 paypal 按钮 如下所示
  • 仅具有 1 或 2 个可选字段的数据库表...拆分为多个表?

    在我正在设计的数据库中 有一个相当中心的表代表已售出或待售的物品 它区分个人销售 如 eBay 和正规公司的销售 这意味着实际上有 1 个或两个字段并不同样适用于两种情况 例如 一个字段仅在一种情况下使用 另一个字段在一种情况下是可选的 但