我应该何时考虑将主键表示为classes?
当表使用复合键时,我们是否只应将主键表示为类?
例如:
public class PrimaryKey
{ ... ... ...}
然后
private PrimaryKey _parentID;
public PrimaryKey ParentID
{
get { return _parentID; }
set { _parentID = value; }
}
和
public void Delete(PrimaryKey id)
{...}
我应该何时考虑将数据作为逗号分隔值存储在数据库表的列中,而不是将它们存储在不同的列中?
答案 0 :(得分:8)
When should I consider representing the table-id columns as classes?
如果不了解您的应用程序架构,则难以回答。如果您使用ORM(如nhibernate或linq to sql),它们将自动为您创建类。
一般情况下 - 如果您的主键是复合词并且在您的域中具有意义,请为其创建一个类。
如果它不是复合词,则不需要课程。
如果它在你的域中没有任何意义,那么很难证明一个类(如果创建一个,我可能会使用结构而不是类,因为它将是一个值类型)。我使用一个的唯一原因是,如果密钥需要在代码中使用,并且组成部分通常不需要单独访问。
When should I consider storing data as comma-separated values in a column in a DB table rather than storing them in different columns?
。
从不。您应该保留表normalized,以便为不同的数据保留不同的列和表。在这方面,使用逗号分隔是不好的做法,特别是考虑到SQL中相当糟糕的文本操作支持。
答案 1 :(得分:1)
你是什么意思?我应该何时考虑代表 table-id列为类?
我应该何时考虑将数据存储为 以逗号分隔的值 数据库表而不是存储它们 不同的栏目?
根据Normalization Rules,您不应在同一列中存储多个值。
答案 2 :(得分:1)
字段中的逗号分隔值(或任何其他类似的技巧)是不好的做法,并且经常使用或作为权宜之计(即,当更改数据模型为时已太晚时,您发现需要多值)或一些遗产。
通过在字段中“加密”多值,您将失去拥有RDBMS模型的所有好处:特别是您可以在逗号分隔字段中查找/排序/比较值(如果不是不可能的话)其余的数据。
答案 3 :(得分:1)
在几乎所有情况下,都应该将每个以逗号分隔的值存储在自己的列中。这使SQL选择能够按特定的逗号分隔值过滤行。
例如,如果每个表行的12个逗号分隔值可用于表示每月销售额(1月至12月),则将数字存储在12列中可以进行操作;如:返回8月销售的所有行> $ 100,000.00。如果将所有12个值“填充”到一个列中,则需要返回所有行,并为每行解析列以提取8月数字。
可以考虑“填充”的一个示例...其中逗号分隔数据集中的值无法与另一行的数据相关或进行比较。
例如,在多项选择问卷中,答案将是一个或多个选项。给出一个正确答案的问题是选项A&选项B和第二个问题,正确答案选项B&选项C然后可以考虑将每个答案填充到一个列中。在这个例子中,如果一个人接受没有必要的案例来比较答案,那么就可以存储“B,C”和“B& C”。答案 4 :(得分:1)
我可能考虑使用自定义类作为“主键”的唯一情况是对使用复合键的旧数据库使用OR / M.
答案 5 :(得分:0)
首先不确定你在寻找什么。我将业务对象创建为映射到我的数据层的类,该数据层通常是包含数据的数据表。
第二个问题永远不会。在很少的情况下,我会存储以逗号分隔的列表,而不是创建规范化的数据结构。