我即将着手开发一个Web应用程序项目.
我想尽早得到一些东西,经常让早期采用者玩和反馈.
但我设想数据模型随着项目的进展而变化,我对系统的理解也有所改善.
我应该如何管理适当更新数据模型和防止早期采用者丢失数据的困境?我应该简单地提出一个警告"用户要小心",还是应该努力创建迁移脚本?
我正在现有的Rails站点上进行维护工作,并且遇到了来自多对多关联的一些问题.看起来该站点最初是has_and_belongs_to_many为了一些关系而构建的,这些关系后来在业务逻辑中变得更加复杂,所以我需要使用它has_many :through来支持关系表中的其他字段.但是,最初用于HABTM的连接表没有主键,我必须添加一个以支持单独的关系建模has_many :through.
将主键添加到包含大量数据的现有表的最佳方法是什么?还有另一种方法可以做我正在尝试的事情吗?
顺便提一下,系统在Oracle上运行.
谢谢!
贾斯汀
更新11/9/09 3:58 pm:我不是Oracle专家,并且已经迷失在Oracle版本的非null,自动增量等等.最初我尝试通过添加一个新字段作为主键来执行Mike和Corey所建议的操作,但Oracle不允许我将非空字段添加到非空表(ORA-01758).然后我将数据导出为SQL,删除行,添加PK并将其设置为非null,然后尝试导入数据,但我不断收到"无法将NULL插入id ..."的错误. (ORA-01400).
最后,我尝试使用迁移,正如Corey在他的评论中所建议的那样,但是当我手动更改数据库时,rake遇到了Oracle抛出的相同错误("无法将非空字段添加到非空表").我清理了表,运行了迁移(有效),然后尝试重新导入数据,但是上次我尝试导入时遇到了相同的错误("无法将NULL插入id ...").如何保存数据并添加我需要的主键?我知道有可能写一个rake任务,但我不确定如何继续前进.有任何想法吗?
我一直在阅读和观看有关MVC的视频,我开始有点困惑.简单的教程太简单了,它们似乎只涉及一个数据库表.哎呀!
高级教程假设存在大量知识,我无法遵循这些知识.更不用说,有15种方法可以模拟您的数据库,没有人想解释为什么他们这样或那样做.
所以,我正在寻找一个简单的教程或解释你将要设计一个涉及多对多关系的简单CRUD应用程序的过程,如下所述.我可能没有提供足够的信息,因此请随时请求更新.
更新: 我有兴趣看到Linq To Sql解决方案.
我查看了nerddinner PDF,我的模型与他的模型有点不同.我希望与我的膳食和我的成分有多对多的关系.他只使用1对多的晚餐和RSVP.此外,他从未展示过如何将RSVP附加到他的晚餐模型中.这基本上是我遇到的问题.为什么我的膳食模型不包含成分列表?我有适当的外键.我不知道我在哪里或如何设置它以便我可以通过Meal模型访问成分,如果我想在细节视图或其他东西上打印它们.
假设您有多个"事物",每个事物都附有一个或多个注释.例如,产品和订单.如何构建表格......
顺便说一句,使用SQL Server 2008.
想法,意见?
我正在为我的网站构建社交图.用户将创建关系(表单跟随者/关注者),其中每个方可以独立地跟随另一方.我的用户表看起来像这样:
Users table
- UserId (PK, Auto-incrementing integer)
Run Code Online (Sandbox Code Playgroud)
考虑如何对此进行建模,我提出了几种替代方案,例如:
(a)表格将每个"跟随"行动视为一个单独的行.
Relationships table
- FollowerId (FK to Users.UserId)
- FollowedId (FK to Users.UserId)
Run Code Online (Sandbox Code Playgroud)
这有一个缺点,即给定许多用户,它会产生大量的行.
(b)表格保存每个用户关注的用户列表,如CSV或其他结构:
Relationships table
- FollowerId (FK to Users.UserId)
- FollowingUsers (e.g. 2,488,28,40)
Run Code Online (Sandbox Code Playgroud)
这样做的缺点是查询会更复杂(而且代价高昂?).我还必须维护字符串值的排序等...
(c)每行的关系,用户可能位于关系的"侧":
Relationships table
- Party1Id (FK to Users.UserId)
- FollowingParty2 (boolean)
- Party2Id (FK to Users.UserId)
- FollowingParty1 (boolean)
Run Code Online (Sandbox Code Playgroud)
这会将行保存在(a)上,但查询更复杂,因为用户可能是任何一方.
(d)将"跟随"和"跟随"放在如(b)之类的列表中
Relationships table
- UserId (FK to Users.UserId)
- FollowingUsers (e.g. 2,488,28,40)
- FollowedBy (e.g. 2,488,28,40)
Run Code Online (Sandbox Code Playgroud)
这似乎是所有世界中最好的,但现在我必须使用事务来更新多行.
假设我希望扩展到一个大尺寸,虽然意识到"Facebook的问题不是我的问题" - 哪个选项,或者其他选项是首选?
我在我的数据库表2 orders和orderHistory.
----------------- -----------------------
| orders | | orderHistory |
----------------- -----------------------
| orderID (PK) | | historyLineID (PK) |
| orderDate | | status |
| price | | quantity |
----------------- -----------------------
Run Code Online (Sandbox Code Playgroud)
现在一个order可以有多个history lines.但是,一个history line不可能自己存在.我听说这个被称为弱实体,因此PK从orders必须的一部分PK台orderHistory.
问题
order到表中orderHistory并使其成为复合主键吗?orderHistory,我将如何添加新的复合键?(orderID可从表中获得orders,但historyLineID应自动递增.)orderID添加为外键只 …我正在使用具有相关类,对象属性等的OWL本体来建模大学数据.我将大学数据放在一个简单的文本文件中(比如CSV).我想使用我的模型为这些数据创建本体.我的问题是:
我想在追求这种关联之前确保我的方法是正确的.实施听起来太复杂了,所以我认为我的计划肯定有问题.我正在使用结构化(SQL)数据存储,符合rails存储约定.我所拥有的是用户模型,它在模式中有一个电子邮件地址password_digest和名称.
class User < ActiveRecord::Base
has_many :posts
end
Run Code Online (Sandbox Code Playgroud)
我想实现has_many与朋友集合的关联,以便用户可以belong_to用户(作为朋友).我希望能够User.last.friends.last在正确构建和填充后返回User对象.
我相信我可以为这个协会创建一个模型,如:
Class Friend < ActiveRecord::Base
belongs_to :user
belongs_to :friendlies, class: 'User'
end
Class User < ActiveRecord::Base
has_many :posts
has_many :friends
has_many :friendly, class: 'Friend'
end
Run Code Online (Sandbox Code Playgroud)
但我认为这需要我添加一个关于模型和查询使用User.last.friends.last.user 所以我在想的是这是一种has_and_belongs_to_many关系.我可以逃脱以下(或类似的东西):
class User < ActiveRecord::Base
has_and_belongs_to_many :friends, class: 'User'
end
Run Code Online (Sandbox Code Playgroud)
我发现了这个:
class User < ActiveRecord::Base
has_many :user_friendships
has_many :friends, through: :user_friendships
class UserFriendship < ActiveRecord::Base
belongs_to :user
belongs_to :friend, class_name: 'User', foreign_key: …Run Code Online (Sandbox Code Playgroud) 我们计划使用Keen作为我们的跟踪核心,但结合请求和提取数据对我们来说是一件大事.
例如,如果我们有一个名为的集合pageviews,其中一个用户作为它的属性(如:){"name": "pageviews", "properties":{"user":{"id":"4242"},"url":"https://keen.io/"}},另一个集合内部purchases具有相同的user属性:
我们如何才能获得至少访问过3次网址且已完成另一项"购买"活动的唯一身份用户数量?
我们怎样才能提取这些人?是否可以使用Amazon S3数据复制执行此操作?(与亚马逊雅典娜?)."提取"功能似乎不能满足我们的提取问题,因为我们不能应用"分组依据"语句,我们不能将多个事件组合起来进行提取(我错了吗?).
我们的目标是不仅将Keen用作统计分析器,还将其作为分段/提取使用的强大数据支持.
有人在最近的采访中被问到一个有趣的问题.
Do I know him?每个用户的问题.如果用户通过6个级别的朋友连接,则用户"知道"另一个用户.如A朋友B,B是朋友C,C是朋友D,D是朋友E,E是朋友F.所以我们可以这么说,A知道F.
显然,您无法使用BFS或其他标准遍历技术有效地解决此问题.问题是 - 如何在数据库中存储此数据结构以及如何快速执行此搜索.
data-modeling ×10
database ×3
sql ×2
algorithm ×1
asp.net-mvc ×1
graph ×1
keen-io ×1
math ×1
mysql ×1
ontology ×1
ora-01400 ×1
oracle ×1
owl ×1
primary-key ×1
rdf ×1
scalability ×1
semantic-web ×1