标签: database-design

为什么使用多列作为主键(复合主键)

这个例子来自w3schools.

CREATE TABLE Persons
(
    P_Id int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255),
    CONSTRAINT pk_PersonID PRIMARY KEY (P_Id,LastName)
)
Run Code Online (Sandbox Code Playgroud)

我的理解是两个列在一起(P_IdLastName)代表表的主键Persons.它是否正确?

  • 为什么有人想要使用多列作为主键而不是单列?
  • 可以将多少列一起用作给定表中的主键?

ddl database-design primary-key relational-database database-table

102
推荐指数
3
解决办法
15万
查看次数

将邮政地址存储在数据库(RDBMS)中的最佳做法?

在RDBMS中存储邮政地址的最佳实践是否有任何好的参考?似乎有很多可以做出的权衡,并且每个都有很多优点和缺点需要评估 - 当然这已经一次又一次地完成了吗?也许有人至少写过一些在某处学到的经验教训?

我所讨论的权衡的例子是将邮政编码存储为整数与char字段,如果房屋号码存储为单独的字段或地址行1的一部分,如果套房/公寓/等号码被标准化或仅存储为地址行2中的文本块,如何处理zip +4(单独的字段或一个大字段,整数与文本)?等等

我现在主要关注的是美国地址,但我想有一些最好的做法可以帮助你做好全球化的可能性(例如,将地域命名为区域而不是州或邮政编码,而不是邮政编码,等等

database database-design types postal-code street-address

100
推荐指数
9
解决办法
8万
查看次数

如何将列表存储在数据库表的列中

所以,每迈赫达德的回答一个相关的问题,我得到它是一个"正确"的数据库表列中不存储列表.相反,您应该创建另一个表,该表有效地保存所述列表的元素,然后直接或通过联结表链接到它.但是,我想要创建的列表类型将由唯一项组成(与链接问题的结果不同)例).此外,列表中的项目是显式排序的 - 这意味着如果我将元素存储在另一个表中,我每次访问它时都必须对它们进行排序.最后,该列表基本上是原子的,因为任何时候我希望访问列表,我将要访问整个列表而不仅仅是它的一部分 - 因此,必须发出数据库查询以聚集在一起的部分似乎很愚蠢列表.

AKX的解决方案(上面链接)是序列化列表并将其存储在二进制列中.但这似乎也不方便,因为这意味着我不得不担心序列化和反序列化.

有没有更好的解决方案?如果没有更好的解决办法,那么为什么呢?看来这个问题应该不时出现.

...更多信息让你知道我来自哪里.一旦我刚刚开始理解SQL和数据库,我就开始使用LINQ to SQL了,所以现在我有点被宠坏了因为我希望能够处理我的编程对象模型而不必考虑对象如何被查询或存储在数据库中.

谢谢大家!

约翰

更新:所以在我得到的第一批答案中,我看到"你可以使用CSV/XML路线......但不要!".所以现在我正在寻找原因的解释.请给我一些很好的参考.

另外,为了让您更好地了解我的目标:在我的数据库中,我有一个Function表,它将包含(x,y)对的列表.(该表还有其他信息对我们的讨论没有影响.)我永远不需要看到(x,y)对列表的一部分.相反,我将采取所有这些并在屏幕上绘制它们.我将允许用户拖动节点以偶尔更改值或向绘图添加更多值.

sql linq linq-to-entities database-design linq-to-sql

99
推荐指数
6
解决办法
14万
查看次数

何时使用View而不是Table?

应该何时在实际的表上使用View?我应该期望这会产生什么收益?

总的来说,在表格上使用视图有什么好处?我不应该以视图首先看起来的方式设计表格吗?

sql database-design view

98
推荐指数
8
解决办法
9万
查看次数

PostgreSQL表有多大?

我正在为我的公司设计一个RoR项目,我们的开发团队已经就设计,特别是数据库进行了一些争论.

我们有一个Message需要持久化的模型.这是一个非常非常小的模型,除了id之外只有三个db列,但是当我们开始生产时可能会有很多这样的模型.我们每天看多达1,000,000次插入.只能通过两个可以索引的外键来搜索模型.同样,模型永远不会被删除,但我们也不必在它们大约三个月后保留它们.

