我对数据库设计比较陌生,我决定制作自己的假设数据库以进行实践。但是,我无法对其进行建模和规范化,因为我认为存在许多多对多 (M:N) 关系。
该数据库旨在保留有关在塞尔达系列中工作过的各种人物的数据。我想跟踪的控制台(S) ,一个游戏可以玩上,员工是曾在部分游戏的发展,乔布斯的员工有(很多员工在不同的工作职位在多个游戏等)
我必须为涉及音乐艺术家描述的业务环境设计实体关系图 (ERD) ,我将在下面详细说明。
一个艺术家有一个名称,且必须要么一组 或一个独奏演员(但不能同时)。
一个小组由一名或多名独舞者组成,并有若干成员(应根据组成该组的独奏者人数计算)。
一个独奏演员可能是一个会员众多的群体或无的集团,并可以播放一个或多个仪器。
如何构建一个 ERD 来表示这种场景?我对它的“或”部分感到困惑。
我正在设计一个数据库来存储不同类型的用户。主要(但不完全)他们将是演员、导演和作家。目前只有四种相关的用户类型。这个数字有增加的可能性,但概率很低——在这种情况下,这个数字会非常小。
该计划是有一个users
几乎完全负责登录站点的表(name
,email
和password
列加上一两个其他的,例如它们是否已被批准,和 update_at),以及每个用户类型的附加表,每个用户类型有自己独特的一组列。例如,只有演员才有种族栏,只有导演才有简历栏,只有作家需要提供他们的位置。但是,由于我之前没有管理过如此复杂的数据库,我想知道如何组织几个方面:
首先,用户可以是上述类型中的任意一种或任意组合。所以我知道我需要像(例如)一个director_user
带有director_id
和user_id
列的表格。那么这是否足以能够按角色类型等过滤所有用户?
其次,大多数用户会选择 Twitter 个人资料和电话号码。并且所有演员都必须至少包含一个 URL,用于其他任何在线演员的个人资料;目前他们可以包括三个,但这个数字可能会增加。我是否正确假设每个可能的配置文件/联系方法的单独表格是组织数据的最佳方式?
我使用带有Sequelize 的PostgreSQL作为我的 ORM。
我有一种类型,User
。第二种类型是Group
,它可以通过一个GroupMemberships
表将任意数量的用户与其关联。User
s 也可以拥有任意数量的Group
s。
我的第三种类型 ,Playlist
可以属于 aUser
或 a group
。为这种类型设计模式以便它可以拥有一种类型的所有者或两者之一的最佳方法是什么?
我的第一遍创建了两个关联,但一次只填充一个。这可能有效,但看起来很笨拙并且使查询变得困难。
附加信息
以下是我对 MDCCL 通过评论发布的澄清请求的回应:
(1)如果一个播放列表是由给定资集团,可以说,这个播放列表是关系到一个一对多的用户,只要他们是会员这样的小组,对不对?
我相信这在技术上是正确的,但这种一对多关联并不明确存在。
(2) 那么,一个特定的播放列表是否有可能同时被一对多的群组拥有?
不, a 应该不可能被Playlist
一对多拥有Groups
。
(3) 特定播放列表是否可能由一对多组拥有,同时由不是该组成员的一对多用户拥有?
不,因为如 (2) 中的一对多 from Playlist
toGroup
不应该存在。此外,如果 aPlaylist …
在相关的业务背景,既成员和组织需要有一个帐户的资金。资金可以转移
注意事项
为了为这种场景构建数据库,我创建了以下三个表:
CREATE TABLE Members (
memberid serial primary key,
name varchar(50) unique,
passwd varchar(32),
account integer
);
CREATE TABLE Organizations (
organizationid serial primary key,
name varchar(150) unique,
administrator integer references Members(memberid),
account integer
);
CREATE TABLE TransferHistory
"from" integer, -- foreign key?
"to" integer, -- foreign …
Run Code Online (Sandbox Code Playgroud) 我正在尝试为运输公司数据库创建实体关系图。该数据库应存储有关信件、交付、将信件从一个仓库转移到另一个仓库以及历史信息的信息。它应该允许跟踪信件,例如,检查特定仓库中特定日期的信件。
我要建模的过程如下所示:
我有以下要求:
每笔交易都有以下类型之一;借记、贷记、存款或取款。
借方或贷方交易必须有链接的发票记录,并且没有银行账户记录。
存款或取款交易必须有关联的银行账户记录且无发票记录。
目前我的基本设计是这样的:
我目前的解决方案是:
我概述的哪种方法是更好的解决方案?或者还有其他更好的方法来满足我的约束吗?
我对 DB 很陌生,在被困住、研究和尝试不同的解决方案几天后,我转向这个社区的专业知识寻求帮助。
我想在我的 MSSQL 数据库中有一个 Person 表,它包含我们所有的联系人。将所有内容放在一张桌子上为我们下游提供了很多便利。挑战是我们必须按类别将 Company 表拆分为不同的表,因为我们需要为每个表提供不同的属性 - 例如,燃料供应商、发动机制造商和维护公司都有自己的表,列出所述类别中的公司,并具有自己的特定属性属性。
因此,我需要一种“一张表到多张表”的关系,其中各种 Company 表仅提供给 Person 表中的一个属性(“Company”)。目标是在 Person 记录中,可以从多个表中选择该人工作的公司 - 只有一家公司。
有没有办法实现这一目标或任何解决方法?
谢谢你的帮助!
在当前的项目中,我们正在创建一个应用程序,其中包含一些实体,例如Customer、Project、Company、Ticket、Request 等。这些模型是直截了当的。我无法理解的复杂部分如下:
我们希望有一些可以“附加”到各种对象的公共实体。一些示例包括Documents、Tags 和 Notes。对于上面提到的每个域实体,每一个都应该是可管理的。
在服务器端代码 (Java) 中,我们希望将通用功能实现为组件,并将它们重用/嵌入到我们域对象的特定编辑页面上。我们正在使用 ORM,并且还想重用那些“元数据”类。
我认为这个用例很容易用文档数据库建模。 但是如何在关系模型中做到这一点呢?
我们有一个 Postgres 设置,其中包含多个表,代表项目的不同部分和阶段,目前有 4 个,但将来可能会更多。我们想要制作一个Task
带有这些表中任何一个的外键的表。最好是这样的:
CREATE TABLE stage1(
id SERIAL PRIMARY KEY,
description TEXT);
CREATE TABLE stage2 (
id SERIAL PRIMARY KEY,
description TEXT);
CREATE TABLE stage4 (
id SERIAL PRIMARY KEY,
description TEXT);
CREATE TABLE task (
id SERIAL PRIMARY KEY,
description TEXT,
foreignkey_table VARCHAR(20),
foreignkey_id INTEGER);
Run Code Online (Sandbox Code Playgroud)
其中命名的列foreignkey_table
可以指示“父”表,并且foreignkey_id
将指示“父 ID”。
这些阶段 1 到 3 是为了使示例简单,但它们绝不能合并为一个。将它们视为“准备阶段”、“执行阶段”和“评估阶段”。或者作为完全不同的表格,如“用户”、“公司”和“活动”,每个表格都有自己特定的不重叠内容。
我怎样才能做到这一点?
我读过一些帖子,说这是不可能的,但它们已经很旧了,所以我希望在这些帖子之后实施解决方案。我还在Constraint for multiple foreign key上找到了一个潜在的解决方案,但它是互斥的 (PostgreSQL),这是我目前最好的后备选项。