标签: data-modeling

模拟客户< - >地址的最佳方式

每个人Customer都有一个实际地址和一个可选的邮寄地址.你最喜欢的模型是什么?

选项1. Customer具有外键Address

   Customer   (id, phys_address_id, mail_address_id)
   Address    (id, street, city, etc.)

选项2. Customer具有一对多关系Address,其中包含用于描述地址类型的字段

   Customer   (id)
   Address    (id, customer_id, address_type, street, city, etc.)

选项3.地址信息被去规范化并存储在 Customer

   Customer   (id, phys_street, phys_city, etc. mail_street, mail_city, etc.)

我最重要的目标之一是简化对象关系映射,所以我倾向于第一种方法.你的想法是什么?

sql orm database-design data-modeling

20
推荐指数
3
解决办法
1万
查看次数

我应该在哪里存放外键?

如果我在两个表之间有关系(两个表都有自己的主键),那么应该指导我决定哪个表应该存储外键?我知道这种关系的本质可能很重要(一对一,一对多,多对多,单向,双向),而且访问模式也很重要.虽然做出决定的系统方法是什么?

mysql database database-design data-modeling

20
推荐指数
3
解决办法
1万
查看次数

关系与非关系数据建模 - 有什么区别

我是数据库的新手,我从未使用过任何RDBMS.但是我得到了关系数据库的基本概念.至少我想我做;-)

假设我有一个用户数据库,每个用户都有以下属性:

  • 用户
    • ID
    • 名称
    • 压缩

关系数据库中,我将在一个名为的表中对其进行建模user

  • 用户
    • ID
    • 名称
    • LOCATION_ID

并有一个名为的第二个表 location

  • 地点
    • ID
    • 压缩

并且location_idlocation表中条目的外键(引用).如果我理解正确的优势就在这里,如果某个城市的邮政编码发生变化,我只需要改变一个条目.

那么,让我们去非关系型数据库,在那里我开始使用Google App Engine.在这里,我真的会对它进行建模,就像它在规范中首先写下来一样.我有一种user:

class User(db.Model):
    name = db.StringProperty()
    zip = db.StringProperty()
    city = db.StringProperty()
Run Code Online (Sandbox Code Playgroud)

优点是我不需要加入两个"表",但缺点是,如果邮政编码改变,我必须运行一个遍历所有用户条目并更新邮政编码的脚本,对吗?

因此,现在Google App Engine中还有另一个选项可供使用ReferenceProperties.我可以有两种:userlocation

class Location(db.Model):
    zip = db.StringProperty()
    city = db.StringProperty()

class User(db.Model):
    name = db.StringProperty()
    location = db.ReferenceProperty(Location)
Run Code Online (Sandbox Code Playgroud)

如果我没错,我现在拥有与上述关系数据库完全相同的模型.我现在想知道的是,首先,我所做的是错误的,这会破坏非关系型数据库的所有优点.我明白,为了获得zip和城市的价值,我必须运行第二个查询.但在另一种情况下,要对邮政编码进行更改,我必须运行所有现有用户.

那么这两种建模可能性在Google数据存储区等非关系数据库中的含义是什么呢?它们的典型用例是什么,这意味着何时我应该使用一个,另一个使用何时.

另外作为一个额外的问题,如果在非关系数据库中我可以建模与关系数据库中的模型完全相同的模型,为什么我应该使用关系数据库呢?

很抱歉,如果其中一些问题听起来很幼稚,但我相信他们会帮助一些对数据库系统不熟悉的人,以便更好地理解.

google-app-engine data-modeling non-relational-database relational-database

20
推荐指数
3
解决办法
8010
查看次数

数据库设计的递归关系

考虑这种情况,我正在尝试为公司建模数据库:

  • 实体:Employees,Managers,Departments.
  • 一个Employee只有1作品DepartmentDepartment可能有许多Employees在它的工作.
  • A Manager可以只管理1个Department,类似的Department可能只有1个Manager.
  • 一个Manager监督很多Employees,但一个Employee只由一个监督Manager.

现在我有两种方法来模拟这个:

第一解决方案