那么,我们想知道的是,如果在Postgres中实现此表会产生重大的性能问题吗?有没有人有非常大的SQL数据库的经验告诉我们这是否会有问题?如果是这样,我们应该选择哪种替代方案?

sql postgresql performance database-design ruby-on-rails

96
推荐指数
2
解决办法
7万
查看次数

在数据库中存储时间(hh:mm)的最佳方法

我想将时间存储在数据库表中,但只需要存储小时和分钟.我知道我可以使用DATETIME并忽略日期的其他组件,但是如果不存储比我实际需要的更多信息,最好的方法是什么?

database sql-server datetime database-design

93
推荐指数
4
解决办法
12万
查看次数

Ruby on Rails中多列的索引

我正在实现跟踪用户阅读的文章的功能.

  create_table "article", :force => true do |t|
    t.string   "title"
    t.text     "content"
  end
Run Code Online (Sandbox Code Playgroud)

这是我到目前为止的迁移:

create_table :user_views do |t|
  t.integer :user_id
  t.integer :article_id
end
Run Code Online (Sandbox Code Playgroud)

始终会查询user_views表以查找两列,而不仅仅查找一列.我的问题是我的索引应该是什么样子.这些表的顺序是否存在差异,是否应该有更多选项或其他.我的目标数据库是Postgres.

add_index(:user_views, [:article_id, :user_id])
Run Code Online (Sandbox Code Playgroud)

谢谢.

更新:
因为只有一行在两列中都包含相同的值(因为在知道user_id是否读过article_id时),我应该考虑:unique选项吗?如果我没有弄错,那意味着我不必自己进行任何检查,只需在用户访问文章时插入即可.

indexing database-design ruby-on-rails ruby-on-rails-3

91
推荐指数
2
解决办法
5万
查看次数

哪些列通常会成为好的索引?

作为" 什么是索引以及如何使用它们来优化我的数据库中的查询? " 的后续内容,我试图了解索引,哪些列是好的索引候选者?专门针对MS SQL数据库?

经过一些谷歌搜索,我读过的所有内容都表明,通常增加和唯一的列会产生一个很好的索引(比如MySQL的auto_increment),我理解这一点,但我使用的是MS SQL,我使用GUID作为主键,所以看来索引不会使GUID列受益......

database sql-server indexing optimization database-design

90
推荐指数
5
解决办法
7万
查看次数

主键/外键命名约定

在我们的开发组中,我们就主键和外键的命名约定进行了激烈辩论.我们小组基本上有两种思想流派:

1:

Primary Table (Employee)   
Primary Key is called ID

Foreign table (Event)  
Foreign key is called EmployeeID
Run Code Online (Sandbox Code Playgroud)

要么

2:

Primary Table (Employee)  
Primary Key is called EmployeeID

Foreign table (Event)  
Foreign key is called EmployeeID
Run Code Online (Sandbox Code Playgroud)

我不想在任何列中复制表的名称(所以我更喜欢上面的选项1).从概念上讲,它与其他语言中的许多推荐实践一致,在这些实践中,您不在其属性名称中使用对象的名称.我认为命名外键EmployeeID(或Employee_ID可能更好)告诉读者它是表的IDEmployee.

其他一些人更喜欢选项2,您可以在其中命名前缀为表名的主键,以便整个数据库中的列名相同.我明白了这一点,但你现在无法在视觉上区分主键和外键.

此外,我认为在列名中包含表名是多余的,因为如果您将表视为实体而将列视为该实体的属性或属性,则将其视为ID属性,而Employee不是EmployeeID员工的属性.我不去问我的同事他PersonAge或她PersonGender是什么.我问他的年龄是多少.

就像我说的那样,这是一场激烈的争论,我们继续谈论它.我有兴趣获得一些新的观点.

sql database-design naming-conventions

90
推荐指数
4
解决办法
5万
查看次数

如何在SQL Server中创建实体化视图?

我将设计一个DW,我听说了物化视图.实际上我想创建一个视图,它应该在更改基表时自动更新.任何人都可以用查询示例解释..

sql-server database-design indexed-views

89
推荐指数
4
解决办法
20万
查看次数