- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在设计一个数据库,其中两个字段具有多对一关系,但我还需要它们之间存在一对一关系,我想请教一下是否有更好的方法比我现在得到的还要多。
我的表是accounts
和users
。一个帐户可以有多个用户,但每个帐户只能且必须有一个所有者。一个用户只能与一个帐户相关。
我在 users
表中有一个 account
字段,它存储与用户相关的帐户的 ID。在 accounts
表中,我有一个 owner
字段,它存储拥有该帐户的用户的 ID(即主管管理员)。
我正在使用 InnoDB,因此我可以使用外键。问题是,如果没有先创建另一个帐户或用户(由于外键的限制),我无法创建帐户或用户,因此我将 owner
设置为可为空。现在我可以创建一个具有空 owner
的帐户,然后创建用户,最后将帐户上的 owner
设置为用户。
这是否可以接受,是否有更好的方法?
以下是我想到的其他一些可能的方法,以及我对每种方法的看法:
users
表中有一个 bool 值 owner
字段。由于每个帐户只能有一个所有者,这种方式似乎不太理想,因为我必须确保每个帐户只有一个用户将属性设置为 true
。
有一个名为 owners
的第三个表。这似乎是无缘无故的更多开销和更多工作,因为它实际上与 users
表中的 owner
字段相同。
我现在拥有它的方式对我来说最有意义,但是在我创建用户之前必须设置一个空所有者,然后在事后回来设置它有点尴尬。
如果您能给我任何意见,我将不胜感激。谢谢!
这个问题很相似,但是没有提到外键:Designing Tables: One to many and one to one at same time?
最佳答案
如果您的架构无法按拓扑排序,即如果您无法建立一个表仅引用排序中它前面的表的排序,则通常是一个坏主意。这种“分层”依赖性也是一个非常好的属性,例如对于软件模块(如果两个模块相互依赖,就会出现问题)。
在您的情况下,您有指向帐户的用户和指向用户的帐户,所以显然无法找到拓扑排序。
在这种情况下,一个标准的解决方案是引入一个单独的表,例如“角色”,其中包含三列:用户、帐户和角色。列角色可以是“所有者”或“访客”。
您知道(鉴于当前的请求)一个帐户必须有一个且只有一个所有者,或者一个用户必须在一个且只有一个帐户中列出的事实不是真正与领域相关的 IMO 规则“用户”和“帐户”。
您可以轻松地实现这些规则,但在我看来,将数据结构化以使您没有其他可能性是错误的。您的目标应该是为领域建模,而不是特定规则...因为人们会改变他们对这些规则是什么的看法。
您能设想一个拥有两个帐户的用户吗?您可以设想一个拥有多个所有者/管理员的帐户吗?我可以...这意味着很可能很快就会提出请求。构建数据以使其无法表示这是在自找麻烦。
此外,当您在模型中具有循环依赖性时,您的查询将更难编写。
例如,一个非常常见的情况是尝试仅使用一个表来表示分层零件列表数据库,该表的“父”字段指向表本身......多有两个更好取而代之的是零件和组件表,其中组件有两个对零件和数量的引用。
关于mysql - 同一张表上的多对一和一对一关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6681989/
目前我正在构建相当大的网络系统,我需要强大的 SQL 数据库解决方案。我选择 Mysql 而不是 Postgres,因为一些任务需要只读(MyISAM 引擎)而其他任务需要大量写入(InnoDB)。
我在 mysql 中使用如下命令。当它显示表格数据时,它被格式化为一个非常干净的表格,间距均匀且 |作为列分隔符。 SELECT * FROM TABLE_NAME; 当我从 CLI 运行命令时,如下
我知道这个问题之前已经被问过好几次了,我已经解决了很多问题,但到目前为止没有任何效果。 MySQL 试图将自身安装到的目录 (usr/local/mysql) 肯定有问题。关于我的错误的奇怪之处在于我
以下是我的 SQL 数据结构,我正在尝试如下两个查询: Select Wrk_ID, Wrk_LastName, Skill_Desc from Worker, Skill where
我们有一个本地 mysql 服务器(不在公共(public)域上),并希望将该服务器复制到我们拥有的 google 云 sql 实例。我的问题是:1.这可能吗?2.我们的本地服务器只能在本地网络上访问
我有一个表(test_table),其中一些字段值(例如字段 A、B 和 C)是从外部应用程序插入的,还有一个字段(字段 D),我想从现有表(store_table)插入其值,但在插入前者(A、B 和
我想创建一个 AWS RDS 实例,然后使用 terraform 管理数据库用户。因此,首先,我创建了一个 RDS 实例,然后使用创建的 RDS 实例初始化 mysql 提供程序,以进一步将其用于用户
当用户在我的网站上注册时,他们会在我的一个数据库中创建自己的表格。该表存储用户发布的所有帖子。我还想做的是也为他们生成自己的 MySql 用户——该用户仅有权从他们的表中读取、写入和删除。 创建它应该
我有一个关于 ColdFusion 和 Mysql 的问题。我有两个表:PRODUCT 和 PRODUCT_CAT。我想列出包含一些标记为:IS_EXTRANET=1 的特殊产品的类别。所以我写了这个
我想获取 recipes_id 列的值,以获取包含 ingredient_id 的 2,17 和 26 条目的值。 假设 ingredient_id 2 丢失则不获取记录。 我已经尝试过 IN 运算符
在 Ubuntu 中,我通常安装两者,但 MySQL 的客户端和服务器之间有什么区别。 作为奖励,当一个新语句提到它需要 MySQL 5.x 时,它是指客户端、服务器还是两者兼而有之。例如这个链接ht
我重新访问了我的数据库并注意到我有一些 INT 类型的主键。 这还不够独特,所以我想我会有一个指导。 我来自微软 sql 背景,在 ssms 中你可以 选择类型为“uniqeidentifier”并自
我的系统上有 MySQL,我正在尝试确定它是 Oracle MySQL 还是 MySQL。 Oracle MySQL 有区别吗: http://www.oracle.com/us/products/m
我是在生产 MySQL 中运行的应用程序的新维护者。之前的维护者已经离开,留下的文档很少,而且联系不上了。 我面临的问题是执行以下请求大约需要 10 秒: SELECT COUNT(*) FROM `
我有两个位于不同机器上的 MySQL 数据库。我想自动将数据从一台服务器传输到另一台服务器。比方说,我希望每天早上 4:00 进行数据传输。 可以吗?是否有任何 MySQL 内置功能可以让我们做到这一
有什么方法可以使用 jdbc 查询位于 mysql 根目录之外的目录中的 mysql 表,还是必须将它们移动到 mysql 根目录内的数据库文件夹中?我在 Google 上搜索时没有找到任何东西。 最
我在 mysql 数据库中有两个表。成员和 ClassNumbers。两个表都有一个付费年份字段,都有一个代码字段。我想用代码数字表中的值更新成员表中的付费年份,其中成员中的代码与 ClassNumb
情况:我有 2 台服务器,其中一台当前托管一个实时 WordPress 站点,我希望能够将该站点转移到另一台服务器,以防第一台服务器出现故障。传输源文件很容易;传输数据库是我需要弄清楚如何做的。两台服
Phpmyadmin 有一个功能是“复制数据库到”..有没有mysql查询来写这个函数?类似于将 db A 复制到新的 db B。 最佳答案 首先创建复制数据库: CREATE DATABASE du
我有一个使用 mySQL 作为后端的库存软件。我已经在我的计算机上对其进行了测试,并且运行良好。 当我在计算机上安装我的软件时,我必须执行以下步骤: 安装 mySQL 服务器 将用户名指定为“root
我是一名优秀的程序员,十分优秀!