我会考虑Manager实体继承Employee实体,考虑到我将保留管理者独有的数据(例如奖金和状态).

第一解决方案

  • 由于之间的关系Department,并Employee1:N后来我就把这 Department Id作为一个外键Employee表的Works 关系.

  • 由于之间的关系Department,并Manager1:1后来我就把这 Department Id作为一个外键Manager表的Manages 关系.

问题:我如何表示Manager和之间的递归关系Employee


二解决方案:

我认为Manager不需要实体其他Employees …

sql database database-design erd data-modeling

20
推荐指数
1
解决办法
3万
查看次数

数据库约束 - 保持还是忽略?

当我在大学学习时,他们教我们数据库的基础知识,基础知识和规则,其中一个最重要的规则是约束(主键,外键),以及如何建立1-m,1-1,mn关系.

现在,当我转向真实的商业环境时,他们告诉我:你应该忘记你所教过的一切; 没有约束,所有这些关系都是逻辑的,没有主键,没有外键,你可以通过代码制定约束.

我不知道谁是对的:我在学术生活中学到了什么,或者在新的现实生活中学到了什么.你怎么看?

database database-design data-modeling data-integrity

19
推荐指数
5
解决办法
2025
查看次数

从现有Oracle数据库生成数据库图表/ ER图的工具?

寻找工具(windows平台)从现有的Oracle数据库中生成ER图(或类似的).
有哪些好的工具可以免费使用或成本低廉?

oracle reverse-engineering data-modeling documentation-generation er-diagram

18
推荐指数
4
解决办法
9万
查看次数

确定一组日期的事件重复模式

我正在寻找一个模式,算法或库,它将采用一组日期并返回一个退出的描述,如果一个退出,即集[11-01-2010,11-08-2010,11-15-2010 ,11-22-2010,11-29-2010]会产生类似"11月的每个星期一".

有没有人见过这样的事情,或者对实施它的最佳方法有任何建议?

algorithm design-patterns data-modeling data-structures

18
推荐指数
1
解决办法
3474
查看次数

Xcode一致性错误:设置No Action Delete Rule ...是一项高级设置

在Xcode中创建数据模型后,它会为每个对象关系抛出以下错误:

Consistency Error:
Setting the No Action Delete Rule on [object relationship] is an advanced setting
Run Code Online (Sandbox Code Playgroud)

什么是Xcode试图告诉我,我该如何回应?

iphone xcode core-data data-modeling objective-c

18
推荐指数
2
解决办法
8055
查看次数

如何使用DynamoDB(NoSQL)为学生/类建模

我正在尝试使用DynamoDB和NoSQL.

对于我需要建立学生与班级关系这一事实,对学生表和班级表进行建模的最佳(对吗?)方法是什么?我考虑到DynamoDB中没有第二个索引可用.

该模型需要回答以下问题:

哪个学生在特定班级?

学生参加哪些课程?

谢谢

database data-modeling nosql amazon-dynamodb

18
推荐指数
1
解决办法
9462
查看次数

处理函数式编程中的增量数据建模更改

在我作为开发人员的工作中我必须解决的大多数问题都与数据建模有关.例如,在OOP Web应用程序世界中,我经常需要更改对象中的数据属性以满足新的要求.

如果我很幸运,我甚至不需要以编程方式添加新的"行为"代码(函数,方法).相反,我可以通过注释属性(Java)来声明添加验证甚至UI选项.

在函数式编程中,由于模式匹配和数据构造函数(Haskell,ML),添加新数据属性似乎需要大量代码更改.

如何最大限度地减少此问题?

这似乎是一个公认的问题,因为Xavier Leroy在"对象和类与模块"的第24页很好地说明 - 总结那些没有PostScript查看器的人,它基本上说FP语言比OOP语言更好地添加新的对数据对象的行为,但OOP语言更适合添加新的数据对象/属性.

FP语言中是否有任何设计模式可以帮助缓解此问题?

我已经阅读了Phillip Wadler 建议使用Monads来帮助解决这个模块化问题,但我不确定我是怎么理解的?

oop ocaml haskell functional-programming data-modeling

17
推荐指数
3
解决办法
2709
查看次数