我对数据库设计比较陌生,我决定制作自己的假设数据库以进行实践。但是,我无法对其进行建模和规范化,因为我认为存在许多多对多 (M:N) 关系。
该数据库旨在保留有关在塞尔达系列中工作过的各种人物的数据。我想跟踪的控制台(S) ,一个游戏可以玩上,员工是曾在部分游戏的发展,乔布斯的员工有(很多员工在不同的工作职位在多个游戏等)
我在重新创建Users和Items之间具有一对多(1:M)关系的数据库时遇到了一些麻烦。
这很简单,是的;但是,每个Item 都属于某个类别(例如,汽车、船或飞机),并且每个类别都有特定数量的属性,例如:
Car
结构体:
+----+--------------+--------------+
| PK | Attribute #1 | Attribute #2 |
+----+--------------+--------------+
Run Code Online (Sandbox Code Playgroud)
Boat
结构体:
+----+--------------+--------------+--------------+
| PK | Attribute #1 | Attribute #2 | Attribute #3 |
+----+--------------+--------------+--------------+
Run Code Online (Sandbox Code Playgroud)
Plane
结构体:
+----+--------------+--------------+--------------+--------------+
| PK | Attribute #1 | Attribute #2 | Attribute #3 | Attribute #4 |
+----+--------------+--------------+--------------+--------------+
Run Code Online (Sandbox Code Playgroud)
由于属性(列)数量的这种多样性,我最初认为为每个Category创建一个单独的表是个好主意,因此我会避免多个NULL,从而更好地利用索引。
虽然一开始看起来不错,但我找不到通过数据库创建Items和Categories之间关系的方法,因为至少以我作为数据库管理员的经验来看,在创建外键时,我明确地通知了数据库表名和列。
最后,我想要一个可靠的结构来存储所有数据,同时拥有所有方法来列出用户可能通过一个查询拥有的所有 …
我必须为涉及音乐艺术家描述的业务环境设计实体关系图 (ERD) ,我将在下面详细说明。
一个艺术家有一个名称,且必须要么一组 或一个独奏演员(但不能同时)。
一个小组由一名或多名独舞者组成,并有若干成员(应根据组成该组的独奏者人数计算)。
一个独奏演员可能是一个会员众多的群体或无的集团,并可以播放一个或多个仪器。
如何构建一个 ERD 来表示这种场景?我对它的“或”部分感到困惑。
有人能帮我理解这个用户对CustomerLocation表的回答吗?我真的想要一个在订单表中存储地址的好方法。
我正在寻找的是如何设置我的地址,以便在我编辑它们时,订单不受客户更新地址或搬迁这一事实的影响。
就目前而言,我的架构看起来类似于:
Person |EntityID|
EntityAddress |EntityID|AddressID|
Address |AddressID|AddressType|AddressLine1|AddressLine2|
Order |OrderID|BillingAddressID|
Run Code Online (Sandbox Code Playgroud) 我正在学习成为 Java 开发人员的课程。
该课程涉及使用数据库,但不幸的是,我们从未真正设计过任何数据库。
大多数情况下,我们会获得预制的数据库,并且必须在其上实现代码以插入、更新、读取或删除数据。
但是当我的最终测试到来时,我很可能会制作涉及数据库的东西,因此我想尝试设计一些较小的东西来掌握设计的窍门,因为我注意到一个好的数据库设计在以下情况下会产生很大的不同编写代码以使用它。
我希望这些类型的问题在这里是允许的,而且不会太宽泛。
这是我为一些简单的东西而制作的小设计clubs
,members
带有addresses
和phonenumbers
。
- 会有多个俱乐部。
- 每个俱乐部都会有多个成员(显而易见)
- 一个会员不能是多个俱乐部的成员
- 一个成员可以有多个电话号码和电子邮件地址
- 一个会员只能有一个地址
- 一个地址可以属于不同的成员(夫妻或兄弟姐妹)
我最大的困惑:
如果我想在
Club
描述所有者的列中添加一个列,谁也将成为成员,在不将同一成员列出两次的情况下,最好的方法是什么?我应该将所有表放在 id 的自动增量上还是这是一个坏主意?(优点/缺点?)
如果我在外键选项卡中添加外键,这些外键会自动对应于正确的表还是我也必须将这些添加到列中?(见图2)
和我可能是noobiest 的问题...我把外键
phonenumber
和
(我很抱歉图片中的语言不是英语,我希望这不是什么大问题)
我使用带有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 …
我们正在构建的软件有“客户”。客户可以是个人或组织。
我真的很想为此创建一个最佳模式。
我有这些考虑。
我希望应用程序能够适当地扩展,因此架构应该适合此选择。
我正在尝试实现以下目标。
SELECT * FROM Customers + a few joins.
1. Person | NULL | John Doe | Primary Organisation Contact | Primary Address
2. Organisation | Acme Ltd | Jane Doe | Primary Organisation Contact | Primary Address
Run Code Online (Sandbox Code Playgroud)
我应该如何创建一个最佳模式来关联上述内容?
我附上了一个粗略的 Visual Schema 层次结构 - 我知道我离得很远!!我确定我犯了错误。
是否有可能根据是个人还是组织来获得一组已婚结果?
将个人和联系人/地址加入客户很简单,但您如何加入组织的主要联系人/地址?
有没有更简单的方法来实现我的蜘蛛图外观架构。??
我正在处理的应用程序的核心功能似乎只是关联实体。因此,一对多关系会产生“元数据”,这些“元数据”只会为我们的应用程序功能提供(以一种或另一种方式)关联实体。
现在我们有一个实体关系图 (ERD),它有很多一对多(超过 10 个表)和只有一个关联实体。它对该模型或应用程序有何看法?
是否可以改进,即,如果改进 ERD 以添加更多关联实体,应用程序是否可以绕过更多功能?
关联实体很少是否意味着应用程序的功能不会很丰富?
其他注意事项
我想知道的是:如果项目范围说明书导致 ERD 只有一个多对多关系和十几个一对多关系,那么这是否意味着该项目没有解决很多问题(功能)除了只数字化大量数据?
我认为,如果多对多较少,它们一开始只会镜像(除非我们为其他目的创建连接查询......)。
或者简单地说:大量的多对多关联是否意味着软件的功能将比少对多的软件更丰富(不要在这个想法中包括连接查询)?
我正在做一个个人项目,我想在其中创建一个数据库,其中包含每个上市公司的每个所有者的信息。例如,说“Sears INC”,程序将获取“Sears INC”中每个所有者的信息。这就是想法。但是我很难构建这个数据库。我对这个主题只有有限的经验和知识,所以任何指导将不胜感激。
现在我首先考虑制作一个名为公司的表格,并为它们提供所有唯一的 ID,并为每个公司制作一张表格。然后在这些表中将是所有所有者及其唯一 ID。这将链接到他们的信息。我试图在这里形象化:
现在我知道为每个公司创建一个表会很乏味,但我想不出任何其他方法来做到这一点。众所周知,每个公司可能有相同的所有者,因此使用 Owner_ID 来识别每个所有者是有意义的。
我在一个 CVS 文件中有所有其他数据,在我构建了数据库之后,我可以很容易地将这些数据导入到 PostgreSQL 中。
任何帮助将不胜感激。
TL:博士;创建一个可按公司名称搜索的股票所有者数据库,并且需要帮助来构建数据库以实现最大效率。
一个人只能有一个电话和一个地址。公司也是如此,因为我制作了一个脚本,可以根据这些信息查找电话。我区分知道一个实体是公司还是个人的方法是使用名为 F_Org 的列,该列对于公司来说将大于 4 位数字。这一切都由脚本处理。
mysql ×3
postgresql ×3
subtypes ×3
erd ×2
foreign-key ×2
many-to-many ×2
architecture ×1
primary-key ×1
schema ×1