我有一个模型,它被它所持有的参数区别对待,例如它就像一个字符表,它也用于非玩家角色,因为它们共享所有相同的属性.所以它会有一个布尔或整数,表示它是一个玩家角色还是一个非玩家角色.并且将使用随机状态参数和名称自动生成非玩家角色.
由于两者使用的方法完全不同,我认为为它们设置不同的控制器类是合乎逻辑的,但这会使单个模型有两个不同的控制器,并且感觉有点奇怪.
这是不好的做法吗?我应该在一个控制器中完成所有编码吗?
我正在Google App Engine上编写应用程序,以帮助我更好地学习它.我将数据保存在数据存储区中.
该应用程序是类似于StackOverflow的模型:您有一个Story实体,它有一组Comment实体,而这些实体又可以被许多用户所喜欢/讨厌.我现在建模的方式如下:
class Story {
Comment[] comments;
...
}
class Comment {
User[] likes;
User[] hates;
...
}
Run Code Online (Sandbox Code Playgroud)
因此,当您加载给定的故事时,您可以列出所有评论,以及每个评论的喜欢和讨厌的百分比.您还可以跟踪给定用户是否已投票评论.
我假设我可以延迟加载Comment实体中的所有实际用户,但即便如此,我还是认为有更好的方法可以做到这一点.
这将如何处理一个有数百条评论的故事,每条评论都有数十万票?!
在NoSQL中建模这种概念的常用方法是什么?
google-app-engine data-modeling nosql google-cloud-datastore
我有活动和照片,然后评论两者.现在,我有两个评论表,一个用于与事件相关的评论,另一个用于照片评论.架构与此类似:
CREATE TABLE EventComments
(
CommentId int,
EventId int,
Comment NVarChar(250),
DateSubmitted datetime
)
CREATE TABLE PhotoComments
(
CommentId int,
PhotoId int,
Comment NVarChar(250),
DateSubmitted datetime
)
Run Code Online (Sandbox Code Playgroud)
我的问题是我是否应该将它们组合起来,并添加一个单独的交叉引用表,但我想不出有办法正确地做到这一点.我觉得这应该没事,你有什么想法?
编辑
根据沃尔特的回答(以及一些轻读),我想出了这个:
CREATE TABLE Comments
(
CommentId int,
Comment NVarChar(250),
DateSubmitted datetime
CONTRAINT [PK_Comments] PRIMARY KEY
(
CommentId
)
)
CREATE TABLE EventComments
(
CommentId int,
EventId int
)
CREAT TABLE PhotoComments
(
CommentId int,
PhotoId int
)
ALTER TABLE EventComments ADD CONSTRAINT FK_EventComments FOREIGN KEY (CommentId) REFERENCES Comments(CommentId)
ALTER TABLE PhotoComments …Run Code Online (Sandbox Code Playgroud) 我正在构建这个工具来分类数据.基本上我会定期接收平面文件中的数据行,如下所示:
a:b:c:d:e
a:b:c:d:e
a:b:c:d:e
a:b:c:d:e
Run Code Online (Sandbox Code Playgroud)
我有一个类别列表来打破这些行,例如:
Original Cat1 Cat2 Cat3 Cat4 Cat5
---------------------------------------
a:b:c:d:e a b c d e
Run Code Online (Sandbox Code Playgroud)
从右边开始,已知类别名称,以及打破数据的类别数量.但这可能会随着时间而改变(例如,添加/删除的类别......类别的总数已更改).
好的,所以我并不是真的在寻找有关如何解析行或将数据导入数据库或其他内容的帮助......我知道如何做到这一切,并且已经完成了核心脚本,以处理解析值行并分成不同数量的类别.
大多数情况下,我正在寻找有关如何构建数据库来存储这些东西的建议.所以我一直在考虑它,这就是我提出的:
Table: Generated
generated_id int - unique id for each row generated
generated_timestamp datetime - timestamp of when row was generated
last_updated datetime - timestamp of when row last updated
generated_method varchar(6) - method in which row was generated (manual or auto)
original_string varchar (255) - the original string
Table: Categories
category_id int - unique id for category
category_name …Run Code Online (Sandbox Code Playgroud) 假设我有一个持有时间戳的数据库.对于每个时间戳属性,我可以添加一个准确度属性,说明置信区间,因此存储的信息可能是,例如,"2012年7月1日12:13,+/ - 3个月".
但总的来说,录制准确性/置信度并非如此简单.家谱数据库可能需要记录一个人可能是另一个人的父亲的事实.
那么存储具有不同准确度/置信度的信息的一般原则或最佳实践是什么?
例如我的xml文件包含:
<layout name="layout1">
<grid>
<row>
<cell colSpan="1" name="cell1"/>
</row>
<row>
<cell name="cell2" flow="horizontal"/>
</row>
</grid>
</layout>
Run Code Online (Sandbox Code Playgroud)
我想从xml中检索一个对象,例如返回的对象结构就像这样
class layout(object):
def __init__(self):
self.grid=None
class grid(object):
def __init__(self):
self.rows=[]
class row(object):
def __init__(self):
self.cels=[]
Run Code Online (Sandbox Code Playgroud) 我在cassandra中呈现复杂的数据结构时遇到问题. JSON数据示例:
{
"A": {
"A_ID" : "1111"
"field1": "value1",
"field2": "value2",
"field3": [
{
"id": "id1",
"name": "name1",
"segment": [
{
"segment_id": "segment_id_1",
"segment_name": "segment_name_1",
"segment_value": "segment_value_1"
},
{
"segment_id": "segment_id_2",
"segment_name": "segment_name_2",
"segment_value": "segment_value_2"
},
...
]
},
{
"id": "id2",
"name": "name2",
"segment": [
{
"segment_id": "segment_id_3",
"segment_name": "segment_name_3",
"segment_value": "segment_value_3"
},
{
"segment_id": "segment_id_4",
"segment_name": "segment_name_4",
"segment_value": "segment_value_4"
},
...
]
},
...
]
}
}
Run Code Online (Sandbox Code Playgroud)
将仅使用一个查询: 按A_ID查找.
我认为这些数据应该存储在一个TABLE(列族)中,而不需要序列化/反序列化操作,以提高效率.如果CQL不支持嵌套地图和列表,我该怎么做?
在SQL Server 2008+中,我们希望启用对运营数据库中"客户"表的历史更改的跟踪.
这是一个新表,我们的应用程序控制所有写入数据库,所以我们不需要像触发器这样的邪恶黑客.相反,我们会将更改跟踪构建到业务对象层,但我们需要找出要使用的正确数据库模式.
行数将低于100,000,每条记录的变化数量平均为每年1.5.
我们至少有两种方法可以对此进行建模:
作为2型渐变维度称为表CustomersHistory,以列EffectiveStartDate,EffectiveEndDate(设置为NULL为客户的当前版本),以及审计列像ChangeReason和ChangedByUsername.然后我们构建一个Customers过滤到该表的视图EffectiveEndDate=NULL.我们的应用程序的大多数部分将使用该视图进行查询,并且只有需要具有历史记录功能的部分才会查询基础表.为了提高性能,我们可以实现视图和/或在EffectiveEndDate = NULL上添加过滤索引.
使用单独的审计表.对Customer记录的每次更改都会一次写入Customer表并再次写入CustomerHistory审计表.
通过快速回顾StackOverflow问题,#2似乎更受欢迎.但这是因为大多数数据库应用程序必须处理遗留和流氓作家吗?
鉴于我们从一个空白的板岩开始,这两种方法的优点和缺点是什么?你会推荐哪个?
我正在尝试在我的数据模型(实体框架6,代码优先方法)中实现异构关联.
我有一个现有的类结构,让我们称之为Tree,Branch和Leaf.A Tree可以有许多Branch对象,并且Branch可以包含许多Leaf对象.三个级别之间的关系具有cascade-delete行为(删除分支,您还删除叶子等).
现在,我试图让用户在每个级别上添加类似注释的对象.我有一些与数据建模有关的问题,因为我希望3种实体类型中的每一种都能够有很多注释,每条注释都属于一个且只有一个条目.我也希望所有评论都在同一张表中.我尝试了两种不同的方法:
实现继承使得Comment(摘要)可以是一个TreeComment,BranchComment或者LeafComment,下面的每层次结构表(TPH)的方法(如看到的那样,例如,在这里),其具有一个抽象类(的Comment征求意见),然后将其导出到TreeComment,BranchComment等这是通过编码这样的模型来实现的:
public abstract class Comment
{
// ID
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid ID { get; set; }
}
public class TreeComment: Comment
{
// Foreign Keys
public Guid TreeID { get; set; }
// Navigation Properties
public virtual Tree …Run Code Online (Sandbox Code Playgroud) 每次我用EF创建一个新的数据模型时,我都必须输入TT文件并替换每次出现的ICollection和第一次出现的HashSet for ObservableCollection以及名称空间Generic for ObjectModel.
这个过程在互联网上进行了描述(" 延迟加载 "部分正上方的项目符号列表),对于新技术的缺点似乎是一种愚蠢的解决方法,随着时间的推移应该得到补救而不是必需的.
是否可以自动创建可观察的集合,或者描述的方法是最有效且通常应用的?
c# collections entity-framework data-modeling observablecollection
data-modeling ×10
sql ×3
c# ×2
sql-server ×2
asp.net-mvc ×1
cassandra ×1
collections ×1
cql ×1
cql3 ×1
mysql ×1
nosql ×1
objectify ×1
python ×1
scd ×1
xml ×1