我正在开发一个ASP.NET MVC应用程序,设计域模型,使用(测试)新的EF Code First功能.
我有一个活动实体可能有也可能没有截止日期,接近它的最佳方法是什么?
1物业:
public DateTime? Deadline {get; set;}
and check vs null before using
Run Code Online (Sandbox Code Playgroud)
要么
2个属性:
public DateTime Deadline {get; set;}
public bool HasDeadline {get; set;}
Run Code Online (Sandbox Code Playgroud)
起初我想到了第一个选项,但后来我开始考虑可能第二个选项对DB来说会更好......
这有什么最好的做法吗?
我正在设计一个健康SaaS应用程序,并希望在初始建模方面提供一些帮助.我开始用这个帖子确认我应该使用EAV - 由于临床数据的稀疏性,答案是肯定的.然后我开始考虑使用NoSQL选项,而不是尝试将其纳入SQL.似乎这两者的组合效果最好.我会尝试解释要求和我的想法,并会喜欢任何反馈.我正在使用.net.
要求 在最高级别,我们有一个"患者".对于需要某些医疗帮助的患者,会发生一些事情,让我们称之为"事件".对于每个"事件",可以多次看到"患者",称为"访问".根据"访问"存储所有临床数据(测试/历史/等).所以我们有:
患者1 - ∞事故1 - ∞访问1 - 1临床数据(许多潜在的键/值对)
解决方案(反馈很棒)
SQL表
Patient
- PatientID
- other patient info
Incident
- IncidentID
- PatientID
- Other incident info
Visit
- VisitID
- IncidentID
- Datetime
Run Code Online (Sandbox Code Playgroud)
NoSQL DocumentDB(可能是RavenDB)
{ // Visit document - id: visits/12345
"Patient": {
"PatientId": "patients/54321",
"Name": "John Smith"
},
"Incident": {
"IncidentId": "incidents/55555",
"Name": "Cardiac Arrest"
},
"VisitData": {
"BP": "110/70",
"Hypertension": "True"
"Cardiac Disease": "Angina"
"Stroke": "False"
.... (could be …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不支持嵌套地图和列表,我该怎么做?
我正在尝试在我的数据模型(实体框架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) 如何将“YANG”数据模型转换为“JSON”?由于网络上有很多可用的文档,因此它们将 YANG synatx 更改为 JSON,但是它们获得的叶子或叶子列表的值如何?它从哪里以及如何从 YANG 获取 JSON 中的实际数据?
我无法弄清楚如何跨多个表维护属性更新以确保数据一致性。
例如,假设我有演员和粉丝之间的多对多关系。一个粉丝可以养很多演员,一个演员也有很多粉丝。我做了几个表来支持我的查询
CREATE TABLE fans (
fan_id uuid,
fan_attr_1 int,
fan_attr_2 int
PRIMARY KEY ((fan_id))
)
CREATE TABLE actors (
actor_id uuid,
actor_attr_1 int,
actor_attr_2 int
PRIMARY KEY ((actor_id))
)
CREATE TABLE actors_by_fan (
fan_id uuid,
actor_id uuid,
actor_attr_1 int,
actor_attr_2 int
PRIMARY KEY (fan_id, actor_id)
)
CREATE TABLE fans_by_actor (
actor_id uuid,
fan_id uuid,
fan_attr_1 int,
fan_attr_2 int
PRIMARY KEY (actor_id, fan_id)
)
Run Code Online (Sandbox Code Playgroud)
假设我是一个粉丝,我在我的设置页面上,我想将 my 更改fan_attr_1为不同的值。
在fans表上,我可以很好地更新我的属性,因为应用程序知道我的 fan_id 并且可以键入它。
但是fan_attr_1,如果fans_by_actor不先查询与风扇关联的 actor_id,我就无法更改我的状态。 …
我正在为在线拍卖服务创建一个新的 REST/超媒体 API。
我将此作为练习以更好地理解领域驱动设计方法,因为在大多数情况下它似乎是一种很好的方法。
我的一些实体的示例是:Item、Listing、Bid、Purchase、BidHistory 等。我将 Listing 实体标识为一个聚合根,我计划通过它来管理 Bid、Item 等。
据我所知,聚合根的概念适用于我的持久性/域层,不应该是我的视图层的问题(在我的例子中是 JSON 或 XML 资源表示)。
是这种情况吗?如果是这样,这是否意味着通过 REST API 中的 URI 端点公开非聚合根资源仍然可以,或者我是否“被限制”为仅通过我的 API 端点公开聚合根?
我的想法是聚合根位于持久性对象的领域中,它在概念上与域模型分离,因此我应该能够公开两个 URI,例如:
GET /api/v1/listing/465489
Run Code Online (Sandbox Code Playgroud)
和
GET /api/v1/listing/465489/item
Run Code Online (Sandbox Code Playgroud)
不管 Listing 是否是 Item 的聚合根。
我在这里是正确的还是需要在开始实现任何代码之前调整我对此的理解?
architecture rest domain-driven-design data-modeling aggregateroot
假设我有一个简化的模型,其中a patient可以有零或更多events.一个事件有a category和a date.我想支持以下问题:
Find all patients that were given a medication after an operation and
the operation happened after an admission.
Run Code Online (Sandbox Code Playgroud)
药物,手术和入院是所有类型的事件类别.有大约100种可能的类别.
我期待着1000名患者,每个患者每个类别有大约10个事件.
我想出的天真的解决方案是有两张桌子,一张桌子patient和一张event桌子.创建索引event.category,然后使用内部联接查询,如:
SELECT COUNT(DISTINCT(patient.id)) FROM patient
INNER JOIN event AS medication
ON medication.patient_id = patient.id
AND medication.category = 'medication'
INNER JOIN event AS operation
ON operation.patient_id = patient.id
AND operation.category = 'operation'
INNER JOIN event AS admission
ON admission.patient_id = patient.id
AND admission.category = 'admission'
WHERE …Run Code Online (Sandbox Code Playgroud) 来自 C 世界的软件工程师闯入云空间。我试图了解我是否可以将 DynamoDB 用于我的所有场景需求,如果我根本不应该使用它,或者我是否应该将 DynamoDB 用于某些场景然后卸载到另一个数据库(可能是更传统的 RDMS)以用于其他场景。
我有一堆机器向我的 AWS API 发送遥测数据。我目前的想法是将这些事件放在 DynamoDB 表中。在第一年,我预计每天表中总共有大约 100 万个新条目(平均 > 10 个每秒),峰值时间接近每秒 100 个事件。遥测事件的大小将为 0.5-1KB。首先,我只想捕获每个遥测数据并记录下来。这大约是每天 1GB。
我会使用 RDMS,但我担心 ACID 属性,随着数据库大小的增长,我们每秒有 10 到 100 次写入,数据库访问将显着减慢。我的担心是否正确,或者传统的 RDMS 是否适合我的需求?我不觉得我需要 RDMS 的原子保证(我可以接受最终的一致性),尤其是对于读取/聚合查询。
我在想我的主键是机器 ID(分区)和时间 unix 毫秒纪元(排序键)之间的复合键。这应该支持关键场景场景,例如检索特定时间范围和一组机器的所有遥测事件列表。
但是,我还希望做其他事情,例如能够获取各种遥测事件的每日总数,例如触发机器传感器的次数(即计数)。或者列出一组机器的温度高于某个值时记录的所有遥测事件。遥测事件是异构的 - 有许多类型,例如温度、触发等,我需要能够针对给定的一组机器 ID 和时间窗口快速过滤特定类型的遥测事件。
所以你可以想象我的一个查询可能看起来像“对于这个时间窗口和这组机器,列出记录了超过 70 度的温度的所有温度(类型)遥测事件”。前 2 个约束来自我的分区 (machineId) 和排序键 (time),但后一个将查询温度和值大于 70 的所有遥测类型。这是我约束的 4 个字段。我是否应该接受可以查询 machineId 和 time 的现实,但必须从该查询返回的结果中扫描遥测类型和值?
此外,这个 dynamodb 表摄取遥测数据,但前端需要提供诸如上次接收遥测事件、上次机器服务时间、特定遥测事件的每日计数等事物的摘要信息。我不想每次在前端重新加载摘要页面时都重新查询它们。是否应该在遥测到达时计算这些聚合,然后将其存储在单独的表中(或者,如果性能需要,可以在内存中类似于 redis)。这在技术上是流处理吗?
我在网上读到好的设计通常只使用一张桌子(单桌设计),但我发现很难理解如何到达那里。在我希望能够查看单个遥测事件但也可以快速访问聚合信息的场景中,这可能没有意义。
写出这个问题后,这是我的直觉现在告诉我的:
谢谢,托马斯
data-modeling ×10
sql ×3
asp.net-mvc ×2
c# ×2
cassandra ×2
cql ×2
sql-server ×2
architecture ×1
aws-iot ×1
code-first ×1
cql3 ×1
exists ×1
json ×1
nosql ×1
performance ×1
postgresql ×1
python ×1
python-2.7 ×1
ravendb ×1
rest ×1